From 74739f7ef608d9e10f796ffc7de976c6c2c42752 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 8 Apr 2026 14:11:10 +0000 Subject: [PATCH 01/95] Move current pproc as is --- .gitignore => pproc/.gitignore | 0 LICENSE => pproc/LICENSE | 0 MANIFEST.in => pproc/MANIFEST.in | 0 README.md => pproc/README.md | 0 pyproject.toml => pproc/pyproject.toml | 0 requirements.txt => pproc/requirements.txt | 0 setup.py => pproc/setup.py | 0 {src => pproc/src}/pproc/Config.py | 0 {src => pproc/src}/pproc/__init__.py | 0 {src => pproc/src}/pproc/accum/__init__.py | 0 {src => pproc/src}/pproc/accum/main.py | 0 {src => pproc/src}/pproc/accum/postprocess.py | 0 {src => pproc/src}/pproc/accumulate.py | 0 {src => pproc/src}/pproc/anomaly.py | 0 {src => pproc/src}/pproc/clustereps/__init__.py | 0 {src => pproc/src}/pproc/clustereps/__main__.py | 0 {src => pproc/src}/pproc/clustereps/attribution.py | 0 {src => pproc/src}/pproc/clustereps/cluster.py | 0 {src => pproc/src}/pproc/clustereps/io.py | 0 {src => pproc/src}/pproc/clustereps/pca.py | 0 {src => pproc/src}/pproc/clustereps/season.py | 0 {src => pproc/src}/pproc/clustereps/utils.py | 0 {src => pproc/src}/pproc/common/__init__.py | 0 {src => pproc/src}/pproc/common/accumulation.py | 0 .../src}/pproc/common/accumulation_manager.py | 0 {src => pproc/src}/pproc/common/config.py | 0 {src => pproc/src}/pproc/common/dataset.py | 0 {src => pproc/src}/pproc/common/grib_helpers.py | 0 {src => pproc/src}/pproc/common/io.py | 0 {src => pproc/src}/pproc/common/mars.py | 0 {src => pproc/src}/pproc/common/parallel.py | 0 {src => pproc/src}/pproc/common/param_requester.py | 0 {src => pproc/src}/pproc/common/steps.py | 0 {src => pproc/src}/pproc/common/stepseq.py | 0 {src => pproc/src}/pproc/common/utils.py | 0 {src => pproc/src}/pproc/config/__init__.py | 0 {src => pproc/src}/pproc/config/accumulation.py | 0 {src => pproc/src}/pproc/config/base.py | 0 {src => pproc/src}/pproc/config/factory.py | 0 {src => pproc/src}/pproc/config/io.py | 0 {src => pproc/src}/pproc/config/log.py | 0 {src => pproc/src}/pproc/config/param.py | 0 {src => pproc/src}/pproc/config/preprocessing.py | 0 {src => pproc/src}/pproc/config/recovery.py | 0 {src => pproc/src}/pproc/config/targets.py | 0 {src => pproc/src}/pproc/config/types.py | 0 {src => pproc/src}/pproc/config/utils.py | 0 {src => pproc/src}/pproc/config_generation.py | 0 {src => pproc/src}/pproc/data/0.5_0.5.grib1 | Bin {src => pproc/src}/pproc/data/__init__.py | 0 {src => pproc/src}/pproc/data/pts/O1280.grib1 | Bin {src => pproc/src}/pproc/data/pts/O320.grib1 | Bin {src => pproc/src}/pproc/data/pts/O640.grib1 | Bin {src => pproc/src}/pproc/data/pts/__init__.py | 0 {src => pproc/src}/pproc/ecpoint.py | 0 {src => pproc/src}/pproc/ecpt/__init__.py | 0 {src => pproc/src}/pproc/ecpt/predictors.py | 0 {src => pproc/src}/pproc/ensms.py | 0 {src => pproc/src}/pproc/ensms_original.py | 0 {src => pproc/src}/pproc/extreme.py | 0 {src => pproc/src}/pproc/extreme_forecast_simple.py | 0 {src => pproc/src}/pproc/extremes/__init__.py | 0 {src => pproc/src}/pproc/extremes/grib.py | 0 {src => pproc/src}/pproc/extremes/indices.py | 0 {src => pproc/src}/pproc/flight_levels.py | 0 {src => pproc/src}/pproc/flightlevel/mapping.py | 0 {src => pproc/src}/pproc/histogram.py | 0 {src => pproc/src}/pproc/interpol.py | 0 {src => pproc/src}/pproc/monthly_stats.py | 0 {src => pproc/src}/pproc/prob/__init__.py | 0 .../src}/pproc/prob/accumulation_manager.py | 0 {src => pproc/src}/pproc/prob/climatology.py | 0 {src => pproc/src}/pproc/prob/parallel.py | 0 {src => pproc/src}/pproc/prob/threshold.py | 0 {src => pproc/src}/pproc/probabilities.py | 0 {src => pproc/src}/pproc/pts.md | 0 {src => pproc/src}/pproc/pts.py | 0 {src => pproc/src}/pproc/quantile/__init__.py | 0 {src => pproc/src}/pproc/quantile/grib.py | 0 {src => pproc/src}/pproc/quantiles.py | 0 {src => pproc/src}/pproc/schema/__init__.py | 0 {src => pproc/src}/pproc/schema/base.py | 0 {src => pproc/src}/pproc/schema/config.py | 0 {src => pproc/src}/pproc/schema/deriver.py | 0 {src => pproc/src}/pproc/schema/filters.py | 0 {src => pproc/src}/pproc/schema/input.py | 0 {src => pproc/src}/pproc/schema/schema.py | 0 {src => pproc/src}/pproc/schema/step.py | 0 {src => pproc/src}/pproc/schema/utils.py | 0 {src => pproc/src}/pproc/signi/__init__.py | 0 {src => pproc/src}/pproc/signi/clim.py | 0 {src => pproc/src}/pproc/significance.py | 0 {src => pproc/src}/pproc/spectral_order.py | 0 {src => pproc/src}/pproc/spectrum.py | 0 {src => pproc/src}/pproc/tcycl/__init__.py | 0 {src => pproc/src}/pproc/tcycl/map.npy | Bin {src => pproc/src}/pproc/tcycl/tcycl_evaluate.py | 0 {src => pproc/src}/pproc/tcycl/tcycl_run.py | 0 .../src}/pproc/tcycl/tcycl_summarise_ibtks.py | 0 .../src}/pproc/tcycl/tcycl_summarise_tcycl.py | 0 .../src}/pproc/tcycl/tcycl_summarise_trckr.py | 0 {src => pproc/src}/pproc/tcycl/tcycl_tools.py | 0 {src => pproc/src}/pproc/thermal_indices.py | 0 {src => pproc/src}/pproc/thermo/__init__.py | 0 {src => pproc/src}/pproc/thermo/helpers.py | 0 {src => pproc/src}/pproc/thermo/indices.py | 0 {src => pproc/src}/pproc/wind.py | 0 {src => pproc/src}/pproc/wind850.py | 0 {src => pproc/src}/pproc/wind850.yaml | 0 {tests => pproc/tests}/clusteps/test_season.py | 0 {tests => pproc/tests}/common/test_accumulation.py | 0 .../tests}/common/test_accumulation_manager.py | 0 {tests => pproc/tests}/common/test_config.py | 0 {tests => pproc/tests}/common/test_io.py | 0 {tests => pproc/tests}/common/test_mars.py | 0 {tests => pproc/tests}/common/test_steps.py | 0 {tests => pproc/tests}/common/test_stepseq.py | 0 {tests => pproc/tests}/common/test_utils.py | 0 {tests => pproc/tests}/config/test_accum.py | 0 {tests => pproc/tests}/config/test_base.py | 0 {tests => pproc/tests}/config/test_factory.py | 0 {tests => pproc/tests}/config/test_io_models.py | 0 {tests => pproc/tests}/config/test_log.py | 0 {tests => pproc/tests}/config/test_param.py | 0 {tests => pproc/tests}/config/test_preprocessing.py | 0 {tests => pproc/tests}/config/test_recovery.py | 0 {tests => pproc/tests}/config/types/test_ecpoint.py | 0 {tests => pproc/tests}/config/types/test_extreme.py | 0 .../tests}/config/types/test_flightlevels.py | 0 {tests => pproc/tests}/conftest.py | 0 {tests => pproc/tests}/ecpt/test_predictors.py | 0 .../tests}/prob/test_prob_accumulation_manager.py | 0 {tests => pproc/tests}/prob/test_prob_parallel.py | 0 {tests => pproc/tests}/schema/schema.yaml | 0 {tests => pproc/tests}/schema/test_config_schema.py | 0 {tests => pproc/tests}/schema/test_deriver.py | 0 {tests => pproc/tests}/schema/test_input_schema.py | 0 {tests => pproc/tests}/schema/test_schema.py | 0 {tests => pproc/tests}/schema/test_step_schema.py | 0 {tests => pproc/tests}/templates/clustereps.yaml | 0 {tests => pproc/tests}/templates/ensms.yaml | 0 {tests => pproc/tests}/templates/extreme.yaml | 0 {tests => pproc/tests}/templates/fdb/schema | 0 {tests => pproc/tests}/templates/prob.yaml | 0 {tests => pproc/tests}/templates/quantiles.yaml | 0 {tests => pproc/tests}/templates/t850.yaml | 0 {tests => pproc/tests}/templates/thermo.yaml | 0 {tests => pproc/tests}/templates/wind.yaml | 0 {tests => pproc/tests}/test_ensms.py | 0 {tests => pproc/tests}/test_ensms.yaml | 0 {tests => pproc/tests}/test_products.py | 0 {tests => pproc/tests}/test_spectral_order.py | 0 152 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => pproc/.gitignore (100%) rename LICENSE => pproc/LICENSE (100%) rename MANIFEST.in => pproc/MANIFEST.in (100%) rename README.md => pproc/README.md (100%) rename pyproject.toml => pproc/pyproject.toml (100%) rename requirements.txt => pproc/requirements.txt (100%) rename setup.py => pproc/setup.py (100%) rename {src => pproc/src}/pproc/Config.py (100%) rename {src => pproc/src}/pproc/__init__.py (100%) rename {src => pproc/src}/pproc/accum/__init__.py (100%) rename {src => pproc/src}/pproc/accum/main.py (100%) rename {src => pproc/src}/pproc/accum/postprocess.py (100%) rename {src => pproc/src}/pproc/accumulate.py (100%) rename {src => pproc/src}/pproc/anomaly.py (100%) rename {src => pproc/src}/pproc/clustereps/__init__.py (100%) rename {src => pproc/src}/pproc/clustereps/__main__.py (100%) rename {src => pproc/src}/pproc/clustereps/attribution.py (100%) rename {src => pproc/src}/pproc/clustereps/cluster.py (100%) rename {src => pproc/src}/pproc/clustereps/io.py (100%) rename {src => pproc/src}/pproc/clustereps/pca.py (100%) rename {src => pproc/src}/pproc/clustereps/season.py (100%) rename {src => pproc/src}/pproc/clustereps/utils.py (100%) rename {src => pproc/src}/pproc/common/__init__.py (100%) rename {src => pproc/src}/pproc/common/accumulation.py (100%) rename {src => pproc/src}/pproc/common/accumulation_manager.py (100%) rename {src => pproc/src}/pproc/common/config.py (100%) rename {src => pproc/src}/pproc/common/dataset.py (100%) rename {src => pproc/src}/pproc/common/grib_helpers.py (100%) rename {src => pproc/src}/pproc/common/io.py (100%) rename {src => pproc/src}/pproc/common/mars.py (100%) rename {src => pproc/src}/pproc/common/parallel.py (100%) rename {src => pproc/src}/pproc/common/param_requester.py (100%) rename {src => pproc/src}/pproc/common/steps.py (100%) rename {src => pproc/src}/pproc/common/stepseq.py (100%) rename {src => pproc/src}/pproc/common/utils.py (100%) rename {src => pproc/src}/pproc/config/__init__.py (100%) rename {src => pproc/src}/pproc/config/accumulation.py (100%) rename {src => pproc/src}/pproc/config/base.py (100%) rename {src => pproc/src}/pproc/config/factory.py (100%) rename {src => pproc/src}/pproc/config/io.py (100%) rename {src => pproc/src}/pproc/config/log.py (100%) rename {src => pproc/src}/pproc/config/param.py (100%) rename {src => pproc/src}/pproc/config/preprocessing.py (100%) rename {src => pproc/src}/pproc/config/recovery.py (100%) rename {src => pproc/src}/pproc/config/targets.py (100%) rename {src => pproc/src}/pproc/config/types.py (100%) rename {src => pproc/src}/pproc/config/utils.py (100%) rename {src => pproc/src}/pproc/config_generation.py (100%) rename {src => pproc/src}/pproc/data/0.5_0.5.grib1 (100%) rename {src => pproc/src}/pproc/data/__init__.py (100%) rename {src => pproc/src}/pproc/data/pts/O1280.grib1 (100%) rename {src => pproc/src}/pproc/data/pts/O320.grib1 (100%) rename {src => pproc/src}/pproc/data/pts/O640.grib1 (100%) rename {src => pproc/src}/pproc/data/pts/__init__.py (100%) rename {src => pproc/src}/pproc/ecpoint.py (100%) rename {src => pproc/src}/pproc/ecpt/__init__.py (100%) rename {src => pproc/src}/pproc/ecpt/predictors.py (100%) rename {src => pproc/src}/pproc/ensms.py (100%) rename {src => pproc/src}/pproc/ensms_original.py (100%) rename {src => pproc/src}/pproc/extreme.py (100%) rename {src => pproc/src}/pproc/extreme_forecast_simple.py (100%) rename {src => pproc/src}/pproc/extremes/__init__.py (100%) rename {src => pproc/src}/pproc/extremes/grib.py (100%) rename {src => pproc/src}/pproc/extremes/indices.py (100%) rename {src => pproc/src}/pproc/flight_levels.py (100%) rename {src => pproc/src}/pproc/flightlevel/mapping.py (100%) rename {src => pproc/src}/pproc/histogram.py (100%) rename {src => pproc/src}/pproc/interpol.py (100%) rename {src => pproc/src}/pproc/monthly_stats.py (100%) rename {src => pproc/src}/pproc/prob/__init__.py (100%) rename {src => pproc/src}/pproc/prob/accumulation_manager.py (100%) rename {src => pproc/src}/pproc/prob/climatology.py (100%) rename {src => pproc/src}/pproc/prob/parallel.py (100%) rename {src => pproc/src}/pproc/prob/threshold.py (100%) rename {src => pproc/src}/pproc/probabilities.py (100%) rename {src => pproc/src}/pproc/pts.md (100%) rename {src => pproc/src}/pproc/pts.py (100%) rename {src => pproc/src}/pproc/quantile/__init__.py (100%) rename {src => pproc/src}/pproc/quantile/grib.py (100%) rename {src => pproc/src}/pproc/quantiles.py (100%) rename {src => pproc/src}/pproc/schema/__init__.py (100%) rename {src => pproc/src}/pproc/schema/base.py (100%) rename {src => pproc/src}/pproc/schema/config.py (100%) rename {src => pproc/src}/pproc/schema/deriver.py (100%) rename {src => pproc/src}/pproc/schema/filters.py (100%) rename {src => pproc/src}/pproc/schema/input.py (100%) rename {src => pproc/src}/pproc/schema/schema.py (100%) rename {src => pproc/src}/pproc/schema/step.py (100%) rename {src => pproc/src}/pproc/schema/utils.py (100%) rename {src => pproc/src}/pproc/signi/__init__.py (100%) rename {src => pproc/src}/pproc/signi/clim.py (100%) rename {src => pproc/src}/pproc/significance.py (100%) rename {src => pproc/src}/pproc/spectral_order.py (100%) rename {src => pproc/src}/pproc/spectrum.py (100%) rename {src => pproc/src}/pproc/tcycl/__init__.py (100%) rename {src => pproc/src}/pproc/tcycl/map.npy (100%) rename {src => pproc/src}/pproc/tcycl/tcycl_evaluate.py (100%) rename {src => pproc/src}/pproc/tcycl/tcycl_run.py (100%) rename {src => pproc/src}/pproc/tcycl/tcycl_summarise_ibtks.py (100%) rename {src => pproc/src}/pproc/tcycl/tcycl_summarise_tcycl.py (100%) rename {src => pproc/src}/pproc/tcycl/tcycl_summarise_trckr.py (100%) rename {src => pproc/src}/pproc/tcycl/tcycl_tools.py (100%) rename {src => pproc/src}/pproc/thermal_indices.py (100%) rename {src => pproc/src}/pproc/thermo/__init__.py (100%) rename {src => pproc/src}/pproc/thermo/helpers.py (100%) rename {src => pproc/src}/pproc/thermo/indices.py (100%) rename {src => pproc/src}/pproc/wind.py (100%) rename {src => pproc/src}/pproc/wind850.py (100%) rename {src => pproc/src}/pproc/wind850.yaml (100%) rename {tests => pproc/tests}/clusteps/test_season.py (100%) rename {tests => pproc/tests}/common/test_accumulation.py (100%) rename {tests => pproc/tests}/common/test_accumulation_manager.py (100%) rename {tests => pproc/tests}/common/test_config.py (100%) rename {tests => pproc/tests}/common/test_io.py (100%) rename {tests => pproc/tests}/common/test_mars.py (100%) rename {tests => pproc/tests}/common/test_steps.py (100%) rename {tests => pproc/tests}/common/test_stepseq.py (100%) rename {tests => pproc/tests}/common/test_utils.py (100%) rename {tests => pproc/tests}/config/test_accum.py (100%) rename {tests => pproc/tests}/config/test_base.py (100%) rename {tests => pproc/tests}/config/test_factory.py (100%) rename {tests => pproc/tests}/config/test_io_models.py (100%) rename {tests => pproc/tests}/config/test_log.py (100%) rename {tests => pproc/tests}/config/test_param.py (100%) rename {tests => pproc/tests}/config/test_preprocessing.py (100%) rename {tests => pproc/tests}/config/test_recovery.py (100%) rename {tests => pproc/tests}/config/types/test_ecpoint.py (100%) rename {tests => pproc/tests}/config/types/test_extreme.py (100%) rename {tests => pproc/tests}/config/types/test_flightlevels.py (100%) rename {tests => pproc/tests}/conftest.py (100%) rename {tests => pproc/tests}/ecpt/test_predictors.py (100%) rename {tests => pproc/tests}/prob/test_prob_accumulation_manager.py (100%) rename {tests => pproc/tests}/prob/test_prob_parallel.py (100%) rename {tests => pproc/tests}/schema/schema.yaml (100%) rename {tests => pproc/tests}/schema/test_config_schema.py (100%) rename {tests => pproc/tests}/schema/test_deriver.py (100%) rename {tests => pproc/tests}/schema/test_input_schema.py (100%) rename {tests => pproc/tests}/schema/test_schema.py (100%) rename {tests => pproc/tests}/schema/test_step_schema.py (100%) rename {tests => pproc/tests}/templates/clustereps.yaml (100%) rename {tests => pproc/tests}/templates/ensms.yaml (100%) rename {tests => pproc/tests}/templates/extreme.yaml (100%) rename {tests => pproc/tests}/templates/fdb/schema (100%) rename {tests => pproc/tests}/templates/prob.yaml (100%) rename {tests => pproc/tests}/templates/quantiles.yaml (100%) rename {tests => pproc/tests}/templates/t850.yaml (100%) rename {tests => pproc/tests}/templates/thermo.yaml (100%) rename {tests => pproc/tests}/templates/wind.yaml (100%) rename {tests => pproc/tests}/test_ensms.py (100%) rename {tests => pproc/tests}/test_ensms.yaml (100%) rename {tests => pproc/tests}/test_products.py (100%) rename {tests => pproc/tests}/test_spectral_order.py (100%) diff --git a/.gitignore b/pproc/.gitignore similarity index 100% rename from .gitignore rename to pproc/.gitignore diff --git a/LICENSE b/pproc/LICENSE similarity index 100% rename from LICENSE rename to pproc/LICENSE diff --git a/MANIFEST.in b/pproc/MANIFEST.in similarity index 100% rename from MANIFEST.in rename to pproc/MANIFEST.in diff --git a/README.md b/pproc/README.md similarity index 100% rename from README.md rename to pproc/README.md diff --git a/pyproject.toml b/pproc/pyproject.toml similarity index 100% rename from pyproject.toml rename to pproc/pyproject.toml diff --git a/requirements.txt b/pproc/requirements.txt similarity index 100% rename from requirements.txt rename to pproc/requirements.txt diff --git a/setup.py b/pproc/setup.py similarity index 100% rename from setup.py rename to pproc/setup.py diff --git a/src/pproc/Config.py b/pproc/src/pproc/Config.py similarity index 100% rename from src/pproc/Config.py rename to pproc/src/pproc/Config.py diff --git a/src/pproc/__init__.py b/pproc/src/pproc/__init__.py similarity index 100% rename from src/pproc/__init__.py rename to pproc/src/pproc/__init__.py diff --git a/src/pproc/accum/__init__.py b/pproc/src/pproc/accum/__init__.py similarity index 100% rename from src/pproc/accum/__init__.py rename to pproc/src/pproc/accum/__init__.py diff --git a/src/pproc/accum/main.py b/pproc/src/pproc/accum/main.py similarity index 100% rename from src/pproc/accum/main.py rename to pproc/src/pproc/accum/main.py diff --git a/src/pproc/accum/postprocess.py b/pproc/src/pproc/accum/postprocess.py similarity index 100% rename from src/pproc/accum/postprocess.py rename to pproc/src/pproc/accum/postprocess.py diff --git a/src/pproc/accumulate.py b/pproc/src/pproc/accumulate.py similarity index 100% rename from src/pproc/accumulate.py rename to pproc/src/pproc/accumulate.py diff --git a/src/pproc/anomaly.py b/pproc/src/pproc/anomaly.py similarity index 100% rename from src/pproc/anomaly.py rename to pproc/src/pproc/anomaly.py diff --git a/src/pproc/clustereps/__init__.py b/pproc/src/pproc/clustereps/__init__.py similarity index 100% rename from src/pproc/clustereps/__init__.py rename to pproc/src/pproc/clustereps/__init__.py diff --git a/src/pproc/clustereps/__main__.py b/pproc/src/pproc/clustereps/__main__.py similarity index 100% rename from src/pproc/clustereps/__main__.py rename to pproc/src/pproc/clustereps/__main__.py diff --git a/src/pproc/clustereps/attribution.py b/pproc/src/pproc/clustereps/attribution.py similarity index 100% rename from src/pproc/clustereps/attribution.py rename to pproc/src/pproc/clustereps/attribution.py diff --git a/src/pproc/clustereps/cluster.py b/pproc/src/pproc/clustereps/cluster.py similarity index 100% rename from src/pproc/clustereps/cluster.py rename to pproc/src/pproc/clustereps/cluster.py diff --git a/src/pproc/clustereps/io.py b/pproc/src/pproc/clustereps/io.py similarity index 100% rename from src/pproc/clustereps/io.py rename to pproc/src/pproc/clustereps/io.py diff --git a/src/pproc/clustereps/pca.py b/pproc/src/pproc/clustereps/pca.py similarity index 100% rename from src/pproc/clustereps/pca.py rename to pproc/src/pproc/clustereps/pca.py diff --git a/src/pproc/clustereps/season.py b/pproc/src/pproc/clustereps/season.py similarity index 100% rename from src/pproc/clustereps/season.py rename to pproc/src/pproc/clustereps/season.py diff --git a/src/pproc/clustereps/utils.py b/pproc/src/pproc/clustereps/utils.py similarity index 100% rename from src/pproc/clustereps/utils.py rename to pproc/src/pproc/clustereps/utils.py diff --git a/src/pproc/common/__init__.py b/pproc/src/pproc/common/__init__.py similarity index 100% rename from src/pproc/common/__init__.py rename to pproc/src/pproc/common/__init__.py diff --git a/src/pproc/common/accumulation.py b/pproc/src/pproc/common/accumulation.py similarity index 100% rename from src/pproc/common/accumulation.py rename to pproc/src/pproc/common/accumulation.py diff --git a/src/pproc/common/accumulation_manager.py b/pproc/src/pproc/common/accumulation_manager.py similarity index 100% rename from src/pproc/common/accumulation_manager.py rename to pproc/src/pproc/common/accumulation_manager.py diff --git a/src/pproc/common/config.py b/pproc/src/pproc/common/config.py similarity index 100% rename from src/pproc/common/config.py rename to pproc/src/pproc/common/config.py diff --git a/src/pproc/common/dataset.py b/pproc/src/pproc/common/dataset.py similarity index 100% rename from src/pproc/common/dataset.py rename to pproc/src/pproc/common/dataset.py diff --git a/src/pproc/common/grib_helpers.py b/pproc/src/pproc/common/grib_helpers.py similarity index 100% rename from src/pproc/common/grib_helpers.py rename to pproc/src/pproc/common/grib_helpers.py diff --git a/src/pproc/common/io.py b/pproc/src/pproc/common/io.py similarity index 100% rename from src/pproc/common/io.py rename to pproc/src/pproc/common/io.py diff --git a/src/pproc/common/mars.py b/pproc/src/pproc/common/mars.py similarity index 100% rename from src/pproc/common/mars.py rename to pproc/src/pproc/common/mars.py diff --git a/src/pproc/common/parallel.py b/pproc/src/pproc/common/parallel.py similarity index 100% rename from src/pproc/common/parallel.py rename to pproc/src/pproc/common/parallel.py diff --git a/src/pproc/common/param_requester.py b/pproc/src/pproc/common/param_requester.py similarity index 100% rename from src/pproc/common/param_requester.py rename to pproc/src/pproc/common/param_requester.py diff --git a/src/pproc/common/steps.py b/pproc/src/pproc/common/steps.py similarity index 100% rename from src/pproc/common/steps.py rename to pproc/src/pproc/common/steps.py diff --git a/src/pproc/common/stepseq.py b/pproc/src/pproc/common/stepseq.py similarity index 100% rename from src/pproc/common/stepseq.py rename to pproc/src/pproc/common/stepseq.py diff --git a/src/pproc/common/utils.py b/pproc/src/pproc/common/utils.py similarity index 100% rename from src/pproc/common/utils.py rename to pproc/src/pproc/common/utils.py diff --git a/src/pproc/config/__init__.py b/pproc/src/pproc/config/__init__.py similarity index 100% rename from src/pproc/config/__init__.py rename to pproc/src/pproc/config/__init__.py diff --git a/src/pproc/config/accumulation.py b/pproc/src/pproc/config/accumulation.py similarity index 100% rename from src/pproc/config/accumulation.py rename to pproc/src/pproc/config/accumulation.py diff --git a/src/pproc/config/base.py b/pproc/src/pproc/config/base.py similarity index 100% rename from src/pproc/config/base.py rename to pproc/src/pproc/config/base.py diff --git a/src/pproc/config/factory.py b/pproc/src/pproc/config/factory.py similarity index 100% rename from src/pproc/config/factory.py rename to pproc/src/pproc/config/factory.py diff --git a/src/pproc/config/io.py b/pproc/src/pproc/config/io.py similarity index 100% rename from src/pproc/config/io.py rename to pproc/src/pproc/config/io.py diff --git a/src/pproc/config/log.py b/pproc/src/pproc/config/log.py similarity index 100% rename from src/pproc/config/log.py rename to pproc/src/pproc/config/log.py diff --git a/src/pproc/config/param.py b/pproc/src/pproc/config/param.py similarity index 100% rename from src/pproc/config/param.py rename to pproc/src/pproc/config/param.py diff --git a/src/pproc/config/preprocessing.py b/pproc/src/pproc/config/preprocessing.py similarity index 100% rename from src/pproc/config/preprocessing.py rename to pproc/src/pproc/config/preprocessing.py diff --git a/src/pproc/config/recovery.py b/pproc/src/pproc/config/recovery.py similarity index 100% rename from src/pproc/config/recovery.py rename to pproc/src/pproc/config/recovery.py diff --git a/src/pproc/config/targets.py b/pproc/src/pproc/config/targets.py similarity index 100% rename from src/pproc/config/targets.py rename to pproc/src/pproc/config/targets.py diff --git a/src/pproc/config/types.py b/pproc/src/pproc/config/types.py similarity index 100% rename from src/pproc/config/types.py rename to pproc/src/pproc/config/types.py diff --git a/src/pproc/config/utils.py b/pproc/src/pproc/config/utils.py similarity index 100% rename from src/pproc/config/utils.py rename to pproc/src/pproc/config/utils.py diff --git a/src/pproc/config_generation.py b/pproc/src/pproc/config_generation.py similarity index 100% rename from src/pproc/config_generation.py rename to pproc/src/pproc/config_generation.py diff --git a/src/pproc/data/0.5_0.5.grib1 b/pproc/src/pproc/data/0.5_0.5.grib1 similarity index 100% rename from src/pproc/data/0.5_0.5.grib1 rename to pproc/src/pproc/data/0.5_0.5.grib1 diff --git a/src/pproc/data/__init__.py b/pproc/src/pproc/data/__init__.py similarity index 100% rename from src/pproc/data/__init__.py rename to pproc/src/pproc/data/__init__.py diff --git a/src/pproc/data/pts/O1280.grib1 b/pproc/src/pproc/data/pts/O1280.grib1 similarity index 100% rename from src/pproc/data/pts/O1280.grib1 rename to pproc/src/pproc/data/pts/O1280.grib1 diff --git a/src/pproc/data/pts/O320.grib1 b/pproc/src/pproc/data/pts/O320.grib1 similarity index 100% rename from src/pproc/data/pts/O320.grib1 rename to pproc/src/pproc/data/pts/O320.grib1 diff --git a/src/pproc/data/pts/O640.grib1 b/pproc/src/pproc/data/pts/O640.grib1 similarity index 100% rename from src/pproc/data/pts/O640.grib1 rename to pproc/src/pproc/data/pts/O640.grib1 diff --git a/src/pproc/data/pts/__init__.py b/pproc/src/pproc/data/pts/__init__.py similarity index 100% rename from src/pproc/data/pts/__init__.py rename to pproc/src/pproc/data/pts/__init__.py diff --git a/src/pproc/ecpoint.py b/pproc/src/pproc/ecpoint.py similarity index 100% rename from src/pproc/ecpoint.py rename to pproc/src/pproc/ecpoint.py diff --git a/src/pproc/ecpt/__init__.py b/pproc/src/pproc/ecpt/__init__.py similarity index 100% rename from src/pproc/ecpt/__init__.py rename to pproc/src/pproc/ecpt/__init__.py diff --git a/src/pproc/ecpt/predictors.py b/pproc/src/pproc/ecpt/predictors.py similarity index 100% rename from src/pproc/ecpt/predictors.py rename to pproc/src/pproc/ecpt/predictors.py diff --git a/src/pproc/ensms.py b/pproc/src/pproc/ensms.py similarity index 100% rename from src/pproc/ensms.py rename to pproc/src/pproc/ensms.py diff --git a/src/pproc/ensms_original.py b/pproc/src/pproc/ensms_original.py similarity index 100% rename from src/pproc/ensms_original.py rename to pproc/src/pproc/ensms_original.py diff --git a/src/pproc/extreme.py b/pproc/src/pproc/extreme.py similarity index 100% rename from src/pproc/extreme.py rename to pproc/src/pproc/extreme.py diff --git a/src/pproc/extreme_forecast_simple.py b/pproc/src/pproc/extreme_forecast_simple.py similarity index 100% rename from src/pproc/extreme_forecast_simple.py rename to pproc/src/pproc/extreme_forecast_simple.py diff --git a/src/pproc/extremes/__init__.py b/pproc/src/pproc/extremes/__init__.py similarity index 100% rename from src/pproc/extremes/__init__.py rename to pproc/src/pproc/extremes/__init__.py diff --git a/src/pproc/extremes/grib.py b/pproc/src/pproc/extremes/grib.py similarity index 100% rename from src/pproc/extremes/grib.py rename to pproc/src/pproc/extremes/grib.py diff --git a/src/pproc/extremes/indices.py b/pproc/src/pproc/extremes/indices.py similarity index 100% rename from src/pproc/extremes/indices.py rename to pproc/src/pproc/extremes/indices.py diff --git a/src/pproc/flight_levels.py b/pproc/src/pproc/flight_levels.py similarity index 100% rename from src/pproc/flight_levels.py rename to pproc/src/pproc/flight_levels.py diff --git a/src/pproc/flightlevel/mapping.py b/pproc/src/pproc/flightlevel/mapping.py similarity index 100% rename from src/pproc/flightlevel/mapping.py rename to pproc/src/pproc/flightlevel/mapping.py diff --git a/src/pproc/histogram.py b/pproc/src/pproc/histogram.py similarity index 100% rename from src/pproc/histogram.py rename to pproc/src/pproc/histogram.py diff --git a/src/pproc/interpol.py b/pproc/src/pproc/interpol.py similarity index 100% rename from src/pproc/interpol.py rename to pproc/src/pproc/interpol.py diff --git a/src/pproc/monthly_stats.py b/pproc/src/pproc/monthly_stats.py similarity index 100% rename from src/pproc/monthly_stats.py rename to pproc/src/pproc/monthly_stats.py diff --git a/src/pproc/prob/__init__.py b/pproc/src/pproc/prob/__init__.py similarity index 100% rename from src/pproc/prob/__init__.py rename to pproc/src/pproc/prob/__init__.py diff --git a/src/pproc/prob/accumulation_manager.py b/pproc/src/pproc/prob/accumulation_manager.py similarity index 100% rename from src/pproc/prob/accumulation_manager.py rename to pproc/src/pproc/prob/accumulation_manager.py diff --git a/src/pproc/prob/climatology.py b/pproc/src/pproc/prob/climatology.py similarity index 100% rename from src/pproc/prob/climatology.py rename to pproc/src/pproc/prob/climatology.py diff --git a/src/pproc/prob/parallel.py b/pproc/src/pproc/prob/parallel.py similarity index 100% rename from src/pproc/prob/parallel.py rename to pproc/src/pproc/prob/parallel.py diff --git a/src/pproc/prob/threshold.py b/pproc/src/pproc/prob/threshold.py similarity index 100% rename from src/pproc/prob/threshold.py rename to pproc/src/pproc/prob/threshold.py diff --git a/src/pproc/probabilities.py b/pproc/src/pproc/probabilities.py similarity index 100% rename from src/pproc/probabilities.py rename to pproc/src/pproc/probabilities.py diff --git a/src/pproc/pts.md b/pproc/src/pproc/pts.md similarity index 100% rename from src/pproc/pts.md rename to pproc/src/pproc/pts.md diff --git a/src/pproc/pts.py b/pproc/src/pproc/pts.py similarity index 100% rename from src/pproc/pts.py rename to pproc/src/pproc/pts.py diff --git a/src/pproc/quantile/__init__.py b/pproc/src/pproc/quantile/__init__.py similarity index 100% rename from src/pproc/quantile/__init__.py rename to pproc/src/pproc/quantile/__init__.py diff --git a/src/pproc/quantile/grib.py b/pproc/src/pproc/quantile/grib.py similarity index 100% rename from src/pproc/quantile/grib.py rename to pproc/src/pproc/quantile/grib.py diff --git a/src/pproc/quantiles.py b/pproc/src/pproc/quantiles.py similarity index 100% rename from src/pproc/quantiles.py rename to pproc/src/pproc/quantiles.py diff --git a/src/pproc/schema/__init__.py b/pproc/src/pproc/schema/__init__.py similarity index 100% rename from src/pproc/schema/__init__.py rename to pproc/src/pproc/schema/__init__.py diff --git a/src/pproc/schema/base.py b/pproc/src/pproc/schema/base.py similarity index 100% rename from src/pproc/schema/base.py rename to pproc/src/pproc/schema/base.py diff --git a/src/pproc/schema/config.py b/pproc/src/pproc/schema/config.py similarity index 100% rename from src/pproc/schema/config.py rename to pproc/src/pproc/schema/config.py diff --git a/src/pproc/schema/deriver.py b/pproc/src/pproc/schema/deriver.py similarity index 100% rename from src/pproc/schema/deriver.py rename to pproc/src/pproc/schema/deriver.py diff --git a/src/pproc/schema/filters.py b/pproc/src/pproc/schema/filters.py similarity index 100% rename from src/pproc/schema/filters.py rename to pproc/src/pproc/schema/filters.py diff --git a/src/pproc/schema/input.py b/pproc/src/pproc/schema/input.py similarity index 100% rename from src/pproc/schema/input.py rename to pproc/src/pproc/schema/input.py diff --git a/src/pproc/schema/schema.py b/pproc/src/pproc/schema/schema.py similarity index 100% rename from src/pproc/schema/schema.py rename to pproc/src/pproc/schema/schema.py diff --git a/src/pproc/schema/step.py b/pproc/src/pproc/schema/step.py similarity index 100% rename from src/pproc/schema/step.py rename to pproc/src/pproc/schema/step.py diff --git a/src/pproc/schema/utils.py b/pproc/src/pproc/schema/utils.py similarity index 100% rename from src/pproc/schema/utils.py rename to pproc/src/pproc/schema/utils.py diff --git a/src/pproc/signi/__init__.py b/pproc/src/pproc/signi/__init__.py similarity index 100% rename from src/pproc/signi/__init__.py rename to pproc/src/pproc/signi/__init__.py diff --git a/src/pproc/signi/clim.py b/pproc/src/pproc/signi/clim.py similarity index 100% rename from src/pproc/signi/clim.py rename to pproc/src/pproc/signi/clim.py diff --git a/src/pproc/significance.py b/pproc/src/pproc/significance.py similarity index 100% rename from src/pproc/significance.py rename to pproc/src/pproc/significance.py diff --git a/src/pproc/spectral_order.py b/pproc/src/pproc/spectral_order.py similarity index 100% rename from src/pproc/spectral_order.py rename to pproc/src/pproc/spectral_order.py diff --git a/src/pproc/spectrum.py b/pproc/src/pproc/spectrum.py similarity index 100% rename from src/pproc/spectrum.py rename to pproc/src/pproc/spectrum.py diff --git a/src/pproc/tcycl/__init__.py b/pproc/src/pproc/tcycl/__init__.py similarity index 100% rename from src/pproc/tcycl/__init__.py rename to pproc/src/pproc/tcycl/__init__.py diff --git a/src/pproc/tcycl/map.npy b/pproc/src/pproc/tcycl/map.npy similarity index 100% rename from src/pproc/tcycl/map.npy rename to pproc/src/pproc/tcycl/map.npy diff --git a/src/pproc/tcycl/tcycl_evaluate.py b/pproc/src/pproc/tcycl/tcycl_evaluate.py similarity index 100% rename from src/pproc/tcycl/tcycl_evaluate.py rename to pproc/src/pproc/tcycl/tcycl_evaluate.py diff --git a/src/pproc/tcycl/tcycl_run.py b/pproc/src/pproc/tcycl/tcycl_run.py similarity index 100% rename from src/pproc/tcycl/tcycl_run.py rename to pproc/src/pproc/tcycl/tcycl_run.py diff --git a/src/pproc/tcycl/tcycl_summarise_ibtks.py b/pproc/src/pproc/tcycl/tcycl_summarise_ibtks.py similarity index 100% rename from src/pproc/tcycl/tcycl_summarise_ibtks.py rename to pproc/src/pproc/tcycl/tcycl_summarise_ibtks.py diff --git a/src/pproc/tcycl/tcycl_summarise_tcycl.py b/pproc/src/pproc/tcycl/tcycl_summarise_tcycl.py similarity index 100% rename from src/pproc/tcycl/tcycl_summarise_tcycl.py rename to pproc/src/pproc/tcycl/tcycl_summarise_tcycl.py diff --git a/src/pproc/tcycl/tcycl_summarise_trckr.py b/pproc/src/pproc/tcycl/tcycl_summarise_trckr.py similarity index 100% rename from src/pproc/tcycl/tcycl_summarise_trckr.py rename to pproc/src/pproc/tcycl/tcycl_summarise_trckr.py diff --git a/src/pproc/tcycl/tcycl_tools.py b/pproc/src/pproc/tcycl/tcycl_tools.py similarity index 100% rename from src/pproc/tcycl/tcycl_tools.py rename to pproc/src/pproc/tcycl/tcycl_tools.py diff --git a/src/pproc/thermal_indices.py b/pproc/src/pproc/thermal_indices.py similarity index 100% rename from src/pproc/thermal_indices.py rename to pproc/src/pproc/thermal_indices.py diff --git a/src/pproc/thermo/__init__.py b/pproc/src/pproc/thermo/__init__.py similarity index 100% rename from src/pproc/thermo/__init__.py rename to pproc/src/pproc/thermo/__init__.py diff --git a/src/pproc/thermo/helpers.py b/pproc/src/pproc/thermo/helpers.py similarity index 100% rename from src/pproc/thermo/helpers.py rename to pproc/src/pproc/thermo/helpers.py diff --git a/src/pproc/thermo/indices.py b/pproc/src/pproc/thermo/indices.py similarity index 100% rename from src/pproc/thermo/indices.py rename to pproc/src/pproc/thermo/indices.py diff --git a/src/pproc/wind.py b/pproc/src/pproc/wind.py similarity index 100% rename from src/pproc/wind.py rename to pproc/src/pproc/wind.py diff --git a/src/pproc/wind850.py b/pproc/src/pproc/wind850.py similarity index 100% rename from src/pproc/wind850.py rename to pproc/src/pproc/wind850.py diff --git a/src/pproc/wind850.yaml b/pproc/src/pproc/wind850.yaml similarity index 100% rename from src/pproc/wind850.yaml rename to pproc/src/pproc/wind850.yaml diff --git a/tests/clusteps/test_season.py b/pproc/tests/clusteps/test_season.py similarity index 100% rename from tests/clusteps/test_season.py rename to pproc/tests/clusteps/test_season.py diff --git a/tests/common/test_accumulation.py b/pproc/tests/common/test_accumulation.py similarity index 100% rename from tests/common/test_accumulation.py rename to pproc/tests/common/test_accumulation.py diff --git a/tests/common/test_accumulation_manager.py b/pproc/tests/common/test_accumulation_manager.py similarity index 100% rename from tests/common/test_accumulation_manager.py rename to pproc/tests/common/test_accumulation_manager.py diff --git a/tests/common/test_config.py b/pproc/tests/common/test_config.py similarity index 100% rename from tests/common/test_config.py rename to pproc/tests/common/test_config.py diff --git a/tests/common/test_io.py b/pproc/tests/common/test_io.py similarity index 100% rename from tests/common/test_io.py rename to pproc/tests/common/test_io.py diff --git a/tests/common/test_mars.py b/pproc/tests/common/test_mars.py similarity index 100% rename from tests/common/test_mars.py rename to pproc/tests/common/test_mars.py diff --git a/tests/common/test_steps.py b/pproc/tests/common/test_steps.py similarity index 100% rename from tests/common/test_steps.py rename to pproc/tests/common/test_steps.py diff --git a/tests/common/test_stepseq.py b/pproc/tests/common/test_stepseq.py similarity index 100% rename from tests/common/test_stepseq.py rename to pproc/tests/common/test_stepseq.py diff --git a/tests/common/test_utils.py b/pproc/tests/common/test_utils.py similarity index 100% rename from tests/common/test_utils.py rename to pproc/tests/common/test_utils.py diff --git a/tests/config/test_accum.py b/pproc/tests/config/test_accum.py similarity index 100% rename from tests/config/test_accum.py rename to pproc/tests/config/test_accum.py diff --git a/tests/config/test_base.py b/pproc/tests/config/test_base.py similarity index 100% rename from tests/config/test_base.py rename to pproc/tests/config/test_base.py diff --git a/tests/config/test_factory.py b/pproc/tests/config/test_factory.py similarity index 100% rename from tests/config/test_factory.py rename to pproc/tests/config/test_factory.py diff --git a/tests/config/test_io_models.py b/pproc/tests/config/test_io_models.py similarity index 100% rename from tests/config/test_io_models.py rename to pproc/tests/config/test_io_models.py diff --git a/tests/config/test_log.py b/pproc/tests/config/test_log.py similarity index 100% rename from tests/config/test_log.py rename to pproc/tests/config/test_log.py diff --git a/tests/config/test_param.py b/pproc/tests/config/test_param.py similarity index 100% rename from tests/config/test_param.py rename to pproc/tests/config/test_param.py diff --git a/tests/config/test_preprocessing.py b/pproc/tests/config/test_preprocessing.py similarity index 100% rename from tests/config/test_preprocessing.py rename to pproc/tests/config/test_preprocessing.py diff --git a/tests/config/test_recovery.py b/pproc/tests/config/test_recovery.py similarity index 100% rename from tests/config/test_recovery.py rename to pproc/tests/config/test_recovery.py diff --git a/tests/config/types/test_ecpoint.py b/pproc/tests/config/types/test_ecpoint.py similarity index 100% rename from tests/config/types/test_ecpoint.py rename to pproc/tests/config/types/test_ecpoint.py diff --git a/tests/config/types/test_extreme.py b/pproc/tests/config/types/test_extreme.py similarity index 100% rename from tests/config/types/test_extreme.py rename to pproc/tests/config/types/test_extreme.py diff --git a/tests/config/types/test_flightlevels.py b/pproc/tests/config/types/test_flightlevels.py similarity index 100% rename from tests/config/types/test_flightlevels.py rename to pproc/tests/config/types/test_flightlevels.py diff --git a/tests/conftest.py b/pproc/tests/conftest.py similarity index 100% rename from tests/conftest.py rename to pproc/tests/conftest.py diff --git a/tests/ecpt/test_predictors.py b/pproc/tests/ecpt/test_predictors.py similarity index 100% rename from tests/ecpt/test_predictors.py rename to pproc/tests/ecpt/test_predictors.py diff --git a/tests/prob/test_prob_accumulation_manager.py b/pproc/tests/prob/test_prob_accumulation_manager.py similarity index 100% rename from tests/prob/test_prob_accumulation_manager.py rename to pproc/tests/prob/test_prob_accumulation_manager.py diff --git a/tests/prob/test_prob_parallel.py b/pproc/tests/prob/test_prob_parallel.py similarity index 100% rename from tests/prob/test_prob_parallel.py rename to pproc/tests/prob/test_prob_parallel.py diff --git a/tests/schema/schema.yaml b/pproc/tests/schema/schema.yaml similarity index 100% rename from tests/schema/schema.yaml rename to pproc/tests/schema/schema.yaml diff --git a/tests/schema/test_config_schema.py b/pproc/tests/schema/test_config_schema.py similarity index 100% rename from tests/schema/test_config_schema.py rename to pproc/tests/schema/test_config_schema.py diff --git a/tests/schema/test_deriver.py b/pproc/tests/schema/test_deriver.py similarity index 100% rename from tests/schema/test_deriver.py rename to pproc/tests/schema/test_deriver.py diff --git a/tests/schema/test_input_schema.py b/pproc/tests/schema/test_input_schema.py similarity index 100% rename from tests/schema/test_input_schema.py rename to pproc/tests/schema/test_input_schema.py diff --git a/tests/schema/test_schema.py b/pproc/tests/schema/test_schema.py similarity index 100% rename from tests/schema/test_schema.py rename to pproc/tests/schema/test_schema.py diff --git a/tests/schema/test_step_schema.py b/pproc/tests/schema/test_step_schema.py similarity index 100% rename from tests/schema/test_step_schema.py rename to pproc/tests/schema/test_step_schema.py diff --git a/tests/templates/clustereps.yaml b/pproc/tests/templates/clustereps.yaml similarity index 100% rename from tests/templates/clustereps.yaml rename to pproc/tests/templates/clustereps.yaml diff --git a/tests/templates/ensms.yaml b/pproc/tests/templates/ensms.yaml similarity index 100% rename from tests/templates/ensms.yaml rename to pproc/tests/templates/ensms.yaml diff --git a/tests/templates/extreme.yaml b/pproc/tests/templates/extreme.yaml similarity index 100% rename from tests/templates/extreme.yaml rename to pproc/tests/templates/extreme.yaml diff --git a/tests/templates/fdb/schema b/pproc/tests/templates/fdb/schema similarity index 100% rename from tests/templates/fdb/schema rename to pproc/tests/templates/fdb/schema diff --git a/tests/templates/prob.yaml b/pproc/tests/templates/prob.yaml similarity index 100% rename from tests/templates/prob.yaml rename to pproc/tests/templates/prob.yaml diff --git a/tests/templates/quantiles.yaml b/pproc/tests/templates/quantiles.yaml similarity index 100% rename from tests/templates/quantiles.yaml rename to pproc/tests/templates/quantiles.yaml diff --git a/tests/templates/t850.yaml b/pproc/tests/templates/t850.yaml similarity index 100% rename from tests/templates/t850.yaml rename to pproc/tests/templates/t850.yaml diff --git a/tests/templates/thermo.yaml b/pproc/tests/templates/thermo.yaml similarity index 100% rename from tests/templates/thermo.yaml rename to pproc/tests/templates/thermo.yaml diff --git a/tests/templates/wind.yaml b/pproc/tests/templates/wind.yaml similarity index 100% rename from tests/templates/wind.yaml rename to pproc/tests/templates/wind.yaml diff --git a/tests/test_ensms.py b/pproc/tests/test_ensms.py similarity index 100% rename from tests/test_ensms.py rename to pproc/tests/test_ensms.py diff --git a/tests/test_ensms.yaml b/pproc/tests/test_ensms.yaml similarity index 100% rename from tests/test_ensms.yaml rename to pproc/tests/test_ensms.yaml diff --git a/tests/test_products.py b/pproc/tests/test_products.py similarity index 100% rename from tests/test_products.py rename to pproc/tests/test_products.py diff --git a/tests/test_spectral_order.py b/pproc/tests/test_spectral_order.py similarity index 100% rename from tests/test_spectral_order.py rename to pproc/tests/test_spectral_order.py From 7645e32410389654bde646959b03e4c2bee87586 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 8 Apr 2026 14:26:09 +0000 Subject: [PATCH 02/95] Copy over earthkit-workflows-pproc develop branch --- pproc-core/LICENSE | 201 ++ pproc-core/README.md | 34 + pproc-core/docs/examples/ensms.ipynb | 85 + pproc-core/docs/examples/multi-prods.ipynb | 154 ++ pproc-core/pyproject.toml | 66 + pproc-core/setup.py | 3 + .../workflows/plugins/pproc/__init__.py | 0 .../workflows/plugins/pproc/fluent.py | 772 +++++++ .../workflows/plugins/pproc/products.py | 150 ++ .../workflows/plugins/pproc/templates.py | 240 +++ .../workflows/plugins/pproc/utils/__init__.py | 0 .../workflows/plugins/pproc/utils/grib.py | 192 ++ .../workflows/plugins/pproc/utils/io.py | 193 ++ .../workflows/plugins/pproc/utils/math.py | 189 ++ .../workflows/plugins/pproc/utils/patch.py | 41 + .../workflows/plugins/pproc/utils/request.py | 121 ++ pproc-core/tests/helpers/mock.py | 28 + pproc-core/tests/schema.yaml | 1834 +++++++++++++++++ pproc-core/tests/templates/ensms.yaml | 106 + pproc-core/tests/templates/extreme.yaml | 124 ++ pproc-core/tests/templates/prob.yaml | 140 ++ pproc-core/tests/templates/quantiles.yaml | 55 + pproc-core/tests/templates/t850.yaml | 120 ++ pproc-core/tests/templates/wind.yaml | 123 ++ pproc-core/tests/test_fluent.py | 54 + pproc-core/tests/test_products.py | 35 + pproc-core/tests/test_templates.py | 88 + pproc-core/tests/utils/test_io.py | 54 + pproc-core/tests/utils/test_patch.py | 24 + 29 files changed, 5226 insertions(+) create mode 100644 pproc-core/LICENSE create mode 100644 pproc-core/README.md create mode 100644 pproc-core/docs/examples/ensms.ipynb create mode 100644 pproc-core/docs/examples/multi-prods.ipynb create mode 100644 pproc-core/pyproject.toml create mode 100644 pproc-core/setup.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/__init__.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/products.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/templates.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/utils/__init__.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/utils/grib.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/utils/io.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/utils/math.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/utils/patch.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py create mode 100644 pproc-core/tests/helpers/mock.py create mode 100644 pproc-core/tests/schema.yaml create mode 100644 pproc-core/tests/templates/ensms.yaml create mode 100644 pproc-core/tests/templates/extreme.yaml create mode 100644 pproc-core/tests/templates/prob.yaml create mode 100644 pproc-core/tests/templates/quantiles.yaml create mode 100644 pproc-core/tests/templates/t850.yaml create mode 100644 pproc-core/tests/templates/wind.yaml create mode 100644 pproc-core/tests/test_fluent.py create mode 100644 pproc-core/tests/test_products.py create mode 100644 pproc-core/tests/test_templates.py create mode 100644 pproc-core/tests/utils/test_io.py create mode 100644 pproc-core/tests/utils/test_patch.py diff --git a/pproc-core/LICENSE b/pproc-core/LICENSE new file mode 100644 index 00000000..74a60543 --- /dev/null +++ b/pproc-core/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2024, European Centre for Medium Range Weather Forecasts. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/pproc-core/README.md b/pproc-core/README.md new file mode 100644 index 00000000..11b146eb --- /dev/null +++ b/pproc-core/README.md @@ -0,0 +1,34 @@ +# earthkit-workflows-pproc + +

+ + Static Badge + + + + Code Coverage + + + + License: Apache 2.0 + + + + Latest Release + +

+ +> \[!IMPORTANT\] +> This software is **Sandbox** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). + +Earthkit-Workflows-PProc is a Python library for constructing task graphs associated to forecast post-processing products provided by [PProc](https://github.com/ecmwf/pproc). These task graphs are an extension of the [earthkit-workflows](https://github.com/ecmwf/earthkit-workflows) framework, in which the graphs can be executed. + +## Installation + +The workflows defined in this plugin depend on PProc. Please follow the instructions in https://github.com/ecmwf/pproc for installing PProc and it's dependencies, after which this plugin can be installed via `pip` with: + +```bash +pip install git+https://github.com/ecmwf/earthkit-workflows-pproc.git +``` + +For development, you can use `pip install -e .` diff --git a/pproc-core/docs/examples/ensms.ipynb b/pproc-core/docs/examples/ensms.ipynb new file mode 100644 index 00000000..ba56ec7c --- /dev/null +++ b/pproc-core/docs/examples/ensms.ipynb @@ -0,0 +1,85 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Graph Construction" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from earthkit.workflows.plugins.pproc.fluent import from_source\n", + "from earthkit.workflows.graph import deduplicate_nodes\n", + "\n", + "interpolation = {\n", + " \"grid\": \"O320\"\n", + "}\n", + "\n", + "actions = (\n", + " from_source([{\n", + " \"class\": \"od\", \n", + " \"expver\": \"0001\", \n", + " \"stream\": \"enfo\", \n", + " \"date\": \"20240425\", \n", + " \"time\": \"00\", \n", + " \"param\": 167, \n", + " \"levtype\": \"sfc\", \n", + " \"type\": \"pf\", \n", + " \"number\": range(1, 6), \n", + " \"step\": range(0, 25, 6),\n", + " \"source\": \"mars\", \n", + " \"interpolate\": interpolation,\n", + " }])\n", + " .accum_operation(\n", + " \"mean\", \n", + " [[0, 6, 12, 18, 24], [12, 18, 24]],\n", + " dim=\"step\", batch_size=2) \n", + " .ensemble_operation(\"ensms\", dim=\"number\")\n", + ")\n", + "\n", + "graph = deduplicate_nodes(actions.graph())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from earthkit.workflows.visualise import visualise\n", + "\n", + "visualise(graph, \"mean.html\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ppcascade", + "language": "python", + "name": "ppcascade" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pproc-core/docs/examples/multi-prods.ipynb b/pproc-core/docs/examples/multi-prods.ipynb new file mode 100644 index 00000000..c12b12cb --- /dev/null +++ b/pproc-core/docs/examples/multi-prods.ipynb @@ -0,0 +1,154 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Graph Construction" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from earthkit.workflows.plugins.pproc.fluent import from_source\n", + "from earthkit.workflows.plugins.pproc.utils.request import Request\n", + "from earthkit.workflows.graph import deduplicate_nodes\n", + "\n", + "GRID = \"O320\" # For higher memory usage increase to O640 or O1280\n", + "NUM_ENSEMBLES = 2 # Can increase up to 50\n", + "SOURCE = \"mars\" # Change to fdb if using local fdb. Note FDB_HOME will need to be specified \n", + " # and to change the grid from that archived in the FDB you will need to add \n", + " # the commented out interpolation line in the request and remove the \"grid\" \n", + " # key\n", + "END_STEP = 60 # Can increase to a number divisible by 6 up to 240\n", + "DATE = \"20241015\"\n", + "CLIM_DATE = \"20241014\"\n", + "\n", + "inputs = from_source([{\n", + " \"class\": \"od\", \n", + " \"expver\": \"0001\", \n", + " \"stream\": \"enfo\", \n", + " \"date\": DATE, \n", + " \"time\": \"00\", \n", + " \"param\": 167, \n", + " \"levtype\": \"sfc\", \n", + " \"type\": \"pf\", \n", + " \"number\": range(1, NUM_ENSEMBLES + 1), \n", + " \"step\": range(0, END_STEP + 1, 3),\n", + " \"source\": SOURCE, \n", + " \"grid\": GRID,\n", + " # \"interpolate\": {\"grid\": GRID},\n", + " }])\n", + "\n", + "# Graph for computing ensemble mean and standard deviation for each time step\n", + "ensms_graph = (\n", + " inputs \n", + " .ensemble_operation(\"ensms\", dim=\"number\", batch_size=2)\n", + " .graph()\n", + ")\n", + "\n", + "# Graph for computing probability of exceeding a certain threshold across a step window\n", + "prob_windows = [[x] for x in range(0, END_STEP + 1, 24)] + [\n", + " list(range(x, x + 121, 6)) for x in range(0, END_STEP - 119, 120)\n", + "]\n", + "prob_graph = (\n", + " inputs\n", + " .accum_operation(\n", + " \"min\", \n", + " prob_windows,\n", + " dim=\"step\", batch_size=2)\n", + " .ensemble_operation(\n", + " \"threshold_prob\", \n", + " comparison=\"<=\", \n", + " local_scale_factor=2, \n", + " value= 273.15,\n", + " )\n", + " .graph()\n", + ")\n", + "\n", + "# Graph for computing extreme forecast indices - this has the highest memory consumption \n", + "efi_windows = [list(range(x, x+25, 6)) for x in range(0, END_STEP - 23, 24)]\n", + "climatology = from_source(\n", + " [Request({\n", + " \"class\": \"od\", \n", + " \"expver\": \"0001\", \n", + " \"stream\": \"efhs\", \n", + " \"date\": CLIM_DATE, \n", + " \"time\": \"00\", \n", + " \"param\": 228004, \n", + " \"levtype\": \"sfc\", \n", + " \"type\": \"cd\", \n", + " \"quantile\": [f\"{x}:100\" for x in range(101)],\n", + " \"step\": [f\"{x}-{x+24}\" for x in range(0, END_STEP - 23, 24)],\n", + " \"source\": SOURCE, \n", + " \"grid\": GRID,\n", + " # \"interpolate\": {\"grid\": GRID},\n", + " }, no_expand=(\"quantile\",))]\n", + ")\n", + "efi_graph = (\n", + " inputs\n", + " .accum_operation(\n", + " \"mean\", \n", + " efi_windows,\n", + " dim=\"step\", batch_size=2)\n", + " .ensemble_extreme(\n", + " \"extreme\",\n", + " climatology,\n", + " [f\"{x[0]}-{x[-1]}\" for x in efi_windows],\n", + " sot=[10, 90],\n", + " eps=1e-4,\n", + " metadata={\n", + " \"edition\": 1,\n", + " \"gribTablesVersionNo\": 132,\n", + " \"indicatorOfParameter\": 167,\n", + " \"localDefinitionNumber\": 19,\n", + " \"timeRangeIndicator\": 3\n", + " }\n", + " )\n", + " .graph()\n", + ")\n", + "\n", + "total_graph = deduplicate_nodes(ensms_graph + prob_graph + efi_graph)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from earthkit.workflows.visualise import visualise\n", + "\n", + "visualise(total_graph, \"pproc_2t.html\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ppcascade", + "language": "python", + "name": "ppcascade" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml new file mode 100644 index 00000000..21513eaf --- /dev/null +++ b/pproc-core/pyproject.toml @@ -0,0 +1,66 @@ +# (C) Copyright 2024 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +[build-system] +requires = ["setuptools>=65", "setuptools_scm[toml]>=6.2"] +build-backend = "setuptools.build_meta" + +[project] +name = "earthkit-workflows-pproc" +description = "An earthkit-workflows interface to PProc" +license = "Apache-2.0" +license-files = ["LICENSE"] +authors = [ + { name = "European Centre for Medium-Range Weather Forecasts (ECMWF)", email = "software.support@ecmwf.int" }, +] +requires-python = ">=3.10" +readme = "README.md" +dynamic = [ "version" ] + +dependencies = [ + "earthkit-meteo>=0.1.1", + "filelock>=3.12.0", + "numexpr", + "dill", + "scipy", + "code-meters", + "earthkit-workflows", + "pyfdb", + "pproc" +] + + +[project.optional-dependencies] +tests = ["pytest"] +lint = ["black", "isort", "flake8"] + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.setuptools] +include-package-data = true +zip-safe = false + +[tool.setuptools_scm] +write_to = "src/earthkit/workflows/plugins/pproc/_version.py" +write_to_template = '''# Do not change! Do not track in version control! +__version__ = "{version}" +''' +local_scheme = "no-local-version" + +[tool.pytest.ini_options] +log_cli = true +log_cli_level = "DEBUG" +testpaths = ["tests/"] +addopts = "-n8" + +[tool.isort] +profile = "black" + +[tool.ruff.lint] +ignore = ["E722", "E731", "E741"] diff --git a/pproc-core/setup.py b/pproc-core/setup.py new file mode 100644 index 00000000..ee4e3b85 --- /dev/null +++ b/pproc-core/setup.py @@ -0,0 +1,3 @@ +from setuptools import setup + +setup() \ No newline at end of file diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/__init__.py b/pproc-core/src/earthkit/workflows/plugins/pproc/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py new file mode 100644 index 00000000..d04417e3 --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -0,0 +1,772 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import functools +import inspect +from typing import Any + +import numpy as np +from earthkit.workflows.backends.earthkit import FieldListBackend + +from earthkit.workflows import fluent +from earthkit.workflows.plugins.pproc.utils import grib, io, math +from earthkit.workflows.plugins.pproc.utils.request import MultiSourceRequest, Request + + +class Action(fluent.Action): + _THERMAL_CONFIG = { + "utci": {"operation": math.calc_utci, "params": ["2t", "2d", "10si", "mrt"]}, + "10si": { + "operation": "norm", + "metadata": {"paramId": 207}, + "params": ["10u", "10v"], + }, + "mrt": { + "operation": math.calc_mrt, + "params": ["uvcossza", "dsrp", "ssrd", "fdir", "strd", "str", "ssr"], + }, + "uvcossza": {"operation": math.calc_cossza, "params": ["2t", "fdir"]}, + "dsrp": {"operation": math.calc_dsrp, "params": ["fdir", "uvcossza"]}, + "hmdx": {"operation": math.calc_hmdx, "params": ["2t", "2d"]}, + "2r": {"operation": math.calc_rhp, "params": ["2t", "2d"]}, + "heatx": {"operation": math.calc_heatx, "params": ["2t", "2d"]}, + "wbgt": {"operation": math.calc_wbgt, "params": ["2t", "2d", "10si", "mrt"]}, + "gt": {"operation": math.calc_gt, "params": ["2t", "10si", "mrt"]}, + "nefft": {"operation": math.calc_nefft, "params": ["2t", "10si", "2r"]}, + "wcf": {"operation": math.calc_wcf, "params": ["2t", "10si"]}, + "aptmp": {"operation": math.calc_aptmp, "params": ["2t", "2r", "10si"]}, + } + + def _reduction_with_metadata( + self, + operation: str, + dim: str = "", + batch_size: int = 0, + keep_dim: bool = False, + metadata: dict | None = None, + ) -> "Action": + batched = batch_size > 1 and self.nodes.sizes[dim] > batch_size + op = getattr(super(), operation) + if not batched or metadata is None: + return op( + dim=dim, + batch_size=batch_size, + keep_dim=keep_dim, + backend_kwargs={"metadata": metadata}, + ) + + # If batched, add additional node for setting window operation metadata. Doing this in a separate tasks + # allows batched operations for overlapping windows to be identified and only computed once + batched_action = op(dim=dim, batch_size=batch_size, keep_dim=keep_dim) + return batched_action.map( + fluent.Payload( + FieldListBackend.set_metadata, [fluent.Node.input_name(0), metadata] + ) + ) + + def sum( + self, + dim: str = "", + batch_size: int = 0, + keep_dim: bool = False, + metadata: dict | None = None, + ) -> "Action": + return self._reduction_with_metadata( + "sum", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata + ) + + def mean( + self, + dim: str = "", + batch_size: int = 0, + keep_dim: bool = False, + metadata: dict | None = None, + ) -> "Action": + return self._reduction_with_metadata( + "mean", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata + ) + + def std( + self, + dim: str = "", + batch_size: int = 0, + keep_dim: bool = False, + metadata: dict | None = None, + ) -> "Action": + return self._reduction_with_metadata( + "std", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata + ) + + def max( + self, + dim: str = "", + batch_size: int = 0, + keep_dim: bool = False, + metadata: dict | None = None, + ) -> "Action": + return self._reduction_with_metadata( + "max", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata + ) + + maximum = max + + def min( + self, + dim: str = "", + batch_size: int = 0, + keep_dim: bool = False, + metadata: dict | None = None, + ) -> "Action": + return self._reduction_with_metadata( + "min", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata + ) + + minimum = min + + def prod( + self, + dim: str = "", + batch_size: int = 0, + keep_dim: bool = False, + metadata: dict | None = None, + ) -> "Action": + return self._reduction_with_metadata( + "prod", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata + ) + + def subtract( + self, other: "Action | float", metadata: dict | None = None + ) -> "Action": + return super().subtract(other, backend_kwargs={"metadata": metadata}) + + def divide(self, other: "Action | float", metadata: dict | None = None) -> "Action": + return super().divide(other, backend_kwargs={"metadata": metadata}) + + def add(self, other: "Action | float", metadata: dict | None = None) -> "Action": + return super().add(other, backend_kwargs={"metadata": metadata}) + + def multiply( + self, other: "Action | float", metadata: dict | None = None + ) -> "Action": + return super().multiply(other, backend_kwargs={"metadata": metadata}) + + def power(self, other: "Action | float", metadata: dict | None = None) -> "Action": + return super().power(other, backend_kwargs={"metadata": metadata}) + + def extreme( + self, + climatology: fluent.Action, + step_ranges: list[str], + sot: list[int], + eps: float, + efi_control: dict | None = None, + ensemble_dim: str = "number", + step_dim: str = "step", + new_dim: str = "type", + metadata: dict | None = None, + ) -> "Action": + """ + Create nodes computing the EFI and SOT + + Parameters + ---------- + climatology: Action, nodes containing climatology data + step_ranges: list of str, list of step ranges + sot: list of ints, Shift-Of-Tail values + eps: float + efi_control: dict, selection for control member. If None, efi is not + computed for the control member + ensemble_dim: str, name of dimension for ensemble members + step_dim: str, name of dimension for steps + new_dim: str, name of new dimension corresponding to EFI/SOT nodes. + + Return + ------ + Action + """ + eps = float(eps) + concat = self.concatenate(dim=ensemble_dim) + efi = concat.efi(climatology, step_ranges, eps, step_dim, metadata) + efi._add_dimension(new_dim, "efi") + if efi_control is not None: + control = self.select(efi_control, drop=True).efi( + climatology, step_ranges, eps, step_dim, metadata + ) + control._add_dimension(new_dim, "efic") + efi = efi.join(control, new_dim) + sot = concat.sot( + climatology, step_ranges, eps, sot, step_dim, new_dim, metadata + ) + ret = efi.join(sot, dim=new_dim) + return ret + + def ensemble_extreme( + self, + operation: str, + climatology: fluent.Action, + step_ranges: list[str], + ensemble_dim: str = "number", + step_dim: str = "step", + **kwargs, + ) -> "Action": + if operation == "extreme": + return self.extreme( + climatology, + step_ranges, + ensemble_dim=ensemble_dim, + step_dim=step_dim, + **kwargs, + ) + return self.concatenate(ensemble_dim).__getattribute__(operation)( + climatology, step_ranges, dim=step_dim, **kwargs + ) + + def efi( + self, + climatology: fluent.Action, + step_ranges: list[str], + eps: float, + dim: str = "step", + metadata: dict | None = None, + ) -> "Action": + """ + Create nodes computing the EFI for each window. Expects ensemble member dimension + to already be concatenated into a single array. + + Parameters + ---------- + climatology: Action, nodes containing climatology data + step_ranges: list of str, list of step ranges + eps: float + dim: str, window dimension + + Return + ------ + Action + """ + eps = float(eps) + if self.nodes.size == 1: + if len(step_ranges) != 1: + raise ValueError("Single node, but multiple step ranges") + payload = fluent.Payload( + math.efi, + (fluent.Node.input_name(1), fluent.Node.input_name(0), eps), + {"metadata": metadata}, + ) + return self.join(climatology, "**datatype**").reduce(payload) + + join = self.join(climatology, "**datatype**", match_coord_values=True) + return join.transform( + _efi_window_transform, + [({dim: srange}, eps, metadata) for srange in step_ranges], + dim, + ) + + def sot( + self, + climatology: fluent.Action, + step_ranges: list[str], + eps: float, + sot: list[int], + dim: str = "step", + new_dim: str = "sot", + metadata: dict | None = None, + ) -> "Action": + """ + Create nodes computing the SOT for each window. Expects ensemble member dimension + to already be concatenated into a single array. + + Parameters + ---------- + climatology: Action, nodes containing climatology data + step_ranges: list of str, list of step ranges + eps: float + sot: list of ints, Shift-Of-Tail values + dim: str, window dimension + new_dim: str, name of new dimension corresponding to SOT nodes. + + Return + ------ + Action + """ + eps = float(eps) + if not isinstance(sot, list): + sot = [sot] + + if self.nodes.size == 1: + if len(step_ranges) != 1: + raise ValueError("Single node, but multiple step ranges") + ret = self.join( + climatology, "**datatype**", match_coord_values=True + ).transform( + _sot_transform, + [(int(num), eps, new_dim, metadata) for num in sot], + new_dim, + ) + else: + params = [ + ({dim: srange}, sot, eps, new_dim, metadata) for srange in step_ranges + ] + ret = self.join( + climatology, "**datatype**", match_coord_values=True + ).transform(_sot_window_transform, params, dim) + return ret + + def ensms( + self, + dim: str = "number", + new_dim: str | tuple[str, list] = ("type", ["mean", "std"]), + batch_size: int = 0, + metadata: dict | None = None, + ) -> "Action": + """ + Creates nodes computing the mean and standard deviation along the specified dimension. A new dimension + is created joining the mean and standard deviation. If batch_size > 1 and less than the size + of the named dimension, the reduction will be computed first in + batches and then aggregated, otherwise no batching will be performed. + + Parameters + ---------- + dim: str, dimension to compute mean and standard deviation along + new_dim: str or tuple, name of new dimension or tuple specifying new dimension name and + coordinate values + batch_size: int, size of batches to split reduction into. If 0, + computation is not batched + + Return + ------ + Action + """ + if metadata is None: + metadata = {} + mean = self.mean( + dim=dim, batch_size=batch_size, metadata={"type": "em", **metadata} + ) + std = self.std( + dim=dim, batch_size=batch_size, metadata={"type": "es", **metadata} + ) + res = mean.join(std, new_dim) + return res + + def threshold_prob( + self, + comparison: str, + value: float, + local_scale_factor: float = None, + dim: str = "number", + batch_size: int = 0, + metadata: dict | None = None, + ) -> "Action": + metadata = {} if metadata is None else metadata.copy() + metadata.update( + grib.threshold( + metadata.get("edition", 1), + comparison, + value, + local_scale_factor, + ) + ) + payload = fluent.Payload( + math.threshold, + ( + fluent.Node.input_name(0), + comparison, + float(value), + ), + ) + return ( + self.map(payload) + .multiply(100) + .mean(dim=dim, batch_size=batch_size, metadata=metadata) + ) + + def anomaly( + self, + clim_mean: fluent.Action, + clim_std: fluent.Action, + std_anomaly: bool = False, + metadata: dict | None = None, + ) -> "Action": + anom = self.subtract(clim_mean, metadata=metadata) + if not std_anomaly: + return anom + return anom.divide(clim_std) + + def quantiles( + self, + quantiles: int | list[float], + dim: str = "number", + new_dim: str = "quantile", + metadata: dict | None = None, + ) -> "Action": + if isinstance(quantiles, int): + total_number = quantiles + q_numbers = range(0, quantiles + 1) + else: + even_spacing = np.all(np.diff(quantiles) == quantiles[1] - quantiles[0]) + total_number = len(quantiles) - 1 if even_spacing else 100 + q_numbers = ( + range(0, len(quantiles)) if even_spacing else map(int, quantiles * 100) + ) + + params = [(x, total_number, new_dim, metadata) for x in q_numbers] + ret = self.concatenate(dim).transform(_quantiles_transform, params, new_dim) + return ret + + def wind_speed( + self, vod2uv: bool, dim: str = "param", metadata: dict | None = None + ) -> "Action": + kwargs = {"metadata": metadata} + if vod2uv: + ret = self.map( + fluent.Payload( + FieldListBackend.norm, (fluent.Node.input_name(0),), kwargs + ) + ) + else: + ret = self.reduce( + fluent.Payload(FieldListBackend.norm, kwargs=kwargs), dim=dim + ) + return ret + + def _wrapped_reduction( + self, + operation: str | fluent.Payload | None, + dim: str, + batch_size: int = 0, + metadata: dict | None = None, + **kwargs, + ) -> "Action": + if operation is None: + return self + if isinstance(operation, str): + if hasattr(self, operation): + op = getattr(self, operation) + sig = inspect.signature(op) + args = [ + p.name + for p in sig.parameters.values() + if p.kind == p.POSITIONAL_OR_KEYWORD + ] + if "batch_size" in args: + kwargs["batch_size"] = batch_size + return op(dim=dim, metadata=metadata, **kwargs) + if metadata is not None: + kwargs.setdefault("metadata", {}).update(metadata) + op_function = getattr(FieldListBackend, operation, None) or getattr( + math, operation, None + ) + if op_function is None: + raise ValueError(f"Operation {operation} not found") + operation = fluent.Payload( + op_function, + kwargs=kwargs, + ) + return self.reduce(operation, dim=dim, batch_size=batch_size) + + def param_operation( + self, + operation: str | fluent.Payload | None, + dim: str = "param", + batch_size: int = 0, + metadata: dict | None = None, + **kwargs, + ) -> "Action": + """ + Reduction operation across different parameters + + Params + ------ + operation: str or Payload, operation to perform on ensemble members + dim: str, dimension to perform operation along + + Return + ------ + Action + """ + if "operation" == "scale": + return self.multiply(kwargs["value"], metadata=metadata) + return self._wrapped_reduction(operation, dim, batch_size, metadata, **kwargs) + + def thermal_index( + self, param: str, dim: str = "param", metadata: dict | None = None + ) -> "Action": + config = self._THERMAL_CONFIG[param] + new_action = self + for inp in config["params"]: + if ( + inp not in new_action.nodes.coords[dim] + and inp in new_action._THERMAL_CONFIG + ): + dependency = new_action.thermal_index(inp, dim=dim, metadata=metadata) + dependency._add_dimension(dim, inp) + new_action = new_action.join(dependency, dim) + try: + selection = new_action.sel(param=(config["params"])) + except KeyError: + selection = new_action + config_metadata = config.get("metadata", {}) + new_metadata = ( + config_metadata if not metadata else {**metadata, **config_metadata} + ) + ret = selection._wrapped_reduction( + config["operation"], dim=dim, metadata=new_metadata + ) + return ret + + def mask( + self, + select: dict, + mask: tuple[dict, str, float], + replacement: float = 0.0, + dim: str = "param", + metadata: dict | None = None, + ) -> "Action": + filter_selection, comparison, threshold = mask + selected_nodes = self.sel(select).join(self.sel(filter_selection), dim=dim) + return selected_nodes._wrapped_reduction( + "filter", + dim=dim, + metadata=metadata, + comparison=comparison, + threshold=threshold, + replacement=replacement, + ) + + def ensemble_operation( + self, + operation: str | fluent.Payload | None, + dim: str = "number", + batch_size: int = 0, + metadata: dict | None = None, + **kwargs, + ) -> "Action": + """ + Reduction operation across ensemble members. If batch_size > 1 and less than the size + of the named dimension, the reduction will be computed first in + batches and then aggregated, otherwise no batching will be performed. + + Params + ------ + operation: str or Payload, operation to perform on ensemble members + dim: str, dimension to perform operation along + batch_size: int, size of batches to split reduction into. If 0, + computation is not batched + + Return + ------ + Action + + Raises + ------ + ValueError if payload function is not batchable and batch_size is not 0 + """ + if operation in ["mean", "std"]: + metadata = {} if metadata is None else metadata.copy() + if "type" not in metadata: + metadata["type"] = "em" if operation == "mean" else "es" + return self._wrapped_reduction(operation, dim, batch_size, metadata, **kwargs) + + def accum_operation( + self, + operation: str | fluent.Payload, + coords: list[list[Any]], + dim: str = "step", + batch_size: int = 0, + metadata: dict | None = None, + include_start: bool = False, + deaccumulate: bool = False, + **kwargs, + ) -> "Action": + """ + Reduction operation across a dimension. If batch_size > 1 and less than the size + of the named dimension, the reduction will be computed first in + batches and then aggregated, otherwise no batching will be performed. + + Params + ------ + operation: str or Payload, operation to perform on steps + coords: list of values to accumulate over + dim: str, dimension to perform operation along + batch_size: int, size of batches to split reduction into. If 0, + computation is not batched + metadata: optional dict, metadata to set on the output + include_init: bool, whether to include the initial value in the accumulation + deaccumulate: bool, whether to deaccumulate consecutive values before accumulation + + Return + ------ + Action + + Raises + ------ + ValueError if payload function is not batchable and batch_size is not 0 + """ + if operation is None: + self._squeeze_dimension(dim) + return self + + params = [ + ( + dim, + coord, + operation, + batch_size, + metadata, + include_start, + deaccumulate, + kwargs, + ) + for coord in coords + ] + return self.transform(_accum_transform, params, dim) + + def write( + self, target: str, metadata: dict | fluent.Action | None = None + ) -> "Action": + if isinstance(metadata, fluent.Action): + res = self.join(metadata, "**datatype**", match_coord_values=True).reduce( + fluent.Payload( + io.write, + (fluent.Node.input_name(0), target, fluent.Node.input_name(1)), + ), + dim="**datatype**", + ) + return res + + return self.map( + fluent.Payload( + io.write, + (fluent.Node.input_name(0), target), + {"metadata": metadata}, + ) + ) + + +def _sot_transform( + action: fluent.Action, number: int, eps: float, new_dim: str, metadata: dict | None +) -> fluent.Action: + new_sot = action.reduce( + fluent.Payload( + math.sot, + (fluent.Node.input_name(1), fluent.Node.input_name(0), number, eps), + {"metadata": metadata}, + ) + ) + new_sot._add_dimension(new_dim, number) + return new_sot + + +def _sot_window_transform( + action: fluent.Action, + selection: dict, + sot: list[int], + eps: float, + new_dim: str, + metadata: dict, +) -> fluent.Action: + return action.select(selection).transform( + _sot_transform, [(int(num), eps, new_dim, metadata) for num in sot], new_dim + ) + + +def _efi_window_transform( + action: fluent.Action, selection: dict, eps: float, metadata: dict | None +) -> fluent.Action: + ret = action.select(selection).reduce( + fluent.Payload( + math.efi, + (fluent.Node.input_name(1), fluent.Node.input_name(0), eps), + {"metadata": metadata}, + ), + dim="**datatype**", + ) + return ret + + +def _quantiles_transform( + action, q_number: int, total_number: int, new_dim: str, metadata: dict | None +): + payload = fluent.Payload( + math.quantiles, + (fluent.Node.input_name(0), q_number, total_number), + {"metadata": metadata}, + ) + new_quantile = action.map(payload) + new_quantile._add_dimension(new_dim, q_number / total_number) + return new_quantile + + +def _accum_transform( + action: fluent.Action, + dim: str, + coords: list[Any], + operation: str | fluent.Payload, + batch_size: int, + metadata: dict | None, + include_start: bool, + deaccumulate: bool, + kwargs: dict, +) -> fluent.Action: + if len(coords) == 1: + # Nothing to reduce and no metadata to set + return action.select({dim: coords}) + + metadata = {} if metadata is None else metadata.copy() + if dim == "step": + metadata.update(grib.window(operation, coords, include_start)) + + if deaccumulate: + accum_action = action.select({dim: coords[:-1]}) + accum_action = accum_action.subtract(action.select({dim: coords[1:]})) + else: + accum_action = action.select({dim: coords if include_start else coords[1:]}) + + accum_action = accum_action._wrapped_reduction( + operation, + dim=dim, + batch_size=batch_size, + metadata=metadata, + **kwargs, + ) + + accum_action._add_dimension(dim, f"{coords[0]}-{coords[-1]}") + return accum_action + + +def from_source( + requests: list[dict | Request | MultiSourceRequest], + join_key: str = "", + backend_kwargs: dict = {}, +): + all_actions = None + for request in requests: + if isinstance(request, dict): + request = Request(request) + payloads = np.empty(tuple(request.dims.values()), dtype=object) + for indices, new_request in request.expand(): + payloads[indices] = functools.partial( + io.retrieve, new_request, **backend_kwargs + ) + new_action = fluent.from_source( + payloads, + coords={key: list(request[key]) for key in request.dims.keys()}, + action=Action, + ) + + if len(join_key) != 0 and join_key not in new_action.nodes.coords: + new_action._add_dimension(join_key, request[join_key]) + + if all_actions is None: + all_actions = new_action + else: + if len(join_key) == 0: + raise ValueError("Join key must be specified for multiple requests") + all_actions = all_actions.join(new_action, join_key) + return all_actions diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/products.py b/pproc-core/src/earthkit/workflows/plugins/pproc/products.py new file mode 100644 index 00000000..bbca8c6a --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/products.py @@ -0,0 +1,150 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from earthkit.workflows.graph import Graph, deduplicate_nodes +from pproc.config.utils import expand, squeeze + +from earthkit.workflows.plugins.pproc.fluent import from_source +from earthkit.workflows.plugins.pproc.templates import derive_template +from earthkit.workflows.plugins.pproc.utils.request import Request + + +def ensemble( + output_requests: list[dict], pproc_schema: str, target: str = "null:" +) -> Graph: + """ + Generate graph for ensemble member processing products e.g. ensms, + quantiles, threshold probabilties. + + Parameters + ---------- + output_requests: list[dict], list of dictionaries containing output requests + pproc_schema: str, path to schema file + target: str, target and location to write output + + Returns + ------- + Graph + """ + + total_graph = Graph([]) + ensemble_dim = "type" + for req in output_requests: + config = derive_template(req, pproc_schema) + source = from_source( + [ + Request(x, no_expand=("number")) + for x in squeeze( + sum([list(expand(x)) for x in config.inputs], []), + ["step", "number", "param", "levelist"], + ) + ], + join_key=ensemble_dim, + backend_kwargs={"stream": True}, + ).concatenate(dim=ensemble_dim, keep_dim=True) + total_graph += ( + config.action(forecast=source, ensemble_dim=ensemble_dim) + .write(target) + .graph() + ) + return deduplicate_nodes(total_graph) + + +def ensemble_anomaly( + output_requests: list[dict], pproc_schema: str, target: str = "null:" +) -> Graph: + """ + Generate graph for ensemble member anomaly products e.g. threshold probabilities + for t850. + Parameters + ---------- + output_requests: list[dict], list of dictionaries containing output requests + pproc_schema: str, path to schema file + target: str, target and location to write output + + Returns + ------- + Graph + """ + total_graph = Graph([]) + ensemble_dim = "type" + for req in output_requests: + config = derive_template(req, pproc_schema) + forecast = from_source( + [ + Request(x, no_expand=("number",)) + for x in squeeze( + sum([list(expand(x)) for x in config.forecast], []), + ["step", "number", "param", "levelist"], + ) + ], + join_key=ensemble_dim, + backend_kwargs={"stream": True}, + ).concatenate(dim=ensemble_dim, keep_dim=True) + climatology = from_source( + [ + Request(x) + for x in squeeze( + sum([list(expand(x)) for x in config.climatology], []), + ["type", "step"], + ) + ], + join_key="step", + ) + total_graph += ( + config.action( + forecast=forecast, climatology=climatology, ensemble_dim=ensemble_dim + ) + .write(target) + .graph() + ) + return deduplicate_nodes(total_graph) + + +def extreme( + output_requests: list[dict], pproc_schema: str, target: str = "null:" +) -> Graph: + """ + Generate graph for EFI/SOT products. + Parameters + ---------- + output_requests: list[dict], list of dictionaries containing output requests + pproc_schema: str, path to schema file + target: str, target and location to write output + + Returns + ------- + Graph + """ + total_graph = Graph([]) + ensemble_dim = "type" + for req in output_requests: + config = derive_template(req, pproc_schema) + forecast = from_source( + [ + Request(x, no_expand=("number")) + for x in squeeze( + sum([list(expand(x)) for x in config.forecast], []), + ["step", "number", "param", "levelist"], + ) + ], + join_key=ensemble_dim, + backend_kwargs={"stream": True}, + ).concatenate(dim=ensemble_dim, keep_dim=True) + climatology = from_source( + [Request(x, no_expand=("quantile")) for x in config.climatology] + ) + total_graph += ( + config.action( + forecast=forecast, climatology=climatology, ensemble_dim=ensemble_dim + ) + .write(target) + .graph() + ) + return deduplicate_nodes(total_graph) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py b/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py new file mode 100644 index 00000000..6fe230c9 --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py @@ -0,0 +1,240 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from dataclasses import dataclass +from typing import Optional + +from earthkit.workflows.backends.earthkit import FieldListBackend +from earthkit.workflows.fluent import Payload +from pproc.config.preprocessing import PreprocessingConfig +from pproc.schema.schema import Schema + +from earthkit.workflows.plugins.pproc.fluent import Action +from earthkit.workflows.plugins.pproc.utils import grib + + +@dataclass +class EnsembleConfig: + inputs: list[dict] + preprocessing: PreprocessingConfig + accumulations: dict[str, dict] + stats: dict + + def action( + self, forecast: Action, preprocessing_dim="param", ensemble_dim="number" + ) -> Action: + action = forecast + for preprocessing in self.preprocessing: + action = action.param_operation(dim=preprocessing_dim, **preprocessing) + for dim, accumulation in self.accumulations.items(): + action = action.accum_operation( + accumulation["operation"], + dim=dim, + coords=[accumulation["coords"]], + metadata=accumulation.get("metadata", None), + include_start=accumulation.get("include_start", False), + deaccumulate=accumulation.get("deaccumulate", False), + ) + return action.ensemble_operation( + dim=ensemble_dim, + **self.stats, + ) + + +class ExtremeConfig(EnsembleConfig): + + @property + def climatology(self) -> list[dict]: + return [x for x in self.inputs if x["type"] == "cd"] + + @property + def forecast(self) -> list[dict]: + return [x for x in self.inputs if x["type"] != "cd"] + + @property + def step_range(self) -> str: + step_accum = self.accumulations["step"] + if len(step_accum["coords"]) == 1: + return f"{step_accum['coords'][0]}" + return f"{step_accum['coords'][0]}-{step_accum['coords'][-1]}" + + def action( + self, + forecast: Action, + climatology: Action, + preprocessing_dim="param", + ensemble_dim="number", + ) -> Action: + action = forecast + for preprocessing in self.preprocessing: + action = action.param_operation(dim=preprocessing_dim, **preprocessing) + for dim, accumulation in self.accumulations.items(): + action = action.accum_operation( + accumulation["operation"], + dim=dim, + coords=[accumulation["coords"]], + metadata=accumulation.get("metadata", None), + include_start=accumulation.get("include_start", False), + deaccumulate=accumulation.get("deaccumulate", False), + ) + return action.ensemble_extreme( + climatology=climatology, + ensemble_dim=ensemble_dim, + step_ranges=[self.step_range], + **self.stats, + ) + + +class AnomalyConfig(EnsembleConfig): + + @property + def climatology(self) -> list[dict]: + return [x for x in self.inputs if x["type"] in ["em", "es"]] + + @property + def forecast(self) -> list[dict]: + return [x for x in self.inputs if x["type"] not in ["em", "es"]] + + def action( + self, + forecast: Action, + climatology: Action, + preprocessing_dim="param", + ensemble_dim="number", + ) -> Action: + clim_headers = climatology.iselect({"type": 0, "step": 0}, drop=True).map( + Payload(grib.anomaly_clim) + ) + action = forecast + for preprocessing in self.preprocessing: + action = action.param_operation(dim=preprocessing_dim, **preprocessing) + action = action.anomaly( + climatology.select({"type": "em"}, drop=True), + climatology.select({"type": "es"}, drop=True), + self.accumulations["step"].get("std_anomaly", False), + ) + for dim, accumulation in self.accumulations.items(): + action = action.accum_operation( + accumulation["operation"], + dim=dim, + coords=[accumulation["coords"]], + metadata=accumulation.get("metadata", None), + include_start=accumulation.get("include_start", False), + deaccumulate=accumulation.get("deaccumulate", False), + ) + stats = action.ensemble_operation( + dim=ensemble_dim, + **self.stats, + ) + if self.stats["metadata"].get("edition", 1) == 1: + return stats + return stats.join(clim_headers, "**datatype**", match_coord_values=True).reduce( + FieldListBackend.set_metadata, dim="**datatype**" + ) + + +def _translate_accum_op(accum: dict) -> str: + OPS = { + "aggregation": None, + "difference": "diff", + "maximum": "max", + "minimum": "min", + "mean": "mean", + "standard_deviation": "std", + "sum": "add", + } + operation = accum.setdefault("operation", "aggregation") + if operation not in OPS: + raise ValueError(f"Accumulation operation {operation} not supported") + return OPS[operation] + + +def derive_config( + request: dict, schema_config: dict, metadata: Optional[dict] = None +) -> dict: + ensemble_operation = { + "em": "mean", + "es": "std", + "pb": "quantiles", + "ep": "threshold_prob", + "fcmean": None, + "fcstdev": None, + "fcmin": None, + "fcmax": None, + "efi": "efi", + "efic": "efi", + "sot": "sot", + "cf": None, + "pf": None, + } + schema_config.pop("entrypoint") + schema_config.pop("interp_keys") + schema_config.pop("name", None) + schema_config.pop("dtype", None) + inputs = schema_config.pop("inputs") + + # Populate coords in accumulations with values from inputs + accums = schema_config.pop("accumulations", {}) + for dim, accum in accums.items(): + accum["operation"] = _translate_accum_op(accum) + values = inputs[0][dim] + accum["coords"] = [values] if isinstance(values, (str, int)) else values + + config = { + "inputs": inputs, + "preprocessing": schema_config.pop("preprocessing", []), + "accumulations": accums, + "stats": { + "operation": ensemble_operation[request["type"]], + **schema_config.pop("threshold", {}), + **schema_config, + }, + } + config["stats"].setdefault("metadata", {}).setdefault("type", request["type"]) + if metadata: + config["stats"]["metadata"].update(metadata) + return config + + +def derive_template( + request: dict, + pproc_schema: str, + inputs: Optional[list[dict]] = None, + metadata: Optional[dict] = None, +) -> Action: + schema = Schema.from_file(pproc_schema) + schema_config = schema.config_from_output(request, inputs=inputs) + templates = { + "pproc-ensms": EnsembleConfig, + "pproc-quantiles": EnsembleConfig, + "pproc-probabilities": EnsembleConfig, + "pproc-accumulate": EnsembleConfig, + "pproc-extreme": ExtremeConfig, + "pproc-anomaly-probabilities": AnomalyConfig, + "pproc-wind": EnsembleConfig, + } + entrypoint = schema_config["entrypoint"] + if entrypoint not in templates: + raise ValueError(f"Schema {entrypoint} not supported") + config = derive_config(request, schema_config, metadata) + return templates[entrypoint](**config) + + +def from_request( + request: dict, + pproc_schema: str, + preprocessing_dim: str = "param", + ensemble_dim: str = "number", + metadata: Optional[dict] = None, + **sources: Action, +) -> Action: + config = derive_template(request, pproc_schema, metadata=metadata) + return config.action( + **sources, preprocessing_dim=preprocessing_dim, ensemble_dim=ensemble_dim + ) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/__init__.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/grib.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/grib.py new file mode 100644 index 00000000..d312bc86 --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/grib.py @@ -0,0 +1,192 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from typing import Any + +from earthkit.data import FieldList +from pproc.prob.parallel import threshold_grib_headers + + +def window(operation: str, coords: list[Any], include_init: bool) -> dict: + if len(coords) == 1: + return {} + + ret = {} + if operation == "diff": + ret.update({"timeRangeIndicator": 5, "stepType": "diff"}) + if operation == "mean": + ret["timeRangeIndicator"] = 3 + ret["numberIncludedInAverage"] = ( + len(coords) if include_init else len(coords) - 1 + ) + ret["numberMissingFromAveragesOrAccumulations"] = 0 + if operation in ["min", "max"]: + ret["timeRangeIndicator"] = 2 + ret.setdefault("stepType", "max") + ret["stepRange"] = f"{coords[0]}-{coords[-1]}" + return ret + + +def extreme(clim: FieldList, ens: FieldList, metadata: dict) -> dict: + edition = metadata.get("edition", ens[0].metadata().get("edition", 1)) + clim_edition = clim[0].metadata().get("edition", 1) + ret = {} + if edition == 1 and clim_edition == 1: + # set clim keys + clim_keys = [ + "versionNumberOfExperimentalSuite", + "implementationDateOfModelCycle", + "numberOfReforecastYearsInModelClimate", + "numberOfDaysInClimateSamplingWindow", + "sampleSizeOfModelClimate", + "versionOfModelClimate", + ] + for key in clim_keys: + ret[key] = clim[0].metadata()[key] + + # set fc keys + fc_keys = [ + "date", + "subCentre", + "totalNumber", + ] + for key in fc_keys: + ret[key] = ens[0].metadata()[key] + elif edition == 2 and clim_edition == 2: + clim_keys = [ + "typeOfReferenceDataset", + "yearOfStartOfReferencePeriod", + "dayOfStartOfReferencePeriod", + "monthOfStartOfReferencePeriod", + "hourOfStartOfReferencePeriod", + "minuteOfStartOfReferencePeriod", + "secondOfStartOfReferencePeriod", + "sampleSizeOfReferencePeriod", + "numberOfReferencePeriodTimeRanges", + "typeOfStatisticalProcessingForTimeRangeForReferencePeriod", + "indicatorOfUnitForTimeRangeForReferencePeriod", + "lengthOfTimeRangeForReferencePeriod", + ] + ret.update( + { + "productDefinitionTemplateNumber": 105, + **{key: clim[0].metadata()[key] for key in clim_keys}, + } + ) + else: + raise Exception( + f"Unsupported GRIB edition {edition} and clim edition {clim_edition}" + ) + return ret + + +def efi(ens: FieldList, clim: FieldList, metadata: dict) -> dict: + ret = extreme(ens, clim, metadata) + edition = metadata.get("edition", ens[0].metadata().get("edition", 1)) + if edition not in [1, 2]: + raise Exception(f"Unsupported GRIB edition {edition}") + + if len(ens) == 1 and ens.metadata()[0].get("type") in ["cf", "fc"]: + ret["marsType"] = 28 + if edition == 1: + ret["efiOrder"] = 0 + ret["totalNumber"] = 1 + ret["number"] = 0 + else: + ret.update( + {"typeOfRelationToReferenceDataset": 20, "typeOfProcessedData": 3} + ) + else: + ret["marsType"] = 27 + if edition == 1: + ret["efiOrder"] = 0 + ret["number"] = 0 + else: + ret.update( + {"typeOfRelationToReferenceDataset": 20, "typeOfProcessedData": 5} + ) + return ret + + +def sot(ens: FieldList, clim: FieldList, metadata: dict, number: int) -> dict: + ret = extreme(ens, clim, metadata) + ret["marsType"] = 38 + + if number == 90: + efi_order = 99 + elif number == 10: + efi_order = 1 + else: + raise Exception( + f"SOT value '{number}' not supported in template! Only accepting 10 and 90" + ) + edition = metadata.get("edition", ens[0].metadata().get("edition", 1)) + if edition == 1: + ret["number"] = sot + ret["efiOrder"] = efi_order + elif edition == 2: + ret.update( + { + "typeOfRelationToReferenceDataset": 21, + "typeOfProcessedData": 5, + "numberOfAdditionalParametersForReferencePeriod": 2, + "scaleFactorOfAdditionalParameterForReferencePeriod": [0, 0], + "scaledValueOfAdditionalParameterForReferencePeriod": [sot, efi_order], + } + ) + else: + raise Exception(f"Unsupported GRIB edition {edition}") + return ret + + +def threshold( + edition: int, comparison: str, threshold: float, local_scale_factor: int | None +) -> dict: + threshold_config = { + "value": float(threshold), + "comparison": comparison, + "out_paramid": 0, + } + if local_scale_factor: + threshold_config["local_scale_factor"] = local_scale_factor + ret = threshold_grib_headers( + edition, + threshold_config, + ) + ret.pop("paramId") + return ret + + +def anomaly_clim(clim: FieldList) -> dict: + """ + Get required information from climatology metadata. Note, + only required for GRIB edition 2 threshold probability products + """ + return { + key: clim.metadata()[0].get(key) + for key in ["climateDateFrom", "climateDateTo", "referenceDate"] + } + + +def quantiles( + ens: FieldList, metadata: dict, pert_number: int, total_number: int +) -> dict: + edition = metadata.get("edition", ens[0].metadata().get("edition", 1)) + if edition == 1: + return { + "totalNumber": total_number, + "perturbationNumber": pert_number, + } + return { + "productDefinitionTemplateNumber": metadata.get( + "productDefinitionTemplateNumber", 86 + ), + "totalNumberOfQuantiles": total_number, + "quantileValue": pert_number, + } diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/io.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/io.py new file mode 100644 index 00000000..dbd0335d --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/io.py @@ -0,0 +1,193 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import shutil +from io import BytesIO + +import mir +from earthkit.data import FieldList, settings +from earthkit.data.readers.grib.metadata import StandAloneGribMetadata +from earthkit.data.sources import Source, from_source +from earthkit.data.sources.file import FileSource +from earthkit.data.sources.stream import StreamSource +from meters import ResourceMeter +from pproc.common.io import ( + FileSetTarget, + FileTarget, + split_location, + target_from_location, + write_grib, +) + +# Set cache policy to "temporary" to avoid "database is locked" errors when +# for wind when executing across multiple workers +settings.set("cache-policy", "temporary") + + +def _source_from_location(loc, sources) -> tuple[str, list[dict]]: + type_, ident = split_location(loc, default="file") + requests = sources.get(type_, {}).get(ident, None) + assert ( + requests is not None + ), f"Not requests listed for location {loc} in sources {sources}" + if isinstance(requests, dict): + requests = [requests] + return type_, requests + + +def mir_job( + input: mir.MultiDimensionalGribFileInput, mir_options: dict, cache: str = None +) -> Source: + job = mir.Job(**mir_options) + stream = BytesIO() + job.execute(input, stream) + stream.seek(0) + if cache is None: + return StreamSource(stream, read_all=True).mutate() + + with open(cache, "wb") as o, stream as i: + shutil.copyfileobj(i, o) + return FileSource(cache).mutate() + + +def fdb_retrieve(request: dict, *, stream: bool = True) -> Source: + mir_options = request.pop("interpolate", None) + if mir_options is None: + return from_source("fdb", request, read_all=True, stream=stream) + + reader = from_source("fdb", request, stream=stream) + if stream: + if mir_options.get("vod2uv", "0") == "1": + raise ValueError("Wind vod2uv not supported for stream=True") + return mir_job(reader._source._stream, mir_options) + + if mir_options.get("vod2uv", "0") == "1": + if len(request["param"]) != 2: + raise ValueError("Wind vod2uv requires two parameters") + inp = mir.MultiDimensionalGribFileInput(reader.path, 2) + else: + inp = mir.GribFileInput(reader.path) + return mir_job(inp, mir_options) + + +def mars_retrieve(request: dict) -> Source: + mir_options = request.pop("interpolate", None) + cache = request.pop("cache", None) + cache_path = None if cache is None else cache.format_map(request) + ds = from_source("mars", request) + if mir_options is None: + return ds + + if mir_options.get("vod2uv", "0") == "1": + if len(request["param"]) != 2: + raise ValueError("Wind vod2uv requires two parameters") + inp = mir.MultiDimensionalGribFileInput(ds.path, 2) + else: + inp = mir.GribFileInput(ds.path) + return mir_job(inp, mir_options, cache_path) + + +def _transform_steps(steps, step_type: type = str): + if isinstance(steps, (int, str)): + steps = [steps] + return list(map(step_type, steps)) + + +def _transform_request(request: dict, step_type: type = str): + try: + paramId = int(request["param"]) + del request["param"] + request["paramId"] = paramId + except ValueError: + pass + if request.get("date", None) is not None: + request["date"] = int(request["date"]) + if request.get("time", None) is not None: + time = int(request["time"]) + request["time"] = time if time % 100 == 0 else time * 100 + if request.get("step", None) is not None: + request["step"] = _transform_steps(request["step"], step_type) + return request + + +def file_retrieve(path: str, request: dict) -> Source: + mir_options = request.pop("interpolate", None) + if mir_options is not None: + raise NotImplementedError() + location = path.format_map(request) + file_ds = from_source("file", location) + if len(request) > 0: + treq = _transform_request(request) + ds = file_ds.sel(treq) + if len(ds) == 0: + try: + treq = _transform_request(request, int) + ds = file_ds.sel(treq) + except ValueError: + pass + return ds + return file_ds + + +def retrieve_multi_sources(requests: list[dict], **kwargs) -> FieldList: + ret = None + for req in requests: + try: + ret = retrieve_single_source(req, **kwargs) + break + except AssertionError: + continue + assert ret is not None, f"No data retrieved from requests: {requests}" + return ret + + +def retrieve_single_source(request: dict, **kwargs) -> FieldList: + req = request.copy() + source = req.pop("source") + if source == "fdb": + ret_sources = fdb_retrieve(req, **kwargs) + elif source == "mars": + ret_sources = mars_retrieve(req) + elif source == "fileset": + path = req.pop("location") + ret_sources = file_retrieve(path, req) + else: + raise NotImplementedError(f"Source {source} not supported.") + assert len(ret_sources) > 0, f"No data retrieved from {source} for request {req}" + return ret_sources + + +def retrieve(request: dict | list[dict], **kwargs): + with ResourceMeter(f"RETRIEVE {request}, {kwargs}"): + if isinstance(request, dict): + res = retrieve_single_source(request, **kwargs) + else: + res = retrieve_multi_sources(request, **kwargs) + ret = FieldList.from_array( + res.values, + [StandAloneGribMetadata(metadata._handle) for metadata in res.metadata()], + ) + return ret + + +def write(data: FieldList, loc, metadata: dict | None = None): + if loc == "null:": + return + target = target_from_location(loc) + if isinstance(target, (FileTarget, FileSetTarget)): + # Allows file to be appended on each write call + target.enable_recovery() + assert len(data) == 1, f"Expected single field, received {len(data)}" + + template = data.metadata()[0] + if metadata is not None: + template = template.override(metadata) + + with ResourceMeter(f"WRITE {loc}"): + write_grib(target, template._handle, data[0].values) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/math.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/math.py new file mode 100644 index 00000000..b9b90338 --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/math.py @@ -0,0 +1,189 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import array_api_compat +import earthkit.meteo.solar +from earthkit.data import FieldList +from earthkit.meteo.extreme import array as extreme +from earthkit.meteo.stats import array as stats +from earthkit.workflows.backends.earthkit import ( + Metadata, + comp_str2func, + new_fieldlist, + resolve_metadata, +) +from meters import ResourceMeter +from pproc.thermo.indices import ComputeIndices + +from earthkit.workflows.plugins.pproc.utils import grib +from earthkit.workflows.plugins.pproc.utils.patch import PatchModule + + +def threshold( + arr: FieldList, + comparison: str, + value: float, + *, + metadata: Metadata = None, +) -> FieldList: + with ResourceMeter("THRESHOLD"): + xp = array_api_compat.array_namespace(arr.values) + # Find all locations where nan appears as an ensemble value + is_nan = xp.isnan(arr.values) + thesh = comp_str2func(xp, comparison)(arr.values, value) + res = xp.where(is_nan, xp.nan, thesh) + return new_fieldlist(res, arr.metadata(), resolve_metadata(metadata, arr)) + + +def efi( + clim: FieldList, + ens: FieldList, + eps: float, + *, + metadata: Metadata = None, +) -> FieldList: + with ResourceMeter(f"EFI, clim {clim.values.shape}, ens {ens.values.shape}"): + xp = array_api_compat.array_namespace(ens.values, clim.values) + with PatchModule(extreme, "numpy", xp): + res = extreme.efi(clim.values, ens.values, eps) + resolved_metadata = resolve_metadata(metadata, clim, ens) + return new_fieldlist( + res, + [ens[0].metadata()], + {**resolved_metadata, **grib.efi(clim, ens, resolved_metadata)}, + ) + + +def sot( + clim: FieldList, + ens: FieldList, + number: int, + eps: float, + *, + metadata: Metadata = None, +) -> FieldList: + with ResourceMeter("SOT"): + xp = array_api_compat.array_namespace(ens.values, clim.values) + with PatchModule(extreme, "numpy", xp): + res = extreme.sot(clim.values, ens.values, number, eps) + resolved_metadata = resolve_metadata(metadata, clim, ens) + return new_fieldlist( + res, + [ens[0].metadata()], + { + **resolved_metadata, + **grib.sot(clim, ens, resolved_metadata, number), + }, + ) + + +def quantiles( + ens: FieldList, q_number: int, total_number: int, *, metadata: Metadata = None +) -> FieldList: + with ResourceMeter("QUANTILES"): + xp = array_api_compat.array_namespace(ens.values) + quantile = q_number / total_number + with PatchModule(stats, "numpy", xp): + res = list(stats.iter_quantiles(ens.values, [quantile], method="numpy"))[0] + resolved_metadata = resolve_metadata(metadata, ens) + return new_fieldlist( + res, + [ens[0].metadata()], + { + **resolved_metadata, + **grib.quantiles(ens, resolved_metadata, q_number, total_number), + }, + ) + + +def _check_shape(fields: earthkit.data.FieldList, params: list[str]): + shape = None + for param in params: + selected = fields.sel(param=param) + if len(selected) == 0: + raise ValueError( + f"Field {param} not found in fields: \n {fields.ls(namespace='mars')}" + ) + if shape is None: + shape = selected.values.shape + assert ( + shape == selected.values.shape + ), f"Shape mismatch for {param} {shape} != {selected.values.shape}" + + +def calc_cossza(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + return ComputeIndices(resolve_metadata(metadata)).calc_cossza_int(all_fields) + + +def calc_hmdx(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + _check_shape(all_fields, ["2t", "2d"]) + return ComputeIndices(resolve_metadata(metadata)).calc_hmdx(all_fields) + + +def calc_rhp(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + _check_shape(all_fields, ["2t", "2d"]) + return ComputeIndices(resolve_metadata(metadata)).calc_rhp(all_fields) + + +def calc_heatx(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + _check_shape(all_fields, ["2t", "2d"]) + return ComputeIndices(resolve_metadata(metadata)).calc_heatx(all_fields) + + +def calc_dsrp(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + return ComputeIndices(resolve_metadata(metadata)).calc_dsrp(all_fields) + + +def calc_utci(*fields: FieldList, metadata: Metadata = None, validate=True): + all_fields = sum(fields[1:], fields[0]) + _check_shape(all_fields, ["2t", "2d", "10si", "mrt"]) + return ComputeIndices(resolve_metadata(metadata)).calc_utci( + all_fields, print_misses=False, validate=validate + ) + + +def calc_wbgt(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + _check_shape(all_fields, ["2t", "2d", "10si", "mrt"]) + return ComputeIndices(resolve_metadata(metadata)).calc_wbgt(all_fields) + + +def calc_gt(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + _check_shape(all_fields, ["2t", "10si", "mrt"]) + return ComputeIndices(resolve_metadata(metadata)).calc_gt(all_fields) + + +def calc_nefft(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + _check_shape(all_fields, ["2t", "10si", "2r"]) + return ComputeIndices(resolve_metadata(metadata)).calc_nefft(all_fields) + + +def calc_wcf(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + _check_shape(all_fields, ["2t", "10si"]) + return ComputeIndices(resolve_metadata(metadata)).calc_wcf(all_fields) + + +def calc_aptmp(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + _check_shape(all_fields, ["2t", "10si", "2r"]) + return ComputeIndices(resolve_metadata(metadata)).calc_aptmp(all_fields) + + +def calc_mrt(*fields: FieldList, metadata: Metadata = None): + all_fields = sum(fields[1:], fields[0]) + _check_shape(all_fields, ["ssrd", "fdir", "strd", "ssr", "dsrp", "str", "uvcossza"]) + return ComputeIndices(resolve_metadata(metadata)).calc_mrt(all_fields) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/patch.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/patch.py new file mode 100644 index 00000000..c01b1ebe --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/patch.py @@ -0,0 +1,41 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import importlib +import inspect + + +class PatchModule: + def __init__(self, module, original, patch): + self.module = module + self.original = importlib.import_module(original) + self.patch = patch + + def __enter__(self): + if self.original == self.patch: + return + + functions = [] + module_key = None + for key, value in self.module.__dict__.items(): + if value == self.original: + module_key = key + elif inspect.isfunction(value): + functions.append(key) + assert module_key is not None + + setattr(self.module, module_key, self.patch) + for func in functions: + func_source = inspect.getsource(getattr(self.module, func)) + exec(func_source, self.module.__dict__) + + def __exit__(self, type, value, traceback): + if self.original == self.patch: + return + importlib.reload(self.module) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py new file mode 100644 index 00000000..a5013c17 --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py @@ -0,0 +1,121 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import copy +import itertools +from collections import OrderedDict + +import numpy as np + + +class Request: + def __init__(self, request: dict, no_expand: tuple[str] = ()): + self.request = request.copy() + self.fake_dims = [] + self.no_expand = no_expand + self.ignore = ["interpolate"] + + @property + def dims(self) -> OrderedDict: + dimensions = OrderedDict() + for key, values in self.request.items(): + if key in self.ignore or key in self.no_expand: + continue + if hasattr(values, "__iter__") and not isinstance(values, str): + dimensions[key] = len(values) + return dimensions + + def __setitem__(self, key, value): + self.request[key] = value + + def __getitem__(self, key): + return self.request[key] + + def __contains__(self, key) -> bool: + return key in self.request + + def update(self, **kwargs): + self.request.update(**kwargs) + + def pop(self, key, default=None): + if default is None: + return self.request.pop(key) + return self.request.pop(key, default) + + def make_dim(self, key, value=None): + if key in self: + assert type(self[key], (str, int, float)) + self[key] = [self[key]] + else: + self[key] = [value] + self.fake_dims.append(key) + + def expand(self): + reqs = [self.request[x] for x in self.dims.keys()] + for indices, params in zip( + itertools.product(*(range(len(x)) for x in reqs)), itertools.product(*reqs) + ): + new_request = self.request.copy() + for index, expand_param in enumerate(self.dims.keys()): + new_request[expand_param] = params[index] + + # Remove fake dims from request + for dim in self.fake_dims: + new_request.pop(dim) + yield indices, new_request + + +class MultiSourceRequest(Request): + def __init__(self, requests: list[dict], no_expand: tuple[str] = ()): + super().__init__(requests[0], no_expand) + self.requests = requests + + def __setitem__(self, key, value): + super().__setattr__(key, value) + [x.__setitem__(key, value) for x in self.requests] + + def __getitem__(self, key): + values = [x.__getitem__(key) for x in self.requests] + if np.all([values[0] == values[x] for x in range(1, len(values))]): + return values[0] + raise Exception(f"Requests {self.requests} differ on value for key {key}") + + def __contains__(self, key) -> bool: + contains = [x.__contains__(key) for x in self.requests] + if all([contains[0] == contains[x] for x in range(1, len(contains))]): + return contains[0] + raise Exception(f"Not all requests {self.requests} contain key {key}") + + def update(self, **kwargs): + super().update(**kwargs) + [x.update(**kwargs) for x in self.requests] + + def pop(self, key, default=None): + contains = key in self + if default is None or contains: + value = self[key] + super().pop(key) + [x.pop(key) for x in self.requests] + return value + super().pop(key) + [x.pop(key) for x in self.requests] + return default + + def expand(self): + for params in itertools.product(*[self.request[x] for x in self.dims.keys()]): + indices = [] + new_requests = copy.deepcopy(self.requests) + for index, expand_param in enumerate(self.dims.keys()): + [x.__setitem__(expand_param, params[index]) for x in new_requests] + indices.append(list(self.request[expand_param]).index(params[index])) + + # Remove fake dims from request + for dim in self.fake_dims: + [x.pop(dim) for x in new_requests] + yield tuple(indices), new_requests diff --git a/pproc-core/tests/helpers/mock.py b/pproc-core/tests/helpers/mock.py new file mode 100644 index 00000000..0fabd063 --- /dev/null +++ b/pproc-core/tests/helpers/mock.py @@ -0,0 +1,28 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from earthkit.workflows.fluent import Node, Payload +from ppcascade.entry import parser + + +def mock_args(config_path: str): + test_parser = parser.basic_parser("Test", True) + return test_parser.parse_args( + ["--config", config_path, "--forecast", "fdb:fc", "--climatology", "fdb:clim"] + ) + + +class MockPayload(Payload): + def __init__(self, name: str): + super().__init__(name) + + +class MockNode(Node): + def __init__(self, name: str): + super().__init__(MockPayload(name)) diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml new file mode 100644 index 00000000..dd01d7fd --- /dev/null +++ b/pproc-core/tests/schema.yaml @@ -0,0 +1,1834 @@ +config: + interp_keys: + intgrid: "none" + legendre-loader: "shmem" + matrix-loader: "file-io" + + filter:param: + "*": {} + "10": + preprocessing: + - operation: norm + interp_keys: + vod2uv: true + "121/122/228026/228027": + filter:type: + em/es/pb: + accumulations: + step: + type: legacywindow + "131068/131069": + filter:type: + ep: + preprocessing: + - operation: norm + "132044": + filter:type: + efi/efic/sot: + preprocessing: + - operation: mask + select: {param: "228036"} + mask: [{param: "228035"}, "<=", 10] + "132059": + filter:type: + efi/efic/sot: + preprocessing: + - operation: mask + select: {param: "228035"} + mask: [{param: "228035"}, "<=", 10] + "132045": + filter:type: + efi/efic/sot: + preprocessing: + - operation: norm + "207/228249": + preprocessing: + - operation: norm + "172142/172143/172144/172228": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + vmin: 0. + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + include_start: true + deaccumulate: true + "172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172205/172212": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + include_start: true + deaccumulate: true + "172189": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + vmin: 0. + vmax: 1. + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + include_start: true + deaccumulate: true + "260033/260053": + preprocessing: + - operation: sum + - operation: scale + value: 3600 + "200189/200142/200143/200144/228216/200228": + accumulations: + step: + operation: difference + include_start: true + filter:type: + pf/cf: + filter:param: + "261001/261014/261015/261016/260242/260004/260005/261018/260255/261002": + entrypoint: pproc-thermal-indices + "10": + entrypoint: pproc-wind + "*": + entrypoint: pproc-accumulate + em/es: + dtype: float64 + metadata: + perturbationNumber: 0 + bitsPerValue: 16 + filter:param: + "10": + entrypoint: pproc-wind + "*": + entrypoint: pproc-ensms + efi/sot/efic: + entrypoint: pproc-extreme + filter:param: + 132044/132059: + eps: 1e-4 + accumulations: + step: + type: legacywindow + operation: maximum + 132045/132165/132167: + eps: -1e-4 + accumulations: + step: + type: legacywindow + operation: mean + 132049/132201/132216: + eps: -1e-4 + accumulations: + step: + type: legacywindow + operation: maximum + "132144": + eps: 1e-4 + accumulations: + step: + type: legacywindow + operation: difference + include_start: true + "132202": + eps: -1e-4 + accumulations: + step: + type: legacywindow + operation: minimum + "132228": + eps: 1e-4 + accumulations: + step: + type: legacywindow + operation: difference + include_start: true + filter:stream: + "*": {} + "eefo": + preprocessing: + - scale: + value: 604800000 + ep: + entrypoint: pproc-probabilities + filter:param: + "131060": + accumulations: + step: + type: legacywindow + operation: difference + include_start: true + threshold: + comparison: ">=" + value: 0.001 + local_scale_factor: 3 + "131061": + accumulations: + step: + type: legacywindow + operation: difference + include_start: true + threshold: + comparison: ">=" + value: 0.005 + local_scale_factor: 3 + "131062": + accumulations: + step: + type: legacywindow + operation: difference + include_start: true + threshold: + comparison: ">=" + value: 0.01 + local_scale_factor: 3 + "131063": + accumulations: + step: + type: legacywindow + operation: difference + include_start: true + threshold: + comparison: ">=" + value: 0.02 + local_scale_factor: 3 + "131098": + accumulations: + step: + type: legacywindow + operation: difference + include_start: true + threshold: + comparison: ">=" + value: 0.025 + local_scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131099": + accumulations: + step: + type: legacywindow + operation: difference + include_start: true + threshold: + comparison: ">=" + value: 0.05 + local_scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131085": + accumulations: + step: + type: legacywindow + operation: difference + include_start: true + threshold: + comparison: ">=" + value: 0.1 + local_scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131064": + accumulations: + step: + type: legacywindow + operation: difference + include_start: true + threshold: + comparison: '<' + value: 0.0001 + local_scale_factor: 4 + "131065": + accumulations: + step: + type: legacywindow + operation: difference_rate + factor: 0.041666666666666664 + include_start: true + threshold: + comparison: '<' + value: 0.001 + local_scale_factor: 4 + "131066": + accumulations: + step: + type: legacywindow + operation: difference_rate + factor: 0.041666666666666664 + include_start: true + threshold: + comparison: '>=' + value: 0.003 + local_scale_factor: 4 + "131067": + accumulations: + step: + type: legacywindow + operation: difference_rate + factor: 0.041666666666666664 + include_start: true + threshold: + comparison: '>=' + value: 0.005 + local_scale_factor: 4 + "131068": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 10 + "131069": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 15 + "131070": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 15 + "131071": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 20 + "131072": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 25 + "131100": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 10 + "131074": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 2 + "131075": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 4 + "131076": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 6 + "131077": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 8 + "131074": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 2 + "131075": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 4 + "131076": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 6 + "131077": + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">=" + value: 8 + "131073": + accumulations: + step: + type: legacywindow + operation: minimum + threshold: + comparison: "<=" + value: 273.15 + local_scale_factor: 2 + "131020": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + include_start: true + operation: "mean" + threshold: + comparison: "<" + value: -2 + "131021": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + include_start: true + operation: "mean" + threshold: + comparison: ">=" + value: 2 + "131022": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + operation: minimum + threshold: + comparison: "<" + value: -8 + "131023": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + operation: minimum + threshold: + comparison: "<" + value: -4 + "131024": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">" + value: 4 + "131025": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + operation: maximum + threshold: + comparison: ">" + value: 8 + "133093": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + operation: maximum + std_anomaly: true + threshold: + comparison: '>' + value: 1 + "133094": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + operation: maximum + std_anomaly: true + threshold: + comparison: '>' + value: 1.5 + local_scale_factor: 1 + metadata: + scaleFactorOfLowerLimit: 1 + "133095": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + operation: maximum + std_anomaly: true + threshold: + comparison: '>' + value: 2 + "133096": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + operation: minimum + std_anomaly: true + threshold: + comparison: '<' + value: -1 + limit_type: lower + "133097": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + operation: minimum + std_anomaly: true + threshold: + comparison: '<' + value: -1.5 + local_scale_factor: 1 + metadata: + scaleFactorOfLowerLimit: 1 + limit_type: lower + "133098": + entrypoint: pproc-anomaly-probabilities + accumulations: + step: + type: legacywindow + operation: minimum + std_anomaly: true + threshold: + comparison: '<' + value: -2 + limit_type: lower + fcmean: + dtype: float64 + filter:stream: + "enfo/waef/eefo/weef/enfh/enwh": + entrypoint: pproc-accumulate + accumulations: + step: + type: legacywindow + operation: mean + metadata: + type: fcmean + filter:param: + "*": {} + "235117": + metadata: + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 0 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: + step: + type: legacywindow + operation: mean + metadata: + type: fcmean + metadata: + bitsPerValue: 16 + fcstdev: + dtype: float64 + filter:stream: + "enfo/waef/eefo/weef/enfh/enwh": + entrypoint: pproc-accumulate + accumulations: + step: + type: legacywindow + operation: standard_deviation + metadata: + type: fcstdev + filter:param: + "*": {} + "239117": + metadata: + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 6 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: + step: + type: legacywindow + operation: standard_deviation + metadata: + type: fcstdev + metadata: + bitsPerValue: 16 + fcmin: + dtype: float64 + filter:stream: + "enfo/waef/eefo/weef/enfh/enwh": + entrypoint: pproc-accumulate + accumulations: + step: + type: legacywindow + operation: minimum + metadata: + type: fcmin + filter:param: + "*": {} + "238117": + metadata: + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 3 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: + step: + type: legacywindow + operation: minimum + metadata: + type: fcmin + metadata: + bitsPerValue: 16 + fcmax: + dtype: float64 + filter:stream: + "enfo/waef/eefo/weef/enfh/enwh": + entrypoint: pproc-accumulate + accumulations: + step: + type: legacywindow + operation: maximum + metadata: + type: fcmax + filter:param: + "*": {} + "237117": + metadata: + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 2 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: + step: + type: legacywindow + operation: maximum + metadata: + type: fcmax + metadata: + bitsPerValue: 16 + pb: + entrypoint: pproc-quantiles +windows: + defs: + width6: + - type: range + width: 6 + interval: 3 + end: 144 + - type: range + width: 6 + interval: 6 + start: 144 + width12: + - type: range + width: 12 + interval: 3 + end: 144 + - type: range + width: 12 + interval: 6 + start: 144 + width24: + - type: range + width: 24 + interval: 3 + end: 144 + - type: range + width: 24 + interval: 6 + start: 144 + filter:stream: + oper: + in_steps: + - from: 0 + to: 90 + by: 1 + - from: 90 + to: 144 + by: 3 + - from: 144 + to: 360 + by: 6 + enfo/waef: + in_steps: + - from: 0 + to: 90 + by: 1 + - from: 90 + to: 144 + by: 3 + - from: 144 + to: 360 + by: 6 + eefo/weef: + in_steps: + - from: 0 + to: 1104 + by: 6 + msmm/swmm: + in_steps: + - from: 0 + to: 5160 + by: 6 + efhs/wehs: + in_steps: + - from: 0 + to: 360 + by: 6 + eehs: + in_steps: + - from: 0 + to: 1104 + by: 6 + filter:type: + em/es/pb: + filter:stream: + enfo: + filter:param: + "*": + out_steps: + - type: instantaneous + end: 90 + interval: 3 + - type: instantaneous + start: 90 + 121/122: + out_steps: + type: instantaneous + interval: 6 + 228026/228027: + out_steps: + type: instantaneous + interval: 3 + eefo: + type: instantaneous + efhs/wehs: + out_steps: + type: instantaneous + interval: 12 + fc/cf/pf: + filter:stream: + "*": + filter:param: + "*": + out_steps: + type: instantaneous + 261001/261014/261015/261002: + out_steps: + type: instantaneous + deaccumulate: true + fcmean/fcstdev/fcmax/fcmin: + filter:stream: + "enfo/eefo/oper": + out_steps: + type: range + interval: 24 + width: 168 + "msmm": + out_steps: + type: monthly + date: "{date}" + ep: + filter:stream: + enfo: + filter:param: + 131060/131061/131062/131063/131098/131099/131085/131070/131071/131072/131100: + out_steps: + type: range + width: 24 + interval: 12 + 131064/131065/131066/131067/131070/131071/131072/131100/131074/131075/131076/131077/131078/131079/131080/131081/131020/131021/131073: + out_steps: + - type: range + width: 120 + start: 120 + interval: 120 + - "120-168" + - "168-240" + 131068/131069/131074/131075/131076/131077/131078/131079/131080/131081/131073/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + out_steps: + type: instantaneous + start: 12 + interval: 12 + efi/efic/sot: + filter:stream: + "eefo": + out_steps: + type: range + interval: 24 + width: 168 + "enfo": + filter:param: + "*": + time: + "12": + out_steps: + - type: range + start: 12 + end: 240 + width: 24 + interval: 24 + - type: range + start: 12 + end: 240 + width: 72 + interval: 24 + end: 216 + - type: range + start: 12 + end: 240 + width: 120 + interval: 24 + - type: range + start: 240 + width: 24 + interval: 24 + - "0-240" + - "0-360" + - "240-360" + "00": + out_steps: + - type: range + width: 24 + interval: 24 + - type: range + width: 72 + end: 240 + interval: 24 + end: 216 + - type: range + width: 120 + end: 240 + interval: 24 + - "0-240" + - "0-360" + - "240-360" + 121/122/123/140229/228035/228036: + time: + "12": + out_steps: + type: range + start: 12 + end: 180 + width: 24 + interval: 24 + "00": + out_steps: + type: range + end: 168 + width: 24 + interval: 24 + cd: + filter:stream: + efhs/wehs: + filter:param: + "*": + out_steps: + - type: range + width: 24 + interval: 12 + - type: range + width: 72 + end: 240 + interval: 12 + end: 216 + - type: range + width: 120 + end: 240 + interval: 12 + - "0-240" + - "0-360" + - "240-360" + "228004/228": + out_steps: + - type: range + width: 24 + interval: 12 + - type: range + width: 72 + end: 240 + interval: 12 + end: 216 + - type: range + width: 120 + end: 240 + interval: 12 + - type: range + width: 168 + interval: 24 + - "0-240" + - "0-360" + - "240-360" + "202/201/49/140200/59/228044/140249/228006": + out_steps: + type: range + width: 24 + interval: 12 + eehs: + out_steps: + type: range + width: 168 + interval: 24 +inputs: + filter:stream: + oper: + filter:type: + fc/fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + stream: oper + type: fc + enfo: + filter:type: + "em/es/pb/fcmean/fcstdev/fcmin/fcmax/efi/sot": + forecast: + inputs: + - request: + stream: enfo + type: "cf" + - request: + stream: enfo + type: "pf" + members: + start: 1 + end: 50 + "cf/efic": + forecast: + inputs: + request: + stream: enfo + type: "cf" + "pf/ep": + forecast: + inputs: + request: + stream: enfo + type: "pf" + members: + start: 1 + end: 50 + climatology: + inputs: + request: + stream: "efhs" + time: "00" + scheme: ecmwf-4days + waef: + filter:type: + em/es/pb/fcmean/fcstdev/fcmin/fcmax/efi/sot: + forecast: + inputs: + - request: + stream: waef + type: "cf" + - request: + stream: waef + type: "pf" + members: + start: 1 + end: 50 + "cf/efic": + forecast: + inputs: + request: + stream: waef + type: "cf" + "pf/ep": + forecast: + inputs: + request: + stream: waef + type: "pf" + members: + start: 1 + end: 50 + climatology: + inputs: + request: + stream: "wehs" + time: "00" + scheme: ecmwf-4days + eefo: + filter:type: + "em/es/pb/fcmean/fcstdev/fcmin/fcmax": + forecast: + inputs: + - request: + stream: eefo + type: "cf" + - request: + stream: eefo + type: "pf" + members: + start: 1 + end: 100 + "cf": + forecast: + inputs: + request: + stream: eefo + type: "cf" + "pf": + forecast: + inputs: + request: + stream: eefo + type: "pf" + members: + start: 1 + end: 100 + "efi/sot/taem/taes": + forecast: + inputs: + - request: + stream: eefo + type: fcmean + members: + start: 0 + end: 100 + derive_step: + type: default + precomputed: true + climatology: + inputs: + request: + stream: "eehs" + time: "00" + scheme: ecmwf-2days + weef: + filter:type: + "em/es/pb/fcmean/fcstdev/fcmin/fcmax": + forecast: + inputs: + - request: + stream: weef + type: "cf" + - request: + stream: weef + type: "pf" + members: + start: 1 + end: 100 + "cf": + forecast: + inputs: + request: + stream: weef + type: "cf" + "pf": + forecast: + inputs: + request: + stream: weef + type: "pf" + members: + start: 1 + end: 100 + "efi/efic/sot/taem/taes": + forecast: + inputs: + - request: + stream: weef + type: fcmean + members: + start: 0 + end: 100 + derive_step: + type: default + precomputed: true + climatology: + inputs: + request: + stream: "wees" + time: "00" + scheme: ecmwf-2days + msmm: + filter:type: + "fcmean/fcstdev/fcmin/fcmax": + forecast: + inputs: + request: + stream: mmsf + type: "fc" + members: + start: 0 + end: 50 + swmm: + filter:type: + "fcmean/fcstdev/fcmin/fcmax": + forecast: + inputs: + request: + stream: wasf + type: "fc" + members: + start: 0 + end: 50 + filter:param: + "*": + filter:type: + "em/es/pb/fcmean/fcstdev/fcmin/fcmax": + forecast: + inputs: + request: + param: "{param}" + "10": + filter:type: + fc/cf/pf/em/es/pb: + forecast: + inputs: + request: + param: ["138", "155"] + "121/122": + filter:type: + em/es/pb: + forecast: + inputs: + request: + param: "{param}" + derive_step: + type: default + by: 6 + "228026/228027": + filter:type: + em/es/pb: + forecast: + inputs: + request: + param: "{param}" + derive_step: + type: default + by: 3 + 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + filter:type: + ep: + forecast: + inputs: + - request: + param: "130" + type: "cf" + derive_step: + type: default + by: 12 + members: null + - request: + param: "130" + type: "pf" + derive_step: + type: default + by: 12 + climatology: + required: true + inputs: + - request: + param: "130" + type: "em" + derive_date: + option: previous + strict: False + derive_step: + type: instantaneous + - request: + param: "130" + type: "es" + derive_date: + option: previous + strict: False + derive_step: + type: instantaneous + 131060/131061/131062/131063/131064/131065/131066/131067/131098/131099/131085: + filter:type: + ep: + forecast: + inputs: + request: + param: "228" + derive_step: + type: default + deaccumulation: true + "131068/131069": + filter:type: + ep: + forecast: + inputs: + request: + param: ["165", "166"] + 131070/131071/131072/131100: + filter:type: + ep: + forecast: + inputs: + request: + param: "123" + derive_step: + type: default + by: 6 + "131073": + filter:type: + ep: + filter:steptype: + instantaneous: + forecast: + inputs: + request: + param: "167" + range: + forecast: + inputs: + request: + param: "122" + 131074/131075/131076/131077: + filter:type: + ep: + forecast: + inputs: + request: + param: "140229" + 131078/131079/131080/131081: + filter:type: + ep: + forecast: + inputs: + request: + param: "140232" + "132044": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: ["228035", "228036"] + climatology: + inputs: + request: + param: "228004" + "132045": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: ["162071", "162072"] + climatology: + inputs: + request: + param: "162045" + "132049": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "123" + climatology: + inputs: + request: + param: "49" + "132059": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "228035" + climatology: + inputs: + request: + param: "59" + "132144": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "144" + climatology: + inputs: + request: + param: "144" + "132165": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "207" + climatology: + inputs: + request: + param: "228005" + "132167": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "167" + climatology: + inputs: + request: + param: "228004" + "132201": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "121" + climatology: + inputs: + request: + param: "201" + "132202": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "122" + climatology: + inputs: + request: + param: "202" + "132216": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "140229" + climatology: + inputs: + request: + param: "140200" + "132228": + filter:type: + efi/efic/sot: + filter:stream: + eefo: + forecast: + inputs: + request: + param: "172228" + climatology: + inputs: + request: + param: "228" + enfo: + forecast: + inputs: + request: + param: "228" + climatology: + inputs: + request: + param: "228" + "172008": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "8" + "172009": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "9" + "172142": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "142" + "172143": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "143" + "172144": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "144" + "172146": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "146" + "172147": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "147" + "172169": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "169" + "172175": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "175" + "172176": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "176" + "172177": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "177" + "172178": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "178" + "172179": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "179" + "172180": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "180" + "172181": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "181" + "172182": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "182" + "172189": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "189" + "172205": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "205" + "172212": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "212" + "172228": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "228" + "200142": + from_inputs: false + forecast: + inputs: + request: + param: "142" + "200143": + from_inputs: false + forecast: + inputs: + request: + param: "143" + "200144": + from_inputs: false + forecast: + inputs: + request: + param: "144" + "200189": + from_inputs: false + forecast: + inputs: + request: + param: "189" + "200228": + from_inputs: false + forecast: + inputs: + request: + param: "228" + derive_step: + type: default + deaccumulation: true + "201": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "121" + "202": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "122" + "207": + filter:type: + fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: ["165", "166"] + "228249": + from_inputs: false + forecast: + inputs: + request: + param: ["228246", "228247"] + "235117": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "59" + "260033": + from_inputs: false + forecast: + inputs: + request: + param: ["228220", "228218"] + "260053": + from_inputs: false + forecast: + inputs: + request: + param: ["228220", "228221"] + "261001": + filter:type: + cf/pf/fc: + forecast: + inputs: + - request: + param: ["169", "175", "176", "177", "228021", "47"] + derive_step: + type: default + deaccumulation: true + - request: + param: ["165", "166", "167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261001" + "261014": + filter:type: + cf/pf/fc: + forecast: + inputs: + - request: + param: ["169", "175", "176", "177", "228021", "47"] + derive_step: + type: default + deaccumulation: true + - request: + param: ["165", "166", "167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261014" + "261015": + filter:type: + cf/pf/fc: + forecast: + inputs: + - request: + param: ["169", "175", "176", "177", "228021", "47"] + derive_step: + type: default + deaccumulation: true + - request: + param: ["165", "166", "167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261015" + "260004": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "260004" + "260242": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "260242" + "261016": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261016" + "260005": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["165", "166", "167"] + "em/es/pb": + forecast: + inputs: + request: + param: "260005" + "260255": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["165", "166", "167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "260255" + "261018": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["165", "166", "167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261018" + "261002": + filter:type: + cf/pf/fc: + forecast: + inputs: + - request: + param: ["47", "228021", "169", "175", "176", "177"] + derive_step: + type: default + deaccumulation: true + - request: + param: "167" # Required for metadata of cossza + "em/es/pb": + forecast: + inputs: + request: + param: "261002" + filter:type: + fcmean/fcstdev/fcmax: + filter:stream: + "*": + filter:param: + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151145/151148/151163/151164/151175/159/164/165/166/167/168//202/207/228246/228247/235117/237117/238117/239117": + forecast: + inputs: + derive_step: + type: default + 40/41/42/170/140229/140231/140232/140233/140245/172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: + forecast: + inputs: + derive_step: + type: default + by: 24 + 1/2/3/60/129/130/131/132/133/138/155: + forecast: + inputs: + derive_step: + type: default + by: 12 + msmm/swmm: + filter:param: + "34/139/151/164/165/166/167/168/168/207/229/230": + forecast: + inputs: + derive_step: + type: monthly + 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228/228008/228014: + forecast: + inputs: + derive_step: + type: monthly + by: 24 + 129/130/133/138/155/203: + forecast: + inputs: + derive_step: + type: monthly + by: 12 + fcmin: + filter:stream: + "*": + filter:param: + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151145/151148/151163/151164/151175/159/164/165/166/167/168//202/207/228246/228247/235117/237117/238117/239117": + forecast: + inputs: + derive_step: + type: default + 172142/172143/172144/172228: + from_inputs: false + 40/41/42/170/140229/140231/140232/140233/140245/172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212: + forecast: + inputs: + derive_step: + type: default + by: 24 + 1/2/3/60/129/130/131/132/133/138/155: + forecast: + inputs: + derive_step: + type: default + by: 12 + msmm/swmm: + filter:param: + "34/139/151/164/165/166/167/168/168/207/229/230": + forecast: + inputs: + derive_step: + type: monthly + 172142/172143/172144/172228: + from_inputs: false + 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/228008/228014: + forecast: + inputs: + derive_step: + type: monthly + by: 24 + 129/130/133/138/155/203: + forecast: + inputs: + derive_step: + type: monthly + by: 12 + efi/efic/sot: + climatology: + required: true + inputs: + request: + type: cd + derive_date: + option: nearest + derive_step: + type: range + filter:stream: + "eefo/weef": + filter:param: + 132044/132059/132144/132045/132165/132167/132201/132202/132216/132228: {} + "*": + filter:param: + "132044/132059/132045/132165/132167/132201/132202/132216": + forecast: + inputs: + derive_step: + type: default + by: 6 + 132228/132144: + forecast: + inputs: + derive_step: + type: default + deaccumulation: true + fc/cf/pf/em/es/taem/taes/ep/pb/cd: {} \ No newline at end of file diff --git a/pproc-core/tests/templates/ensms.yaml b/pproc-core/tests/templates/ensms.yaml new file mode 100644 index 00000000..ecf1b6f8 --- /dev/null +++ b/pproc-core/tests/templates/ensms.yaml @@ -0,0 +1,106 @@ +- class: od + stream: enfo + type: em + levtype: pl + levelist: [250, 500, 850] + domain: g + param: "130" + date: "20230914" + time: 12 + expver: "0001" + step: 0 +- class: od + stream: enfo + type: em + levtype: pl + levelist: [250, 500, 850] + domain: g + param: "130" + date: "20230914" + time: 12 + expver: "0001" + step: 3 +- class: od + stream: enfo + type: em + levtype: pl + levelist: [250, 500, 850] + domain: g + param: "130" + date: "20230914" + time: 12 + expver: "0001" + step: 6 +- class: od + stream: enfo + type: es + levtype: pl + levelist: [250, 500, 850] + domain: g + param: "130" + date: "20230914" + time: 12 + expver: "0001" + step: 0 +- class: od + stream: enfo + type: es + levtype: pl + levelist: [250, 500, 850] + domain: g + param: "130" + date: "20230914" + time: 12 + expver: "0001" + step: 3 +- class: od + stream: enfo + type: es + levtype: pl + levelist: [250, 500, 850] + domain: g + param: "130" + date: "20230914" + time: 12 + expver: "0001" + step: 6 +- class: od + stream: enfo + type: em + levtype: sfc + domain: g + param: "200228" + date: "20230914" + time: 12 + expver: "0001" + step: 0-6 +- class: od + stream: enfo + type: em + levtype: sfc + domain: g + param: "200228" + date: "20230914" + time: 12 + expver: "0001" + step: 6-12 +- class: od + stream: enfo + type: es + levtype: sfc + domain: g + param: "200228" + date: "20230914" + time: 12 + expver: "0001" + step: 0-6 +- class: od + stream: enfo + type: es + levtype: sfc + domain: g + param: "200228" + date: "20230914" + time: 12 + expver: "0001" + step: 6-12 \ No newline at end of file diff --git a/pproc-core/tests/templates/extreme.yaml b/pproc-core/tests/templates/extreme.yaml new file mode 100644 index 00000000..eef8e0c5 --- /dev/null +++ b/pproc-core/tests/templates/extreme.yaml @@ -0,0 +1,124 @@ +- class: od + stream: enfo + type: efi + levtype: sfc + domain: g + param: "132228" + date: "20230914" + time: 12 + expver: "0001" + step: 12-36 +- class: od + stream: enfo + type: efi + levtype: sfc + domain: g + param: "132228" + date: "20230914" + time: 12 + expver: "0001" + step: 36-60 +- class: od + stream: enfo + type: efi + levtype: sfc + domain: g + param: "132228" + date: "20230914" + time: 12 + expver: "0001" + step: 12-84 +- class: od + stream: enfo + type: efic + levtype: sfc + domain: g + param: "132228" + date: "20230914" + time: 12 + expver: "0001" + step: 12-36 +- class: od + stream: enfo + type: efic + levtype: sfc + domain: g + param: "132228" + date: "20230914" + time: 12 + expver: "0001" + step: 36-60 +- class: od + stream: enfo + type: efic + levtype: sfc + domain: g + param: "132228" + date: "20230914" + time: 12 + expver: "0001" + step: 12-84 +- class: od + stream: enfo + type: sot + number: [90] + levtype: sfc + domain: g + param: "132228" + date: "20230914" + time: 12 + expver: "0001" + step: 12-36 +- class: od + stream: enfo + type: sot + number: [90] + levtype: sfc + domain: g + param: "132228" + date: "20230914" + time: 12 + expver: "0001" + step: 36-60 +- class: od + stream: enfo + type: sot + number: [90] + levtype: sfc + domain: g + param: "132228" + date: "20230914" + time: 12 + expver: "0001" + step: 12-84 +- class: od + stream: enfo + type: efi + levtype: sfc + domain: g + param: "132044" + date: "20230914" + time: 12 + expver: "0001" + step: 12-36 +- class: od + stream: enfo + type: efic + levtype: sfc + domain: g + param: "132044" + date: "20230914" + time: 12 + expver: "0001" + step: 12-36 +- class: od + stream: enfo + type: sot + number: [90] + levtype: sfc + domain: g + param: "132044" + date: "20230914" + time: 12 + expver: "0001" + step: 12-36 \ No newline at end of file diff --git a/pproc-core/tests/templates/prob.yaml b/pproc-core/tests/templates/prob.yaml new file mode 100644 index 00000000..c4ea174f --- /dev/null +++ b/pproc-core/tests/templates/prob.yaml @@ -0,0 +1,140 @@ +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131060" + date: "20230914" + time: 12 + expver: "0001" + step: 0-24 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131060" + date: "20230914" + time: 12 + expver: "0001" + step: 12-36 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131061" + date: "20230914" + time: 12 + expver: "0001" + step: 0-24 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131061" + date: "20230914" + time: 12 + expver: "0001" + step: 12-36 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131098" + date: "20230914" + time: 12 + expver: "0001" + step: 0-24 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131098" + date: "20230914" + time: 12 + expver: "0001" + step: 12-36 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131068" + date: 20230914 + time: 12 + expver: "0001" + step: 12 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131068" + date: 20230914 + time: 12 + expver: "0001" + step: 24 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131069" + date: 20230914 + time: 12 + expver: "0001" + step: 12 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131069" + date: 20230914 + time: 12 + expver: "0001" + step: 24 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131073" + date: 20230914 + time: 12 + expver: "0001" + step: 120-168 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131073" + date: 20230914 + time: 12 + expver: "0001" + step: 120-240 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131073" + date: 20230914 + time: 12 + expver: "0001" + step: 168-240 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131073" + date: 20230914 + time: 12 + expver: "0001" + step: 126 \ No newline at end of file diff --git a/pproc-core/tests/templates/quantiles.yaml b/pproc-core/tests/templates/quantiles.yaml new file mode 100644 index 00000000..91499bb9 --- /dev/null +++ b/pproc-core/tests/templates/quantiles.yaml @@ -0,0 +1,55 @@ +- class: od + stream: enfo + type: pb + levtype: sfc + domain: g + param: "167" + date: "20230914" + time: 12 + expver: "0001" + step: 0 + quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] +- class: od + stream: enfo + type: pb + levtype: sfc + domain: g + param: "167" + date: "20230914" + time: 12 + expver: "0001" + step: 3 + quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] +- class: od + stream: enfo + type: pb + levtype: sfc + domain: g + param: "167" + date: "20230914" + time: 12 + expver: "0001" + step: 6 + quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] +- class: od + stream: enfo + type: pb + levtype: sfc + domain: g + param: "200228" + date: "20230914" + time: 12 + expver: "0001" + step: 0-6 + quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] +- class: od + stream: enfo + type: pb + levtype: sfc + domain: g + param: "200228" + date: "20230914" + time: 12 + expver: "0001" + step: 3-9 + quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] diff --git a/pproc-core/tests/templates/t850.yaml b/pproc-core/tests/templates/t850.yaml new file mode 100644 index 00000000..3165a572 --- /dev/null +++ b/pproc-core/tests/templates/t850.yaml @@ -0,0 +1,120 @@ +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131022" + date: "20230914" + time: 12 + expver: "0001" + step: 120 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131022" + date: "20230914" + time: 12 + expver: "0001" + step: 168 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131023" + date: "20230914" + time: 12 + expver: "0001" + step: 120 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131023" + date: "20230914" + time: 12 + expver: "0001" + step: 168 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131020" + date: "20230914" + time: 12 + expver: "0001" + step: 120-168 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "131021" + date: "20230914" + time: 12 + expver: "0001" + step: 120-168 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "133093" + date: "20230914" + time: 12 + expver: "0001" + step: 120 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "133093" + date: "20230914" + time: 12 + expver: "0001" + step: 132 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "133093" + date: "20230914" + time: 12 + expver: "0001" + step: 168 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "133094" + date: "20230914" + time: 12 + expver: "0001" + step: 120 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "133094" + date: "20230914" + time: 12 + expver: "0001" + step: 132 +- class: od + stream: enfo + type: ep + levtype: sfc + domain: g + param: "133094" + date: "20230914" + time: 12 + expver: "0001" + step: 168 \ No newline at end of file diff --git a/pproc-core/tests/templates/wind.yaml b/pproc-core/tests/templates/wind.yaml new file mode 100644 index 00000000..276e1a2c --- /dev/null +++ b/pproc-core/tests/templates/wind.yaml @@ -0,0 +1,123 @@ +- class: od + stream: enfo + type: em + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 0 +- class: od + stream: enfo + type: em + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 3 +- class: od + stream: enfo + type: em + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 6 +- class: od + stream: enfo + type: es + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 0 +- class: od + stream: enfo + type: es + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 3 +- class: od + stream: enfo + type: es + levtype: sfc + domain: g + param: "207" + date: "20230914" + time: 12 + expver: "0001" + step: 6 +- class: od + stream: enfo + type: cf + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 0 +- class: od + stream: enfo + type: cf + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 3 +- class: od + stream: enfo + type: cf + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 6 +- class: od + stream: enfo + type: pf + number: [1, 2, 3, 4, 5] + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 0 +- class: od + stream: enfo + type: pf + number: [1, 2, 3, 4, 5] + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 3 +- class: od + stream: enfo + type: pf + number: [1, 2, 3, 4, 5] + levtype: sfc + domain: g + param: "10" + date: "20230914" + time: 12 + expver: "0001" + step: 6 \ No newline at end of file diff --git a/pproc-core/tests/test_fluent.py b/pproc-core/tests/test_fluent.py new file mode 100644 index 00000000..a2131bad --- /dev/null +++ b/pproc-core/tests/test_fluent.py @@ -0,0 +1,54 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import os +import pytest +import xarray as xr +from earthkit.workflows.fluent import Node, Payload + +from earthkit.workflows import Graph, deduplicate_nodes +from earthkit.workflows.plugins.pproc.fluent import Action +import tempfile + + +@pytest.mark.parametrize( + "inputs, nnodes", + [ + [[["2t", "2d", "10u", "10v"], ["2t", "10u", "10v"]], 8], + [[["167", "169", "165", "166"], ["167", "165", "166"]], 9], + ], + ids=["match-names", "no-match"], +) +def test_thermal(inputs, nnodes): + action = Action( + xr.DataArray( + data=[ + Node(Payload(print, [x]), name=str(x)) for x in range(len(inputs[0])) + ], + dims=["param"], + coords={"param": inputs[0]}, + ) + ) + graph = Graph([]) + for index, param in enumerate(["nefft", "wcf"]): + new_action = action.sel(param=inputs[index]).thermal_index(param) + graph += new_action.graph() + graph = deduplicate_nodes(graph) + from earthkit.workflows.visualise import visualise + + with tempfile.TemporaryDirectory() as td: + # NOTE `visualise` calls some dubious library which always generates javascript + # in the current directory, despite the generated html being elsewhere. We chdir + # to mitigate the pollution + cwd = os.getcwd() + os.chdir(td) + visualise(graph, "test.html") + os.chdir(cwd) + nodes = list(graph.nodes()) + assert len(nodes) == nnodes diff --git a/pproc-core/tests/test_products.py b/pproc-core/tests/test_products.py new file mode 100644 index 00000000..5dd59817 --- /dev/null +++ b/pproc-core/tests/test_products.py @@ -0,0 +1,35 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import os + +import pytest +import yaml + +from earthkit.workflows.plugins.pproc import products + +ROOT_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__))) + + +@pytest.mark.parametrize( + "product, requests, expected_num_nodes", + [ + ["ensemble", f"{ROOT_DIR}/templates/prob.yaml", 96], + ["ensemble_anomaly", f"{ROOT_DIR}/templates/t850.yaml", 80], + ["ensemble", f"{ROOT_DIR}/templates/ensms.yaml", 82], + ["extreme", f"{ROOT_DIR}/templates/extreme.yaml", 80], + ["ensemble", f"{ROOT_DIR}/templates/quantiles.yaml", 73], + ], + ids=["prob", "t850", "ensms", "extreme", "quantiles"], +) +def test_graph_construction(product, requests, expected_num_nodes): + with open(requests, "r") as f: + output_requests = yaml.safe_load(f) + graph = getattr(products, product)(output_requests, f"{ROOT_DIR}/schema.yaml") + assert len([x for x in graph.nodes()]) == expected_num_nodes diff --git a/pproc-core/tests/test_templates.py b/pproc-core/tests/test_templates.py new file mode 100644 index 00000000..9dbd11ed --- /dev/null +++ b/pproc-core/tests/test_templates.py @@ -0,0 +1,88 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import os + +import pytest +import yaml +from earthkit.workflows.graph import Graph, deduplicate_nodes +from pproc.config.utils import expand, squeeze + +from earthkit.workflows.plugins.pproc.fluent import from_source +from earthkit.workflows.plugins.pproc.templates import derive_template, from_request +from earthkit.workflows.plugins.pproc.utils.request import Request + +ROOT_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__))) + +sources = from_source( + [ + Request( + { + "param": "130", + "levtype": "pl", + "levelist": [250, 850], + "type": "pf", + "number": list(range(0, 5)), + } + ), + Request( + { + "param": "130", + "levtype": "pl", + "levelist": [250, 850], + "type": "cf", + } + ), + ], + join_key="type", + backend_kwargs={"stream": True}, +) + + +@pytest.mark.parametrize( + "requests, expected_num_nodes", + [ + [f"{ROOT_DIR}/templates/prob.yaml", 96], + [f"{ROOT_DIR}/templates/ensms.yaml", 82], + [f"{ROOT_DIR}/templates/quantiles.yaml", 73], + ], + ids=["prob", "ensms", "quantiles"], +) +def test_from_request(requests, expected_num_nodes): + with open(requests, "r") as f: + output_requests = yaml.safe_load(f) + + graph = Graph([]) + for req in output_requests: + config = derive_template(req, f"{ROOT_DIR}/schema.yaml") + source = from_source( + [ + Request(x, no_expand=("number")) + for x in squeeze( + sum([list(expand(x)) for x in config.inputs], []), + ["step", "number", "param", "levelist"], + ) + ], + join_key="type", + backend_kwargs={"stream": True}, + ).concatenate(dim="type", keep_dim=True) + graph += ( + from_request( + req, + f"{ROOT_DIR}/schema.yaml", + ensemble_dim="type", + forecast=source, + metadata={"edition": 2}, + ) + .write("null:") + .graph() + ) + + graph = deduplicate_nodes(graph) + assert len([x for x in graph.nodes()]) == expected_num_nodes diff --git a/pproc-core/tests/utils/test_io.py b/pproc-core/tests/utils/test_io.py new file mode 100644 index 00000000..62f72760 --- /dev/null +++ b/pproc-core/tests/utils/test_io.py @@ -0,0 +1,54 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from datetime import datetime, timedelta + +import pytest + +from earthkit.workflows.plugins.pproc.utils.io import retrieve + +request = { + "class": "od", + "expver": "0001", + "stream": "enfo", + "type": "cf", + "date": (datetime.today() - timedelta(days=1)).strftime("%Y%m%d"), + "time": "12", + "domain": "g", + "levtype": "sfc", + "step": "12", + "param": 228, + "source": "mars", +} + + +@pytest.mark.parametrize( + "overrides", + [ + {}, + {"interpolate": {"grid": "O640"}}, + { + "param": [138, 155], + "levtype": "pl", + "levelist": [250, 850], + "interpolate": {"grid": "O640", "vod2uv": "1"}, + }, + ], + ids=["default", "interpolate", "wind"], +) +def test_retrieve(overrides): + test_request = request.copy() + test_request.update(overrides) + retrieve(test_request) + + +def test_retrieve_multi(): + fdb_request = request.copy() + fdb_request["source"] = "fdb" + retrieve([request, fdb_request]) diff --git a/pproc-core/tests/utils/test_patch.py b/pproc-core/tests/utils/test_patch.py new file mode 100644 index 00000000..20689e4e --- /dev/null +++ b/pproc-core/tests/utils/test_patch.py @@ -0,0 +1,24 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import numpy as np +import pytest +import xarray as xr +from earthkit.meteo.extreme import array as extreme + +from earthkit.workflows.plugins.pproc.utils.patch import PatchModule + + +def test_patch_extreme(): + a = xr.DataArray(np.arange(6).reshape(2, 3), dims=["x", "y"]) + with pytest.raises(AttributeError) as err: + with PatchModule(extreme, "numpy", xr): + extreme.efi(a, a, 0.0001) + + assert str(err.value) == "module 'xarray' has no attribute 'logical_or'" From 2e70521b2097346671f6f91be81bfb6316c2f2f1 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 8 Apr 2026 14:28:18 +0000 Subject: [PATCH 03/95] Empty pproc-runtime --- pproc-runtime/LICENSE | 201 ++++++++++++++++++++++++ pproc-runtime/README.md | 3 + pproc-runtime/pyproject.toml | 56 +++++++ pproc-runtime/src/ppruntime/__init__.py | 0 4 files changed, 260 insertions(+) create mode 100644 pproc-runtime/LICENSE create mode 100644 pproc-runtime/README.md create mode 100644 pproc-runtime/pyproject.toml create mode 100644 pproc-runtime/src/ppruntime/__init__.py diff --git a/pproc-runtime/LICENSE b/pproc-runtime/LICENSE new file mode 100644 index 00000000..74a60543 --- /dev/null +++ b/pproc-runtime/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2024, European Centre for Medium Range Weather Forecasts. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/pproc-runtime/README.md b/pproc-runtime/README.md new file mode 100644 index 00000000..5703172b --- /dev/null +++ b/pproc-runtime/README.md @@ -0,0 +1,3 @@ +# pproc-runtime + +Contains functions required for execution of pproc entrypoints \ No newline at end of file diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml new file mode 100644 index 00000000..e295ba59 --- /dev/null +++ b/pproc-runtime/pyproject.toml @@ -0,0 +1,56 @@ +# (C) Copyright 2024 ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +[build-system] +requires = ["setuptools>=65", "setuptools_scm[toml]>=6.2"] +build-backend = "setuptools.build_meta" + +[project] +name = "pproc-runtime" +description = "Runtime dependencies of PProc" +license = "Apache-2.0" +license-files = ["LICENSE"] +authors = [ + { name = "European Centre for Medium-Range Weather Forecasts (ECMWF)", email = "software.support@ecmwf.int" }, +] +requires-python = ">=3.10" +readme = "README.md" +dynamic = [ "version" ] + +dependencies = [] + + +[project.optional-dependencies] +tests = ["pytest"] +lint = ["black", "isort", "flake8"] + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.setuptools] +include-package-data = true +zip-safe = false + +[tool.setuptools_scm] +write_to = "src/ppruntime/_version.py" +write_to_template = '''# Do not change! Do not track in version control! +__version__ = "{version}" +''' +local_scheme = "no-local-version" + +[tool.pytest.ini_options] +log_cli = true +log_cli_level = "DEBUG" +testpaths = ["tests/"] +addopts = "-n8" + +[tool.isort] +profile = "black" + +[tool.ruff.lint] +ignore = ["E722", "E731", "E741"] diff --git a/pproc-runtime/src/ppruntime/__init__.py b/pproc-runtime/src/ppruntime/__init__.py new file mode 100644 index 00000000..e69de29b From e41cb3f254a888c4340d57f9f2ef4878fb42f688 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 8 Apr 2026 14:36:02 +0000 Subject: [PATCH 04/95] Missing files in pproc-core --- pproc-core/.gitignore | 11 +++++ pproc-core/.pre-commit-config.yaml | 78 ++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 pproc-core/.gitignore create mode 100644 pproc-core/.pre-commit-config.yaml diff --git a/pproc-core/.gitignore b/pproc-core/.gitignore new file mode 100644 index 00000000..64e1d36b --- /dev/null +++ b/pproc-core/.gitignore @@ -0,0 +1,11 @@ +*.py[cod] +*.swp +**/__pycache__ +.vscode +*.egg-info +.pytest_cache +*.prof +*.idx +.mypy_cache + +dist/* diff --git a/pproc-core/.pre-commit-config.yaml b/pproc-core/.pre-commit-config.yaml new file mode 100644 index 00000000..9eadf0c8 --- /dev/null +++ b/pproc-core/.pre-commit-config.yaml @@ -0,0 +1,78 @@ +repos: +# Empty notebookds +- repo: local + hooks: + - id: clear-notebooks-output + name: clear-notebooks-output + files: tools/.*\.ipynb$ + stages: [pre-commit] + language: python + entry: jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace + additional_dependencies: [jupyter] +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-yaml # Check YAML files for syntax errors only + args: [--unsafe, --allow-multiple-documents] + - id: debug-statements # Check for debugger imports and py37+ breakpoint() + - id: end-of-file-fixer # Ensure files end in a newline + - id: trailing-whitespace # Trailing whitespace checker + - id: no-commit-to-branch # Prevent committing to main / master + - id: check-added-large-files # Check for large files added to git + - id: check-merge-conflict # Check for files that contain merge conflict +- repo: https://github.com/pre-commit/pygrep-hooks + rev: v1.10.0 # Use the ref you want to point at + hooks: + - id: python-use-type-annotations # Check for missing type annotations + - id: python-check-blanket-noqa # Check for # noqa: all + - id: python-no-log-warn # Check for log.warn +- repo: https://github.com/psf/black-pre-commit-mirror + rev: 24.10.0 + hooks: + - id: black + args: [--line-length=120] +- repo: https://github.com/pycqa/isort + rev: 5.13.2 + hooks: + - id: isort + args: + - -l 120 + - --force-single-line-imports + - --profile black +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.8.1 + hooks: + - id: ruff + args: + - --line-length=120 + - --fix + - --exit-non-zero-on-fix + - --preview + - --exclude=docs/**/*_.py +- repo: https://github.com/sphinx-contrib/sphinx-lint + rev: v1.0.0 + hooks: + - id: sphinx-lint +# For now, we use it. But it does not support a lot of sphinx features +- repo: https://github.com/dzhu/rstfmt + rev: v0.0.14 + hooks: + - id: rstfmt + exclude: 'cli/.*' # Because we use argparse +- repo: https://github.com/tox-dev/pyproject-fmt + rev: "v2.5.0" + hooks: + - id: pyproject-fmt +- repo: https://github.com/jshwi/docsig # Check docstrings against function sig + rev: v0.65.0 + hooks: + - id: docsig + args: + - --ignore-no-params # Allow docstrings without parameters + - --check-dunders # Check dunder methods + - --check-overridden # Check overridden methods + - --check-protected # Check protected methods + - --check-class # Check class docstrings + - --disable=E113 # Disable empty docstrings +ci: + autoupdate_schedule: monthly \ No newline at end of file From 448057dd742f4c82ab4667bb18d94e9994b92468 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Thu, 9 Apr 2026 10:31:16 +0000 Subject: [PATCH 05/95] Migrate schema and thermofeel --- pproc-core/.gitignore | 7 + pproc-core/pyproject.toml | 12 +- .../workflows/plugins/pproc/fluent.py | 80 ++--- .../workflows/plugins/pproc/products.py | 2 +- .../workflows/plugins/pproc/templates.py | 13 +- .../workflows/plugins/pproc/utils/math.py | 189 ---------- .../workflows/plugins/pproc/utils/metadata.py | 31 ++ .../workflows/plugins/pproc/utils/patch.py | 41 --- pproc-core/src/ppcore/__init__.py | 0 pproc-core/src/ppcore/config/preprocessing.py | 89 +++++ .../src/ppcore}/schema/__init__.py | 0 .../src/ppcore}/schema/base.py | 2 +- .../src/ppcore}/schema/config.py | 11 +- .../src/ppcore}/schema/deriver.py | 2 +- .../src/ppcore}/schema/filters.py | 2 +- .../src/ppcore}/schema/input.py | 16 +- .../src/ppcore}/schema/schema.py | 10 +- .../src/ppcore}/schema/step.py | 5 +- pproc-core/src/ppcore/utils/dicts.py | 44 +++ pproc-core/src/ppcore/utils/helpers.py | 33 ++ pproc-core/src/ppcore/utils/requests.py | 160 +++++++++ pproc-core/tests/utils/test_patch.py | 24 -- pproc-runtime/pyproject.toml | 10 +- .../src/ppruntime}/io.py | 30 +- .../src/ppruntime/metatdata.py | 0 pproc-runtime/src/ppruntime/stats.py | 96 +++++ .../src/ppruntime/thermal_indices.py | 278 +++++++++++++++ .../src/ppruntime}/thermo/__init__.py | 0 .../src/ppruntime}/thermo/helpers.py | 36 +- .../utils => pproc-runtime/tests}/test_io.py | 2 +- pproc/src/pproc/common/grib_helpers.py | 27 -- pproc/src/pproc/config/utils.py | 130 ------- pproc/src/pproc/schema/utils.py | 45 --- pproc/src/pproc/thermo/indices.py | 331 ------------------ 34 files changed, 830 insertions(+), 928 deletions(-) delete mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/utils/math.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py delete mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/utils/patch.py create mode 100644 pproc-core/src/ppcore/__init__.py create mode 100644 pproc-core/src/ppcore/config/preprocessing.py rename {pproc/src/pproc => pproc-core/src/ppcore}/schema/__init__.py (100%) rename {pproc/src/pproc => pproc-core/src/ppcore}/schema/base.py (99%) rename {pproc/src/pproc => pproc-core/src/ppcore}/schema/config.py (87%) rename {pproc/src/pproc => pproc-core/src/ppcore}/schema/deriver.py (99%) rename {pproc/src/pproc => pproc-core/src/ppcore}/schema/filters.py (94%) rename {pproc/src/pproc => pproc-core/src/ppcore}/schema/input.py (97%) rename {pproc/src/pproc => pproc-core/src/ppcore}/schema/schema.py (92%) rename {pproc/src/pproc => pproc-core/src/ppcore}/schema/step.py (97%) create mode 100644 pproc-core/src/ppcore/utils/dicts.py create mode 100644 pproc-core/src/ppcore/utils/helpers.py create mode 100644 pproc-core/src/ppcore/utils/requests.py delete mode 100644 pproc-core/tests/utils/test_patch.py rename {pproc-core/src/earthkit/workflows/plugins/pproc/utils => pproc-runtime/src/ppruntime}/io.py (88%) rename pproc-core/src/earthkit/workflows/plugins/pproc/utils/grib.py => pproc-runtime/src/ppruntime/metatdata.py (100%) create mode 100644 pproc-runtime/src/ppruntime/stats.py create mode 100644 pproc-runtime/src/ppruntime/thermal_indices.py rename {pproc/src/pproc => pproc-runtime/src/ppruntime}/thermo/__init__.py (100%) rename {pproc/src/pproc => pproc-runtime/src/ppruntime}/thermo/helpers.py (87%) rename {pproc-core/tests/utils => pproc-runtime/tests}/test_io.py (95%) delete mode 100644 pproc/src/pproc/schema/utils.py delete mode 100644 pproc/src/pproc/thermo/indices.py diff --git a/pproc-core/.gitignore b/pproc-core/.gitignore index 64e1d36b..d5f3cbe7 100644 --- a/pproc-core/.gitignore +++ b/pproc-core/.gitignore @@ -9,3 +9,10 @@ .mypy_cache dist/* +env +build +*.ipynb_checkpoints +runs +docs/examples/lib +lib/ +experiments \ No newline at end of file diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 21513eaf..4707cd89 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -11,7 +11,7 @@ requires = ["setuptools>=65", "setuptools_scm[toml]>=6.2"] build-backend = "setuptools.build_meta" [project] -name = "earthkit-workflows-pproc" +name = "pproc-core" description = "An earthkit-workflows interface to PProc" license = "Apache-2.0" license-files = ["LICENSE"] @@ -23,15 +23,11 @@ readme = "README.md" dynamic = [ "version" ] dependencies = [ - "earthkit-meteo>=0.1.1", - "filelock>=3.12.0", - "numexpr", - "dill", - "scipy", "code-meters", "earthkit-workflows", - "pyfdb", - "pproc" + "earthkit-time", + "numpy", + "pandas", ] diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index d04417e3..72086513 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -15,32 +15,31 @@ from earthkit.workflows.backends.earthkit import FieldListBackend from earthkit.workflows import fluent -from earthkit.workflows.plugins.pproc.utils import grib, io, math from earthkit.workflows.plugins.pproc.utils.request import MultiSourceRequest, Request class Action(fluent.Action): _THERMAL_CONFIG = { - "utci": {"operation": math.calc_utci, "params": ["2t", "2d", "10si", "mrt"]}, + "utci": {"operation": "ppcore.thermal_indices.calc_utci", "params": ["2t", "2d", "10si", "mrt"]}, "10si": { "operation": "norm", "metadata": {"paramId": 207}, "params": ["10u", "10v"], }, "mrt": { - "operation": math.calc_mrt, - "params": ["uvcossza", "dsrp", "ssrd", "fdir", "strd", "str", "ssr"], + "operation": "ppcore.thermal_indices.calc_mrt", + "params": ["cossza", "dsrp", "ssrd", "fdir", "strd", "str", "ssr"], }, - "uvcossza": {"operation": math.calc_cossza, "params": ["2t", "fdir"]}, - "dsrp": {"operation": math.calc_dsrp, "params": ["fdir", "uvcossza"]}, - "hmdx": {"operation": math.calc_hmdx, "params": ["2t", "2d"]}, - "2r": {"operation": math.calc_rhp, "params": ["2t", "2d"]}, - "heatx": {"operation": math.calc_heatx, "params": ["2t", "2d"]}, - "wbgt": {"operation": math.calc_wbgt, "params": ["2t", "2d", "10si", "mrt"]}, - "gt": {"operation": math.calc_gt, "params": ["2t", "10si", "mrt"]}, - "nefft": {"operation": math.calc_nefft, "params": ["2t", "10si", "2r"]}, - "wcf": {"operation": math.calc_wcf, "params": ["2t", "10si"]}, - "aptmp": {"operation": math.calc_aptmp, "params": ["2t", "2r", "10si"]}, + "cossza": {"operation": "ppcore.thermal_indices.calc_cossza", "params": ["2t", "fdir"]}, + "dsrp": {"operation": "ppcore.thermal_indices.calc_dsrp", "params": ["fdir", "cossza"]}, + "hmdx": {"operation": "ppcore.thermal_indices.calc_hmdx", "params": ["2t", "2d"]}, + "2r": {"operation": "ppcore.thermal_indices.calc_rhp", "params": ["2t", "2d"]}, + "heatx": {"operation": "ppcore.thermal_indices.calc_heatx", "params": ["2t", "2d"]}, + "wbgt": {"operation": "ppcore.thermal_indices.calc_wbgt", "params": ["2t", "2d", "10si", "mrt"]}, + "gt": {"operation": "ppcore.thermal_indices.calc_gt", "params": ["2t", "10si", "mrt"]}, + "nefft": {"operation": "ppcore.thermal_indices.calc_nefft", "params": ["2t", "10si", "2r"]}, + "wcf": {"operation": "ppcore.thermal_indices.calc_wcf", "params": ["2t", "10si"]}, + "aptmp": {"operation": "ppcore.thermal_indices.calc_aptmp", "params": ["2t", "2r", "10si"]}, } def _reduction_with_metadata( @@ -251,11 +250,11 @@ def efi( Action """ eps = float(eps) - if self.nodes.size == 1: + if nodetree_size(self.nodes) == 1: if len(step_ranges) != 1: raise ValueError("Single node, but multiple step ranges") payload = fluent.Payload( - math.efi, + "ppcore.stats.efi", (fluent.Node.input_name(1), fluent.Node.input_name(0), eps), {"metadata": metadata}, ) @@ -299,7 +298,7 @@ def sot( if not isinstance(sot, list): sot = [sot] - if self.nodes.size == 1: + if nodetree_size(self.nodes) == 1: if len(step_ranges) != 1: raise ValueError("Single node, but multiple step ranges") ret = self.join( @@ -356,28 +355,16 @@ def ensms( def threshold_prob( self, - comparison: str, - value: float, - local_scale_factor: float = None, + threshold: dict, dim: str = "number", batch_size: int = 0, metadata: dict | None = None, ) -> "Action": - metadata = {} if metadata is None else metadata.copy() - metadata.update( - grib.threshold( - metadata.get("edition", 1), - comparison, - value, - local_scale_factor, - ) - ) payload = fluent.Payload( - math.threshold, + "ppcore.stats.threshold", ( fluent.Node.input_name(0), - comparison, - float(value), + threshold, ), ) return ( @@ -627,24 +614,11 @@ def accum_operation( ] return self.transform(_accum_transform, params, dim) - def write( - self, target: str, metadata: dict | fluent.Action | None = None - ) -> "Action": - if isinstance(metadata, fluent.Action): - res = self.join(metadata, "**datatype**", match_coord_values=True).reduce( - fluent.Payload( - io.write, - (fluent.Node.input_name(0), target, fluent.Node.input_name(1)), - ), - dim="**datatype**", - ) - return res - + def write(self, target: dict) -> "Action": return self.map( fluent.Payload( - io.write, + "ppcore.io.write", (fluent.Node.input_name(0), target), - {"metadata": metadata}, ) ) @@ -654,7 +628,7 @@ def _sot_transform( ) -> fluent.Action: new_sot = action.reduce( fluent.Payload( - math.sot, + "ppcore.stats.sot", (fluent.Node.input_name(1), fluent.Node.input_name(0), number, eps), {"metadata": metadata}, ) @@ -681,7 +655,7 @@ def _efi_window_transform( ) -> fluent.Action: ret = action.select(selection).reduce( fluent.Payload( - math.efi, + "ppcore.stats.efi", (fluent.Node.input_name(1), fluent.Node.input_name(0), eps), {"metadata": metadata}, ), @@ -694,7 +668,7 @@ def _quantiles_transform( action, q_number: int, total_number: int, new_dim: str, metadata: dict | None ): payload = fluent.Payload( - math.quantiles, + "ppcore.stats.quantiles", (fluent.Node.input_name(0), q_number, total_number), {"metadata": metadata}, ) @@ -718,10 +692,6 @@ def _accum_transform( # Nothing to reduce and no metadata to set return action.select({dim: coords}) - metadata = {} if metadata is None else metadata.copy() - if dim == "step": - metadata.update(grib.window(operation, coords, include_start)) - if deaccumulate: accum_action = action.select({dim: coords[:-1]}) accum_action = accum_action.subtract(action.select({dim: coords[1:]})) @@ -752,7 +722,7 @@ def from_source( payloads = np.empty(tuple(request.dims.values()), dtype=object) for indices, new_request in request.expand(): payloads[indices] = functools.partial( - io.retrieve, new_request, **backend_kwargs + "ppcore.io.retrieve", new_request, **backend_kwargs ) new_action = fluent.from_source( payloads, diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/products.py b/pproc-core/src/earthkit/workflows/plugins/pproc/products.py index bbca8c6a..d6d70970 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/products.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/products.py @@ -8,11 +8,11 @@ # nor does it submit to any jurisdiction. from earthkit.workflows.graph import Graph, deduplicate_nodes -from pproc.config.utils import expand, squeeze from earthkit.workflows.plugins.pproc.fluent import from_source from earthkit.workflows.plugins.pproc.templates import derive_template from earthkit.workflows.plugins.pproc.utils.request import Request +from ppcore.utils.requests import expand, squeeze def ensemble( diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py b/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py index 6fe230c9..5459a0fe 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py @@ -12,11 +12,10 @@ from earthkit.workflows.backends.earthkit import FieldListBackend from earthkit.workflows.fluent import Payload -from pproc.config.preprocessing import PreprocessingConfig -from pproc.schema.schema import Schema from earthkit.workflows.plugins.pproc.fluent import Action -from earthkit.workflows.plugins.pproc.utils import grib +from ppcore.config.preprocessing import PreprocessingConfig +from ppcore.schema.schema import Schema @dataclass @@ -31,7 +30,7 @@ def action( ) -> Action: action = forecast for preprocessing in self.preprocessing: - action = action.param_operation(dim=preprocessing_dim, **preprocessing) + action = action.param_operation(dim=preprocessing_dim, **preprocessing.model_dump()) for dim, accumulation in self.accumulations.items(): action = action.accum_operation( accumulation["operation"], @@ -73,7 +72,7 @@ def action( ) -> Action: action = forecast for preprocessing in self.preprocessing: - action = action.param_operation(dim=preprocessing_dim, **preprocessing) + action = action.param_operation(dim=preprocessing_dim, **preprocessing.model_dump()) for dim, accumulation in self.accumulations.items(): action = action.accum_operation( accumulation["operation"], @@ -109,11 +108,11 @@ def action( ensemble_dim="number", ) -> Action: clim_headers = climatology.iselect({"type": 0, "step": 0}, drop=True).map( - Payload(grib.anomaly_clim) + Payload("earthkit.workflows.plugins.pproc.runtime.metadata.anomaly_clim") ) action = forecast for preprocessing in self.preprocessing: - action = action.param_operation(dim=preprocessing_dim, **preprocessing) + action = action.param_operation(dim=preprocessing_dim, **preprocessing.model_dump()) action = action.anomaly( climatology.select({"type": "em"}, drop=True), climatology.select({"type": "es"}, drop=True), diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/math.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/math.py deleted file mode 100644 index b9b90338..00000000 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/math.py +++ /dev/null @@ -1,189 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -import array_api_compat -import earthkit.meteo.solar -from earthkit.data import FieldList -from earthkit.meteo.extreme import array as extreme -from earthkit.meteo.stats import array as stats -from earthkit.workflows.backends.earthkit import ( - Metadata, - comp_str2func, - new_fieldlist, - resolve_metadata, -) -from meters import ResourceMeter -from pproc.thermo.indices import ComputeIndices - -from earthkit.workflows.plugins.pproc.utils import grib -from earthkit.workflows.plugins.pproc.utils.patch import PatchModule - - -def threshold( - arr: FieldList, - comparison: str, - value: float, - *, - metadata: Metadata = None, -) -> FieldList: - with ResourceMeter("THRESHOLD"): - xp = array_api_compat.array_namespace(arr.values) - # Find all locations where nan appears as an ensemble value - is_nan = xp.isnan(arr.values) - thesh = comp_str2func(xp, comparison)(arr.values, value) - res = xp.where(is_nan, xp.nan, thesh) - return new_fieldlist(res, arr.metadata(), resolve_metadata(metadata, arr)) - - -def efi( - clim: FieldList, - ens: FieldList, - eps: float, - *, - metadata: Metadata = None, -) -> FieldList: - with ResourceMeter(f"EFI, clim {clim.values.shape}, ens {ens.values.shape}"): - xp = array_api_compat.array_namespace(ens.values, clim.values) - with PatchModule(extreme, "numpy", xp): - res = extreme.efi(clim.values, ens.values, eps) - resolved_metadata = resolve_metadata(metadata, clim, ens) - return new_fieldlist( - res, - [ens[0].metadata()], - {**resolved_metadata, **grib.efi(clim, ens, resolved_metadata)}, - ) - - -def sot( - clim: FieldList, - ens: FieldList, - number: int, - eps: float, - *, - metadata: Metadata = None, -) -> FieldList: - with ResourceMeter("SOT"): - xp = array_api_compat.array_namespace(ens.values, clim.values) - with PatchModule(extreme, "numpy", xp): - res = extreme.sot(clim.values, ens.values, number, eps) - resolved_metadata = resolve_metadata(metadata, clim, ens) - return new_fieldlist( - res, - [ens[0].metadata()], - { - **resolved_metadata, - **grib.sot(clim, ens, resolved_metadata, number), - }, - ) - - -def quantiles( - ens: FieldList, q_number: int, total_number: int, *, metadata: Metadata = None -) -> FieldList: - with ResourceMeter("QUANTILES"): - xp = array_api_compat.array_namespace(ens.values) - quantile = q_number / total_number - with PatchModule(stats, "numpy", xp): - res = list(stats.iter_quantiles(ens.values, [quantile], method="numpy"))[0] - resolved_metadata = resolve_metadata(metadata, ens) - return new_fieldlist( - res, - [ens[0].metadata()], - { - **resolved_metadata, - **grib.quantiles(ens, resolved_metadata, q_number, total_number), - }, - ) - - -def _check_shape(fields: earthkit.data.FieldList, params: list[str]): - shape = None - for param in params: - selected = fields.sel(param=param) - if len(selected) == 0: - raise ValueError( - f"Field {param} not found in fields: \n {fields.ls(namespace='mars')}" - ) - if shape is None: - shape = selected.values.shape - assert ( - shape == selected.values.shape - ), f"Shape mismatch for {param} {shape} != {selected.values.shape}" - - -def calc_cossza(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - return ComputeIndices(resolve_metadata(metadata)).calc_cossza_int(all_fields) - - -def calc_hmdx(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - _check_shape(all_fields, ["2t", "2d"]) - return ComputeIndices(resolve_metadata(metadata)).calc_hmdx(all_fields) - - -def calc_rhp(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - _check_shape(all_fields, ["2t", "2d"]) - return ComputeIndices(resolve_metadata(metadata)).calc_rhp(all_fields) - - -def calc_heatx(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - _check_shape(all_fields, ["2t", "2d"]) - return ComputeIndices(resolve_metadata(metadata)).calc_heatx(all_fields) - - -def calc_dsrp(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - return ComputeIndices(resolve_metadata(metadata)).calc_dsrp(all_fields) - - -def calc_utci(*fields: FieldList, metadata: Metadata = None, validate=True): - all_fields = sum(fields[1:], fields[0]) - _check_shape(all_fields, ["2t", "2d", "10si", "mrt"]) - return ComputeIndices(resolve_metadata(metadata)).calc_utci( - all_fields, print_misses=False, validate=validate - ) - - -def calc_wbgt(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - _check_shape(all_fields, ["2t", "2d", "10si", "mrt"]) - return ComputeIndices(resolve_metadata(metadata)).calc_wbgt(all_fields) - - -def calc_gt(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - _check_shape(all_fields, ["2t", "10si", "mrt"]) - return ComputeIndices(resolve_metadata(metadata)).calc_gt(all_fields) - - -def calc_nefft(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - _check_shape(all_fields, ["2t", "10si", "2r"]) - return ComputeIndices(resolve_metadata(metadata)).calc_nefft(all_fields) - - -def calc_wcf(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - _check_shape(all_fields, ["2t", "10si"]) - return ComputeIndices(resolve_metadata(metadata)).calc_wcf(all_fields) - - -def calc_aptmp(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - _check_shape(all_fields, ["2t", "10si", "2r"]) - return ComputeIndices(resolve_metadata(metadata)).calc_aptmp(all_fields) - - -def calc_mrt(*fields: FieldList, metadata: Metadata = None): - all_fields = sum(fields[1:], fields[0]) - _check_shape(all_fields, ["ssrd", "fdir", "strd", "ssr", "dsrp", "str", "uvcossza"]) - return ComputeIndices(resolve_metadata(metadata)).calc_mrt(all_fields) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py new file mode 100644 index 00000000..044131e9 --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py @@ -0,0 +1,31 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from typing import Any + + +def window(operation: str, coords: list[Any], include_init: bool) -> dict: + if len(coords) == 1: + return {} + + ret = {} + if operation == "diff": + ret.update({"timeRangeIndicator": 5, "stepType": "diff"}) + if operation == "mean": + ret["timeRangeIndicator"] = 3 + ret["numberIncludedInAverage"] = ( + len(coords) if include_init else len(coords) - 1 + ) + ret["numberMissingFromAveragesOrAccumulations"] = 0 + if operation in ["min", "max"]: + ret["timeRangeIndicator"] = 2 + ret.setdefault("stepType", "max") + ret["stepRange"] = f"{coords[0]}-{coords[-1]}" + return ret + \ No newline at end of file diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/patch.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/patch.py deleted file mode 100644 index c01b1ebe..00000000 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/patch.py +++ /dev/null @@ -1,41 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -import importlib -import inspect - - -class PatchModule: - def __init__(self, module, original, patch): - self.module = module - self.original = importlib.import_module(original) - self.patch = patch - - def __enter__(self): - if self.original == self.patch: - return - - functions = [] - module_key = None - for key, value in self.module.__dict__.items(): - if value == self.original: - module_key = key - elif inspect.isfunction(value): - functions.append(key) - assert module_key is not None - - setattr(self.module, module_key, self.patch) - for func in functions: - func_source = inspect.getsource(getattr(self.module, func)) - exec(func_source, self.module.__dict__) - - def __exit__(self, type, value, traceback): - if self.original == self.patch: - return - importlib.reload(self.module) diff --git a/pproc-core/src/ppcore/__init__.py b/pproc-core/src/ppcore/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pproc-core/src/ppcore/config/preprocessing.py b/pproc-core/src/ppcore/config/preprocessing.py new file mode 100644 index 00000000..ee2641f6 --- /dev/null +++ b/pproc-core/src/ppcore/config/preprocessing.py @@ -0,0 +1,89 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from abc import ABC, abstractmethod +from typing import Annotated, Any, List, Literal, Optional, Tuple, Union +from typing_extensions import Self + +from pydantic import BaseModel, Field, model_validator + + +class Preprocessing(BaseModel, ABC): + output: Optional[dict] = None + +class Scaling(Preprocessing): + # - operation: scale + # value: 3600 + operation: Literal["scale"] = "scale" + value: Union[float, int] + + +class Combination(Preprocessing): + # - operation: norm + operation: Literal["direction", "norm", "sum"] + + +class Reshape(Preprocessing): + operation: Literal["reshape"] = "reshape" + shape: Union[int, tuple[int, int]] + order: Literal["F", "C"] = "F" + + +class Expression(Preprocessing): + operation: Literal["expression"] = "expression" + expr: str + expr_data: dict + dtype: Optional[str] = None + + +class MaskExpression(BaseModel): + lhs: Union[float, dict] + cmp: Literal["<", ">", ">=", "<=", "==", "!="] + rhs: Union[float, dict] + + @model_validator(mode="before") + @classmethod + def validate_model(cls, data: Any) -> Any: + if isinstance(data, list): + assert len(data) == 3, "Mask expression should be a [lhs, cmp, rhs] list" + return {"lhs": data[0], "cmp": data[1], "rhs": data[2]} + return data + + +class Masking(Preprocessing): + # - operation: mask + # select: {param: 228036} + # mask: [{param: 228035, level: 250}, ">=", 10] + operation: Literal["mask"] = "mask" + mask: MaskExpression + select: dict + replacement: float = 0.0 + + +class PreprocessingConfig(BaseModel): + # preprocessing: + # - operation: norm + # - operation: mask + # select: {param: 228036} + # mask: [{param: 228035, level: 250}, ">=", 10] + # - operation: scale + # value: 3600 + actions: List[ + Annotated[ + Union[Scaling, Combination, Masking, Reshape, Expression], + Field(discriminator="operation"), + ] + ] = Field(default_factory=list) + + @model_validator(mode="before") + @classmethod + def validate_model(cls, data: Any) -> Any: + if isinstance(data, list): + return {"actions": data} + return data diff --git a/pproc/src/pproc/schema/__init__.py b/pproc-core/src/ppcore/schema/__init__.py similarity index 100% rename from pproc/src/pproc/schema/__init__.py rename to pproc-core/src/ppcore/schema/__init__.py diff --git a/pproc/src/pproc/schema/base.py b/pproc-core/src/ppcore/schema/base.py similarity index 99% rename from pproc/src/pproc/schema/base.py rename to pproc-core/src/ppcore/schema/base.py index a2a4d578..053ba09f 100644 --- a/pproc/src/pproc/schema/base.py +++ b/pproc-core/src/ppcore/schema/base.py @@ -13,7 +13,7 @@ from typing_extensions import Self import logging -from pproc.config.utils import deep_update +from ppcore.utils.helpers import deep_update logger = logging.getLogger(__name__) diff --git a/pproc/src/pproc/schema/config.py b/pproc-core/src/ppcore/schema/config.py similarity index 87% rename from pproc/src/pproc/schema/config.py rename to pproc-core/src/ppcore/schema/config.py index ad71d65a..0925da35 100644 --- a/pproc/src/pproc/schema/config.py +++ b/pproc-core/src/ppcore/schema/config.py @@ -9,12 +9,11 @@ import numpy as np -from pproc.schema.base import BaseSchema, dict_update -from pproc.schema.filters import _steplength, _selection, _steptype -from pproc.schema.utils import validate_request -from pproc.config.utils import to_list -from pproc.common.grib_helpers import fill_template_value -from pproc.common.utils import dict_apply +from ppcore.schema.base import BaseSchema, dict_update +from ppcore.schema.filters import _steplength, _selection, _steptype +from ppcore.utils.requests import validate_request +from ppcore.utils.helpers import to_list, fill_template_value +from ppcore.utils.dicts import dict_apply class ConfigSchema(BaseSchema): diff --git a/pproc/src/pproc/schema/deriver.py b/pproc-core/src/ppcore/schema/deriver.py similarity index 99% rename from pproc/src/pproc/schema/deriver.py rename to pproc-core/src/ppcore/schema/deriver.py index ab647f3f..3650f095 100644 --- a/pproc/src/pproc/schema/deriver.py +++ b/pproc-core/src/ppcore/schema/deriver.py @@ -16,7 +16,7 @@ from earthkit.time import Sequence from earthkit.time.climatology import RelativeYear, date_range -from pproc.common.stepseq import fcmonth_to_steprange +# from pproc.common.stepseq import fcmonth_to_steprange class DefaultStepDeriver(BaseModel): diff --git a/pproc/src/pproc/schema/filters.py b/pproc-core/src/ppcore/schema/filters.py similarity index 94% rename from pproc/src/pproc/schema/filters.py rename to pproc-core/src/ppcore/schema/filters.py index fe3858e7..70d0f1db 100644 --- a/pproc/src/pproc/schema/filters.py +++ b/pproc-core/src/ppcore/schema/filters.py @@ -1,4 +1,4 @@ -from pproc.common.stepseq import fcmonth_to_steprange +# from pproc.common.stepseq import fcmonth_to_steprange def _steptype(request: dict, key: str) -> str: diff --git a/pproc/src/pproc/schema/input.py b/pproc-core/src/ppcore/schema/input.py similarity index 97% rename from pproc/src/pproc/schema/input.py rename to pproc-core/src/ppcore/schema/input.py index a41d4529..b3f64eac 100644 --- a/pproc/src/pproc/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -15,25 +15,25 @@ import numpy as np import logging -from pproc.schema.base import BaseSchema -from pproc.schema.deriver import ( +from ppcore.schema.base import BaseSchema +from ppcore.schema.deriver import ( ForecastStepDeriver, DefaultStepDeriver, ClimDateDeriver, ClimStepDeriver, HindcastDatesDeriver, ) -from pproc.schema.filters import _steplength, _steptype, _selection, _members -from pproc.schema.step import StepSchema -from pproc.schema.utils import validate_request -from pproc.config.utils import ( +from ppcore.schema.filters import _steplength, _steptype, _selection, _members +from ppcore.schema.step import StepSchema +from ppcore.schema.utils import validate_request +from ppcore.utils.requests import ( update_request, expand, squeeze, - deep_update, extract_mars, - to_list, ) +from ppcore.utils.dicts import deep_update +from ppcore.utils.helpers import to_list logger = logging.getLogger(__name__) diff --git a/pproc/src/pproc/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py similarity index 92% rename from pproc/src/pproc/schema/schema.py rename to pproc-core/src/ppcore/schema/schema.py index 2e4481e2..310a191e 100644 --- a/pproc/src/pproc/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -14,12 +14,10 @@ import pandas as pd import yaml -from pproc.schema.config import ConfigSchema -from pproc.schema.input import InputSchema -from pproc.schema.step import StepSchema -from pproc.schema.utils import validate_request, VALUE_TYPES - -from pproc.config.utils import expand, METADATA_KEYS +from ppcore.schema.config import ConfigSchema +from ppcore.schema.input import InputSchema +from ppcore.schema.step import StepSchema +from ppcore.utils.requests import METADATA_KEYS, VALUE_TYPES, expand, validate_request class Schema: diff --git a/pproc/src/pproc/schema/step.py b/pproc-core/src/ppcore/schema/step.py similarity index 97% rename from pproc/src/pproc/schema/step.py rename to pproc-core/src/ppcore/schema/step.py index ef61aa8c..1f6fe37b 100644 --- a/pproc/src/pproc/schema/step.py +++ b/pproc-core/src/ppcore/schema/step.py @@ -12,8 +12,9 @@ import numpy as np import bisect -from pproc.schema.base import BaseSchema -from pproc.common.stepseq import stepseq_monthly, steprange_to_fcmonth +# from pproc.common.stepseq import stepseq_monthly, steprange_to_fcmonth + +from ppcore.schema.base import BaseSchema class Instantaneous(BaseModel): diff --git a/pproc-core/src/ppcore/utils/dicts.py b/pproc-core/src/ppcore/utils/dicts.py new file mode 100644 index 00000000..a47e91bf --- /dev/null +++ b/pproc-core/src/ppcore/utils/dicts.py @@ -0,0 +1,44 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import collections +import itertools +from typing import Callable, Dict, Iterable, Iterator, TypeVar, TypeAlias + +K = TypeVar("K") +T = TypeVar("T") +U = TypeVar("U") +V = TypeVar("V") +NestedDict: TypeAlias = Dict[K, V | "NestedDict"] + + +def dict_product(dic: Dict[K, Iterable[V]]) -> Iterator[Dict[K, V]]: + keys = list(dic.keys()) + its = tuple(dic.values()) + for vals in itertools.product(*its): + yield dict(zip(keys, vals)) + + +def dict_apply(func: Callable[[V], V], dic: NestedDict) -> NestedDict: + modified_dic = dic.copy() + for k, v in modified_dic.items(): + if isinstance(v, dict): + modified_dic[k] = dict_apply(func, v) + else: + modified_dic[k] = func(v) + return modified_dic + + +def deep_update(original: NestedDict, update: NestedDict) -> NestedDict: + for key, value in update.items(): + if isinstance(value, NestedDict) and isinstance(original.get(key, None), NestedDict): + original[key] = deep_update(original[key], value) + else: + original[key] = value + return original \ No newline at end of file diff --git a/pproc-core/src/ppcore/utils/helpers.py b/pproc-core/src/ppcore/utils/helpers.py new file mode 100644 index 00000000..33e35db5 --- /dev/null +++ b/pproc-core/src/ppcore/utils/helpers.py @@ -0,0 +1,33 @@ +import re +from typing import Any + +_TEMPLATE_RE = re.compile("^{([a-z_]*)}:?([a-z]*)$", re.I) +_TYPES = { + "int": int, + "str": str, + "float": float, +} + +def to_list(value: Any) -> list[Any]: + if np.ndim(value) == 0: + return [value] + return list(value) + + +def fill_template_value(val: str, template_map: dict): + m = _TEMPLATE_RE.fullmatch(val) + if m is None: + return val + value, tp = m.groups() + if value not in template_map: + return val + + return template_map[value] if len(tp) == 0 else _TYPES[tp](template_map[value]) + + +def fill_template_values(metadata: dict, template_map: dict) -> dict: + metadata = metadata.copy() + for key, val in metadata.items(): + if isinstance(val, str): + metadata[key] = fill_template_value(val, template_map) + return metadata \ No newline at end of file diff --git a/pproc-core/src/ppcore/utils/requests.py b/pproc-core/src/ppcore/utils/requests.py new file mode 100644 index 00000000..089618f5 --- /dev/null +++ b/pproc-core/src/ppcore/utils/requests.py @@ -0,0 +1,160 @@ +from typing import Any, Iterator, Optional +import copy +import pandas as pd +import numpy as np + +METADATA_KEYS = {"param": "paramId", "date": "dataDate"} + +VALUE_TYPES = { + "param": str, + "paramId": int, + "levelist": int, + "step": int, + "fcmonth": int, + "number": int, + "dataDate": int, + "date": str, +} + + +def validate_request(request: dict) -> dict: + """ + Format request into desired format for schema and config generation + """ + out = copy.deepcopy(request) + # Map types + for key, value in request.items(): + if isinstance(value, list) and len(value) == 1: + value = value[0] + if key in VALUE_TYPES: + value_type = VALUE_TYPES[key] + try: + value = ( + value_type(value) + if np.ndim(value) == 0 + else list(map(value_type, value)) + ) + except ValueError: + pass + out[key] = value + # Format time + if time := out.get("time", None): + if isinstance(time, list): + raise ValueError("Only single value of time supported per request") + if isinstance(time, int): + time = f"{time:02d}" + out["time"] = time.ljust(4, "0") + return out + + +def expand( + requests: dict | list[dict], + dim: Optional[str | list[str]] = None, + exclude: list[str] = [], +) -> Iterator[dict]: + if isinstance(requests, dict): + requests = [requests] + + for request in requests: + request = copy.deepcopy(request) + # Expand all if no dimension is specified + if dim is None: + dims = [x for x in request.keys() if x not in exclude] + elif isinstance(dim, str): + dims = [dim] + else: + dims = dim + + expansion = {} + for d in dims: + coords = request.pop(d, None) + if coords is None: + continue + expansion[d] = to_list(coords) + + for vals in dict_product(expansion): + yield {**request, **vals} + + +def squeeze(reqs: list[dict], dims: list[str]) -> Iterator[dict]: + df = pd.DataFrame(reqs) + drop_dims = df.drop(dims, axis=1, errors="ignore").drop_duplicates() + for _, row in drop_dims.iterrows(): + req = row.dropna().to_dict() + condition = np.logical_and.reduce([df[k] == v for k, v in req.items()]) + cond_reqs = df.loc[condition].to_dict("records") + for dim in dims: + val = cond_reqs[0].get(dim, np.nan) + if val is None: + continue + if isinstance(val, str) or not np.isnan(val): + req[dim] = sorted(list({x[dim] for x in cond_reqs})) + yield req + + +def update_request( + base: dict | list[dict], update: dict | list[dict], method: str = "map", **kwargs +): + if isinstance(base, dict): + base = [base] + if isinstance(update, dict): + update = [update] + + if len(update) == 0: + return copy.deepcopy(base) + if len(base) == 0: + return copy.deepcopy(update) + if method == "map": + if len(base) == len(update): + combinations = zip(base, update) + else: + assert len(base) == 1 or len(update) == 1 + combinations = itertools.product(base, update) + elif method == "product": + combinations = itertools.product(base, update) + else: + raise ValueError( + f"Unknown method for combining requests: {method}. Supported methods are 'map' and 'product'" + ) + new_requests = [ + deep_update(copy.deepcopy(breq), {**ureq, **kwargs}) + for breq, ureq in combinations + ] + # Remove duplicates + deduplicated = [] + for inp in new_requests: + if inp not in deduplicated: + deduplicated.append(inp) + return deduplicated + + +def extract_mars(keys: dict, additional: list[str] = None) -> dict: + additional = additional or [] + for key, metadata_key in METADATA_KEYS.items(): + if metadata_key in keys: + keys[key] = keys.pop(metadata_key) + mars_namespace = [ + "class", + "type", + "stream", + "expver", + "model", + "levtype", + "levelist", + "param", + "date", + "year", + "month", + "hdate", + "fcmonth", + "fcperiod", + "time", + "step", + "number", + "domain", + "quantile", + "method", + "origin", + "system", + ] + return {k: v for k, v in keys.items() if (k in mars_namespace) or (k in additional)} \ No newline at end of file diff --git a/pproc-core/tests/utils/test_patch.py b/pproc-core/tests/utils/test_patch.py deleted file mode 100644 index 20689e4e..00000000 --- a/pproc-core/tests/utils/test_patch.py +++ /dev/null @@ -1,24 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -import numpy as np -import pytest -import xarray as xr -from earthkit.meteo.extreme import array as extreme - -from earthkit.workflows.plugins.pproc.utils.patch import PatchModule - - -def test_patch_extreme(): - a = xr.DataArray(np.arange(6).reshape(2, 3), dims=["x", "y"]) - with pytest.raises(AttributeError) as err: - with PatchModule(extreme, "numpy", xr): - extreme.efi(a, a, 0.0001) - - assert str(err.value) == "module 'xarray' has no attribute 'logical_or'" diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index e295ba59..a90e33e4 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -22,7 +22,15 @@ requires-python = ">=3.10" readme = "README.md" dynamic = [ "version" ] -dependencies = [] +dependencies = [ + "earthkit-data[mars,fdb]", + "earthkit-meteo", + "thermofeel", + "code-meters" + "mir-python", + "fdblibs", + "array_api_compat", +] [project.optional-dependencies] diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/io.py b/pproc-runtime/src/ppruntime/io.py similarity index 88% rename from pproc-core/src/earthkit/workflows/plugins/pproc/utils/io.py rename to pproc-runtime/src/ppruntime/io.py index dbd0335d..fd2ab5e2 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/io.py +++ b/pproc-runtime/src/ppruntime/io.py @@ -17,13 +17,6 @@ from earthkit.data.sources.file import FileSource from earthkit.data.sources.stream import StreamSource from meters import ResourceMeter -from pproc.common.io import ( - FileSetTarget, - FileTarget, - split_location, - target_from_location, - write_grib, -) # Set cache policy to "temporary" to avoid "database is locked" errors when # for wind when executing across multiple workers @@ -164,7 +157,7 @@ def retrieve_single_source(request: dict, **kwargs) -> FieldList: def retrieve(request: dict | list[dict], **kwargs): - with ResourceMeter(f"RETRIEVE {request}, {kwargs}"): + with ResourceMeter(f"retrieve {request}, {kwargs}"): if isinstance(request, dict): res = retrieve_single_source(request, **kwargs) else: @@ -175,19 +168,8 @@ def retrieve(request: dict | list[dict], **kwargs): ) return ret - -def write(data: FieldList, loc, metadata: dict | None = None): - if loc == "null:": - return - target = target_from_location(loc) - if isinstance(target, (FileTarget, FileSetTarget)): - # Allows file to be appended on each write call - target.enable_recovery() - assert len(data) == 1, f"Expected single field, received {len(data)}" - - template = data.metadata()[0] - if metadata is not None: - template = template.override(metadata) - - with ResourceMeter(f"WRITE {loc}"): - write_grib(target, template._handle, data[0].values) +def write(data: FieldList, target: dict) -> dict: + if target["name"] == "null": + return target + data.to_target(**target) + return target \ No newline at end of file diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/grib.py b/pproc-runtime/src/ppruntime/metatdata.py similarity index 100% rename from pproc-core/src/earthkit/workflows/plugins/pproc/utils/grib.py rename to pproc-runtime/src/ppruntime/metatdata.py diff --git a/pproc-runtime/src/ppruntime/stats.py b/pproc-runtime/src/ppruntime/stats.py new file mode 100644 index 00000000..0a4de6a4 --- /dev/null +++ b/pproc-runtime/src/ppruntime/stats.py @@ -0,0 +1,96 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import array_api_compat +import earthkit.meteo.solar +from earthkit.data import FieldList +from earthkit.meteo.extreme import array as extreme +from earthkit.meteo.stats import array as stats +from earthkit.workflows.backends.earthkit import ( + Metadata, + comp_str2func, + new_fieldlist, + resolve_metadata, +) +from meters import metered + +from ppruntime import metadata + + +logger = logging.getLogger(__name__) + + +@metered("threshold", out=logger.debug) +def threshold( + arr: FieldList, + threshold: dict, + *, + metadata: Metadata = None, +) -> FieldList: + xp = array_api_compat.array_namespace(arr.values) + # Find all locations where nan appears as an ensemble value + is_nan = xp.isnan(arr.values) + thesh = comp_str2func(xp, comparison)(arr.values, value) + res = xp.where(is_nan, xp.nan, thesh) + return new_fieldlist(res, arr.metadata(), resolve_metadata(metadata, arr)) + + +@metered("efi", out=logger.debug) +def efi( + clim: FieldList, + ens: FieldList, + eps: float, + *, + metadata: Metadata = None, +) -> FieldList: + res = extreme.efi(clim.values, ens.values, eps) + resolved_metadata = resolve_metadata(metadata, clim, ens) + return new_fieldlist( + res, + [ens[0].metadata()], + {**resolved_metadata, **grib.efi(clim, ens, resolved_metadata)}, + ) + + +@metered("sot", out=logger.debug) +def sot( + clim: FieldList, + ens: FieldList, + number: int, + eps: float, + *, + metadata: Metadata = None, +) -> FieldList: + res = extreme.sot(clim.values, ens.values, number, eps) + resolved_metadata = resolve_metadata(metadata, clim, ens) + return new_fieldlist( + res, + [ens[0].metadata()], + { + **resolved_metadata, + **grib.sot(clim, ens, resolved_metadata, number), + }, + ) + + +@metered("quantiles", out=logger.debug) +def quantiles( + ens: FieldList, q_number: int, total_number: int, *, metadata: Metadata = None +) -> FieldList: + quantile = q_number / total_number + res = list(stats.iter_quantiles(ens.values, [quantile], method="numpy"))[0] + resolved_metadata = resolve_metadata(metadata, ens) + return new_fieldlist( + res, + [ens[0].metadata()], + { + **resolved_metadata, + **grib.quantiles(ens, resolved_metadata, q_number, total_number), + }, + ) diff --git a/pproc-runtime/src/ppruntime/thermal_indices.py b/pproc-runtime/src/ppruntime/thermal_indices.py new file mode 100644 index 00000000..ddc29eca --- /dev/null +++ b/pproc-runtime/src/ppruntime/thermal_indices.py @@ -0,0 +1,278 @@ +from earthkit.data import FieldList +import earthkit.meteo.solar +import thermofeel +from meters import metered + +from earthkit.workflows.backends.earthkit import Metadata, resolve_metadata +from ppruntime.thermo.helpers import ( + compute_ehPa, + field_values, + find_utci_missing_values, + get_datetime, + latlon, + step_interval, + units, + validate_utci, + create_output, + create_surface_output, +) + +logger = logging.getLogger(__name__) + + +def _check_shape(fields: earthkit.data.FieldList, params: list[str]): + shape = None + for param in params: + selected = fields.sel(param=param) + if len(selected) == 0: + raise ValueError( + f"Field {param} not found in fields: \n {fields.ls(namespace='mars')}" + ) + if shape is None: + shape = selected.values.shape + assert ( + shape == selected.values.shape + ), f"Shape mismatch for {param} {shape} != {selected.values.shape}" + + +@metered("cossza", out=logger.debug) +def calc_cossza(*fields: FieldList, metadata: Metadata = None) -> FieldList: + fields = sum(fields[1:], fields[0]) + lats, lons = latlon(fields) + + basetime, validtime = get_datetime(fields) + + delta = step_interval(fields) + + dtbegin = validtime - timedelta(hours=delta) + dtend = validtime + + cossza = earthkit.meteo.solar.cos_solar_zenith_angle_integrated( + latitudes=lats, + longitudes=lons, + begin_date=dtbegin, + end_date=dtend, + integration_order=2, + ) + + return create_output( + cossza, metadata_intensity(fields)[:1], {**resolve_metadata(metadata), "paramId": "214001"} + ) + + +@metered("hmdx", out=logger.debug) +def calc_hmdx(*fields: FieldList, metadata: Metadata = None) -> FieldList: + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["2t", "2d"]) + t2m = field_values(fields, "2t") # Kelvin + td = field_values(fields, "2d") # Kelvin + + hmdx = thermofeel.calculate_humidex(t2_k=t2m, td_k=td) # Kelvin + + return create_surface_output( + hmdx, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261016"} + ) + + +@metered("rhp", out=logger.debug) +def calc_rhp(*fields: FieldList, metadata: Metadata = None) -> FieldList: + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["2t", "2d"]) + t2m = field_values(fields, "2t") # Kelvin + td = field_values(fields, "2d") # Kelvin + + rhp = thermofeel.calculate_relative_humidity_percent(t2_k=t2m, td_k=td) # % + + return create_surface_output(rhp, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "260242"}) + + +@metered("heatx", out=logger.debug) +def calc_heatx(*fields: FieldList, metadata: Metadata = None) -> FieldList: + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["2t", "2d"]) + + t2m = field_values(fields, "2t") # Kelvin + td = field_values(fields, "2d") # Kelvin + + heatx = thermofeel.calculate_heat_index_adjusted(t2_k=t2m, td_k=td) # Kelvin + + return create_surface_output( + heatx, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "260004"} + ) + + +@metered("dsrp", out=logger.debug) +def calc_dsrp(*fields: FieldList, metadata: Metadata = None): + """ + In the absence of dsrp, approximate it with fdir and cossza. + Note this introduces some amount of error as cossza approaches zero + """ + fields = sum(fields[1:], fields[0]) + + # Will use dsrp if available, otherwise approximate it + if "dsrp" in fields.indices()["param"]: + return fields.sel(param="dsrp") + + fdir = field_values(fields, "fdir") # W/m2 + cossza = field_values(fields, "cossza") + + dsrp = thermofeel.approximate_dsrp(fdir, cossza) + + return create_output(dsrp, metadata_accumulation(fields), {**resolve_metadata(metadata), "paramId": "47"}) + + +@metered("utci", out=logger.debug) +def calc_utci(*fields: FieldList, metadata: Metadata = None, validate=True): + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["2t", "2d", "10si", "mrt"]) + lats, lons = latlon(fields) + + t2m = field_values(fields, "2t") # Kelvin + t2d = field_values(fields, "2d") # Kelvin + ws = field_values(fields, "10si") # m/s + mrt = field_values(fields, "mrt") # Kelvin + + ehPa = compute_ehPa(t2m, t2d) + + utci = thermofeel.calculate_utci(t2_k=t2m, va=ws, mrt=mrt, ehPa=ehPa) # Kelvin + + for index in range(len(utci)): + missing = find_utci_missing_values( + t2m[index], + ws[index], + mrt[index], + ehPa[index], + utci[index], + print_misses, + ) + + if validate: + validate_utci(utci[index], missing, lats, lons) + + utci[index][missing] = np.nan + + return create_surface_output( + utci, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261001"} + ) + + +@metered("wbgt", out=logger.debug) +def calc_wbgt(*fields: FieldList, metadata: Metadata = None): + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["2t", "2d", "10si", "mrt"]) + t2m = field_values(fields, "2t") # Kelvin + t2d = field_values(fields, "2d") # Kelvin + ws = field_values(fields, "10si") # m/s + mrt = field_values(fields, "mrt") # Kelvin + + wbgt = thermofeel.calculate_wbgt(t2m, mrt, ws, t2d) # Kelvin + + return create_surface_output( + wbgt, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261014"} + ) + + +@metered("gt", out=logger.debug) +def calc_gt(*fields: FieldList, metadata: Metadata = None): + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["2t", "10si", "mrt"]) + t2m = field_values(fields, "2t") # Kelvin + ws = field_values(fields, "10si") # m/s + mrt = field_values(fields, "mrt") # Kelvin + + gt = thermofeel.calculate_bgt(t2m, mrt, ws) # Kelvin + + return create_surface_output( + gt, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261015"} + ) + +@metered("wbt", out=logger.debug) +def calc_wbt(*fields: FieldList, metadata: Metadata = None): + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["2t", "2r"]) + t2m = field_values(fields, "2t") # Kelvin + rhp = field_values(fields, "2r") # % + + wbt = thermofeel.calculate_wbt(t2_k=t2m, rh=rhp) # Kelvin + + return create_surface_output( + wbt, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261023"} + ) + +@metered("nefft", out=logger.debug) +def calc_nefft(*fields: FieldList, metadata: Metadata = None): + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["2t", "10si", "2r"]) + t2m = field_values(fields, "2t") # Kelvin + ws = field_values(fields, "10si") # m/s + rhp = field_values(fields, "2r") # % + + nefft = thermofeel.calculate_normal_effective_temperature( + t2m, ws, rhp + ) # Kelvin + + return create_surface_output( + nefft, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261018"} + ) + + +@metered("wcf", out=logger.debug) +def calc_wcf(*fields: FieldList, metadata: Metadata = None): + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["2t", "10si"]) + t2m = field_values(fields, "2t") # Kelvin + ws = field_values(fields, "10si") # m/s + + wcf = thermofeel.calculate_wind_chill(t2m, ws) # Kelvin + + return create_surface_output( + wcf, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "260005"} + ) + + +@metered("aptmp", out=logger.debug) +def calc_aptmp(*fields: FieldList, metadata: Metadata = None): + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["2t", "10si", "2r"]) + t2m = field_values(fields, "2t") # Kelvin + ws = field_values(fields, "10si") # m/s + rhp = field_values(fields, "2r") # % + + aptmp = thermofeel.calculate_apparent_temperature( + t2_k=t2m, va=ws, rh=rhp + ) # Kelvin + + return create_surface_output( + aptmp, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "260255"} + ) + + +@metered("mrt", out=logger.debug) +def calc_mrt(*fields: FieldList, metadata: Metadata = None): + fields = sum(fields[1:], fields[0]) + _check_shape(fields, ["ssrd", "fdir", "strd", "ssr", "dsrp", "str", "cossza"]) + cossza = field_values(fields, "cossza") + dsrp = field_values(fields, "dsrp") + + delta = step_interval(fields) + seconds_in_time_step = delta * 3600 # steps are in hours + + f = 1.0 / float(seconds_in_time_step) + + ssrd = field_values(fields, "ssrd") # W/m2 + fdir = field_values(fields, "fdir") # W/m2 + strd = field_values(fields, "strd") # W/m2 + strr = field_values(fields, "str") # W/m2 + ssr = field_values(fields, "ssr") # W/m2 + + # remove negative values from deaccumulated solar fields + for v in ssrd, fdir, strd, ssr: + v[v < 0] = 0 + + mrt = thermofeel.calculate_mean_radiant_temperature( + ssrd * f, ssr * f, dsrp * f, strd * f, fdir * f, strr * f, cossza + ) # Kelvin + + return create_surface_output( + mrt, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261002"} + ) \ No newline at end of file diff --git a/pproc/src/pproc/thermo/__init__.py b/pproc-runtime/src/ppruntime/thermo/__init__.py similarity index 100% rename from pproc/src/pproc/thermo/__init__.py rename to pproc-runtime/src/ppruntime/thermo/__init__.py diff --git a/pproc/src/pproc/thermo/helpers.py b/pproc-runtime/src/ppruntime/thermo/helpers.py similarity index 87% rename from pproc/src/pproc/thermo/helpers.py rename to pproc-runtime/src/ppruntime/thermo/helpers.py index f89b011f..d39b563d 100644 --- a/pproc/src/pproc/thermo/helpers.py +++ b/pproc-runtime/src/ppruntime/thermo/helpers.py @@ -15,9 +15,6 @@ from meters import metered from typing import Optional -from pproc.common.io import write_grib -from pproc.config.targets import Target - logger = logging.getLogger(__name__) # Constants @@ -176,19 +173,20 @@ def step_interval(fields) -> int: return delta -def write( - target: Target, - ds: "earthkit.data.FieldList | earthkit.data.core.fieldlist.Field", - metadata: Optional[dict] = None, -): - if isinstance(ds, earthkit.data.core.fieldlist.Field): - ds = [ds] - metadata = metadata or {} - for f in ds: - field_metadata = f.metadata() - updates = metadata.copy() - # Handle wrapped metadata - if hasattr(field_metadata, "extra"): - updates.update(field_metadata.extra) - message = f.metadata()._handle - write_grib(target, message, f.values, updates) +def create_output(values: np.ndarray, template: earthkit.data.Metadata, metadata: dict): + template = [x.override(**metadata) for x in template] + return earthkit.data.FieldList.from_array(values, template) + + +def create_surface_output(values: np.ndarray, template: earthkit.data.Metadata, metadata: dict): + template = [x.override(**metadata) for x in template] + template = [ + x.override( + **metadata, + typeOfFirstFixedSurface=1, + scaleFactorOfFirstFixedSurface="MISSING", + scaledValueOfFirstFixedSurface="MISSING", + ) + for x in template + ] + return earthkit.data.FieldList.from_array(values, template) \ No newline at end of file diff --git a/pproc-core/tests/utils/test_io.py b/pproc-runtime/tests/test_io.py similarity index 95% rename from pproc-core/tests/utils/test_io.py rename to pproc-runtime/tests/test_io.py index 62f72760..e9d5cc8a 100644 --- a/pproc-core/tests/utils/test_io.py +++ b/pproc-runtime/tests/test_io.py @@ -11,7 +11,7 @@ import pytest -from earthkit.workflows.plugins.pproc.utils.io import retrieve +from ppruntime.io import retrieve request = { "class": "od", diff --git a/pproc/src/pproc/common/grib_helpers.py b/pproc/src/pproc/common/grib_helpers.py index 33f1bb38..4c0d02ad 100644 --- a/pproc/src/pproc/common/grib_helpers.py +++ b/pproc/src/pproc/common/grib_helpers.py @@ -56,30 +56,3 @@ def construct_message(template_grib, metadata: dict): for key, value in arr_grib_keys.items(): out_grib.set_array(key, value) return out_grib - - -_TEMPLATE_RE = re.compile("^{([a-z_]*)}:?([a-z]*)$", re.I) -_TYPES = { - "int": int, - "str": str, - "float": float, -} - - -def fill_template_value(val: str, template_map: dict): - m = _TEMPLATE_RE.fullmatch(val) - if m is None: - return val - value, tp = m.groups() - if value not in template_map: - return val - - return template_map[value] if len(tp) == 0 else _TYPES[tp](template_map[value]) - - -def fill_template_values(metadata: dict, template_map: dict) -> dict: - metadata = metadata.copy() - for key, val in metadata.items(): - if isinstance(val, str): - metadata[key] = fill_template_value(val, template_map) - return metadata diff --git a/pproc/src/pproc/config/utils.py b/pproc/src/pproc/config/utils.py index ece5feb1..b83231a4 100644 --- a/pproc/src/pproc/config/utils.py +++ b/pproc/src/pproc/config/utils.py @@ -15,8 +15,6 @@ from pproc.common.utils import dict_product -METADATA_KEYS = {"param": "paramId", "date": "dataDate"} - def parse_vars(items): """ @@ -59,131 +57,3 @@ def validate_overrides(data: Any) -> Any: if isinstance(data, list): return parse_var_strs(data) return data - - -def deep_update(original: dict, update: dict) -> dict: - for key, value in update.items(): - if isinstance(value, dict) and isinstance(original.get(key, None), dict): - original[key] = deep_update(original[key], value) - else: - original[key] = value - return original - - -def update_request( - base: dict | list[dict], update: dict | list[dict], method: str = "map", **kwargs -): - if isinstance(base, dict): - base = [base] - if isinstance(update, dict): - update = [update] - - if len(update) == 0: - return copy.deepcopy(base) - if len(base) == 0: - return copy.deepcopy(update) - if method == "map": - if len(base) == len(update): - combinations = zip(base, update) - else: - assert len(base) == 1 or len(update) == 1 - combinations = itertools.product(base, update) - elif method == "product": - combinations = itertools.product(base, update) - else: - raise ValueError( - f"Unknown method for combining requests: {method}. Supported methods are 'map' and 'product'" - ) - new_requests = [ - deep_update(copy.deepcopy(breq), {**ureq, **kwargs}) - for breq, ureq in combinations - ] - # Remove duplicates - deduplicated = [] - for inp in new_requests: - if inp not in deduplicated: - deduplicated.append(inp) - return deduplicated - - -def to_list(value: Any) -> list[Any]: - if np.ndim(value) == 0: - return [value] - return list(value) - - -def expand( - requests: dict | list[dict], - dim: Optional[str | list[str]] = None, - exclude: list[str] = [], -) -> Iterator[dict]: - if isinstance(requests, dict): - requests = [requests] - - for request in requests: - request = copy.deepcopy(request) - # Expand all if no dimension is specified - if dim is None: - dims = [x for x in request.keys() if x not in exclude] - elif isinstance(dim, str): - dims = [dim] - else: - dims = dim - - expansion = {} - for d in dims: - coords = request.pop(d, None) - if coords is None: - continue - expansion[d] = to_list(coords) - - for vals in dict_product(expansion): - yield {**request, **vals} - - -def squeeze(reqs: list[dict], dims: list[str]) -> Iterator[dict]: - df = pd.DataFrame(reqs) - drop_dims = df.drop(dims, axis=1, errors="ignore").drop_duplicates() - for _, row in drop_dims.iterrows(): - req = row.dropna().to_dict() - condition = np.logical_and.reduce([df[k] == v for k, v in req.items()]) - cond_reqs = df.loc[condition].to_dict("records") - for dim in dims: - val = cond_reqs[0].get(dim, np.nan) - if val is None: - continue - if isinstance(val, str) or not np.isnan(val): - req[dim] = sorted(list({x[dim] for x in cond_reqs})) - yield req - - -def extract_mars(keys: dict, additional: list[str] = None) -> dict: - additional = additional or [] - for key, metadata_key in METADATA_KEYS.items(): - if metadata_key in keys: - keys[key] = keys.pop(metadata_key) - mars_namespace = [ - "class", - "type", - "stream", - "expver", - "model", - "levtype", - "levelist", - "param", - "date", - "year", - "month", - "hdate", - "fcmonth", - "fcperiod", - "time", - "step", - "number", - "domain", - "quantile", - "method", - "origin", - "system", - ] - return {k: v for k, v in keys.items() if (k in mars_namespace) or (k in additional)} diff --git a/pproc/src/pproc/schema/utils.py b/pproc/src/pproc/schema/utils.py deleted file mode 100644 index 4c3bc89a..00000000 --- a/pproc/src/pproc/schema/utils.py +++ /dev/null @@ -1,45 +0,0 @@ -import copy -from typing import Any -import numpy as np - - -VALUE_TYPES = { - "param": str, - "paramId": int, - "levelist": int, - "step": int, - "fcmonth": int, - "number": int, - "dataDate": int, - "date": str, -} - - -def validate_request(request: dict) -> dict: - """ - Format request into desired format for schema and config generation - """ - out = copy.deepcopy(request) - # Map types - for key, value in request.items(): - if isinstance(value, list) and len(value) == 1: - value = value[0] - if key in VALUE_TYPES: - value_type = VALUE_TYPES[key] - try: - value = ( - value_type(value) - if np.ndim(value) == 0 - else list(map(value_type, value)) - ) - except ValueError: - pass - out[key] = value - # Format time - if time := out.get("time", None): - if isinstance(time, list): - raise ValueError("Only single value of time supported per request") - if isinstance(time, int): - time = f"{time:02d}" - out["time"] = time.ljust(4, "0") - return out diff --git a/pproc/src/pproc/thermo/indices.py b/pproc/src/pproc/thermo/indices.py deleted file mode 100644 index b7a9e369..00000000 --- a/pproc/src/pproc/thermo/indices.py +++ /dev/null @@ -1,331 +0,0 @@ -# (C) Copyright 2021- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -from datetime import timedelta -import logging -import numpy as np -import copy -from typing import Optional - -import earthkit.data -import earthkit.meteo.solar -import thermofeel -from meters import metered - -from pproc.thermo.helpers import ( - compute_ehPa, - field_values, - find_utci_missing_values, - get_datetime, - latlon, - step_interval, - units, - validate_utci, -) - -logger = logging.getLogger(__name__) - - -def metadata_intensity(fields): - return fields.sel(param="2t").metadata() - - -def metadata_accumulation(fields): - return fields.sel(param="fdir").metadata() - - -class ComputeIndices: - def __init__(self, out_keys: Optional[dict] = None): - self.out_keys = out_keys or {} - self.results = None - - def create_output(self, values, template, **overrides): - grib_set = copy.deepcopy(self.out_keys) - grib_set.update(overrides) - template = [x.override(**grib_set) for x in template] - return earthkit.data.FieldList.from_array(values, template) - - def create_surface_output(self, values, template, **overrides): - grib_set = copy.deepcopy(self.out_keys) - grib_set.update(overrides) - template = [ - x.override( - **grib_set, - typeOfFirstFixedSurface=1, - scaleFactorOfFirstFixedSurface="MISSING", - scaledValueOfFirstFixedSurface="MISSING", - ) - for x in template - ] - return earthkit.data.FieldList.from_array(values, template) - - @metered("cossza", out=logger.debug) - def calc_cossza_int(self, fields): - - lats, lons = latlon(fields) - - basetime, validtime = get_datetime(fields) - - delta = step_interval(fields) - - dtbegin = validtime - timedelta(hours=delta) - dtend = validtime - - cossza = earthkit.meteo.solar.cos_solar_zenith_angle_integrated( - latitudes=lats, - longitudes=lons, - begin_date=dtbegin, - end_date=dtend, - integration_order=2, - ) - - return self.create_output( - cossza, metadata_intensity(fields)[:1], paramId="214001" - ) - - @metered("ws", out=logger.debug) - def calc_ws(self, fields): - if "10si" in fields.indices()["param"]: - return fields.sel(param="10si") - - u10 = field_values(fields, "10u") # m/s - v10 = field_values(fields, "10v") # m/s - - ws = np.sqrt(u10**2 + v10**2) # m/s - template = fields.sel(param="10u").metadata() - return self.create_output(ws, template, paramId="207") - - @metered("hmdx", out=logger.debug) - def calc_hmdx(self, fields): - t2m = field_values(fields, "2t") # Kelvin - td = field_values(fields, "2d") # Kelvin - - hmdx = thermofeel.calculate_humidex(t2_k=t2m, td_k=td) # Kelvin - - return self.create_surface_output( - hmdx, metadata_intensity(fields), paramId="261016" - ) - - @metered("rhp", out=logger.debug) - def calc_rhp(self, fields): - t2m = field_values(fields, "2t") # Kelvin - td = field_values(fields, "2d") # Kelvin - - rhp = thermofeel.calculate_relative_humidity_percent(t2_k=t2m, td_k=td) # % - - return self.create_output(rhp, metadata_intensity(fields), paramId="260242") - - @metered("heatx", out=logger.debug) - def calc_heatx(self, fields): - - t2m = field_values(fields, "2t") # Kelvin - td = field_values(fields, "2d") # Kelvin - - heatx = thermofeel.calculate_heat_index_adjusted(t2_k=t2m, td_k=td) # Kelvin - - return self.create_surface_output( - heatx, metadata_intensity(fields), paramId="260004" - ) - - def field_stats(self, name, values): - try: - unit = units[name] - except: - raise ValueError(f"No units specified for parameter {name}") - - logger.debug( - f"{name:<8} {unit:<6} min {np.nanmin(values):>16.6f} max {np.nanmax(values):>16.6f} " - f"avg {np.nanmean(values):>16.6f} stddev {np.nanstd(values, dtype=np.float64):>16.6f} " - f"missing {np.count_nonzero(np.isnan(values)):>8}" - ) - - @metered("dsrp", out=logger.debug) - def calc_dsrp(self, fields): - """ - In the absence of dsrp, approximate it with fdir and cossza. - Note this introduces some amount of error as cossza approaches zero - """ - # Will use dsrp if available, otherwise approximate it - if "dsrp" in fields.indices()["param"]: - return fields.sel(param="dsrp") - - fdir = field_values(fields, "fdir") # W/m2 - cossza = self.calc_field("cossza", self.calc_cossza_int, fields).to_array() - - dsrp = thermofeel.approximate_dsrp(fdir, cossza) - - return self.create_output(dsrp, metadata_accumulation(fields), paramId="47") - - def calc_field(self, name, func, fields, **kwargs): - if self.results is not None: - sel = self.results.sel(param=name) - if len(sel) != 0: - return sel - - res = func(fields, **kwargs) - - self.field_stats(name, res.to_array()) - if self.results is None: - self.results = res - else: - self.results += res - field_values(self.results, name) - - return res - - @metered("utci", out=logger.debug) - def calc_utci(self, fields, *, print_misses=True, validate=True): - - lats, lons = latlon(fields) - - t2m = field_values(fields, "2t") # Kelvin - t2d = field_values(fields, "2d") # Kelvin - - ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s - mrt = self.calc_field("mrt", self.calc_mrt, fields).to_array() # Kelvin - - ehPa = compute_ehPa(t2m, t2d) - - utci = thermofeel.calculate_utci(t2_k=t2m, va=ws, mrt=mrt, ehPa=ehPa) # Kelvin - - for index in range(len(utci)): - missing = find_utci_missing_values( - t2m[index], - ws[index], - mrt[index], - ehPa[index], - utci[index], - print_misses, - ) - - if validate: - validate_utci(utci[index], missing, lats, lons) - - utci[index][missing] = np.nan - - return self.create_surface_output( - utci, metadata_intensity(fields), paramId="261001" - ) - - @metered("wbgt", out=logger.debug) - def calc_wbgt(self, fields): - t2m = field_values(fields, "2t") # Kelvin - t2d = field_values(fields, "2d") # Kelvin - - ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s - mrt = self.calc_field("mrt", self.calc_mrt, fields).to_array() # Kelvin - - wbgt = thermofeel.calculate_wbgt(t2m, mrt, ws, t2d) # Kelvin - - return self.create_surface_output( - wbgt, metadata_intensity(fields), paramId="261014" - ) - - @metered("gt", out=logger.debug) - def calc_gt(self, fields): - t2m = field_values(fields, "2t") # Kelvin - - ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s - mrt = self.calc_field("mrt", self.calc_mrt, fields).to_array() # Kelvin - - gt = thermofeel.calculate_bgt(t2m, mrt, ws) # Kelvin - - return self.create_surface_output( - gt, metadata_intensity(fields), paramId="261015" - ) - - @metered("wbt", out=logger.debug) - def calc_wbt(self, fields): - t2m = field_values(fields, "2t") # Kelvin - - rhp = self.calc_field("2r", self.calc_rhp, fields).to_array() # % - - wbt = thermofeel.calculate_wbt(t2_k=t2m, rh=rhp) # Kelvin - - return self.create_surface_output( - wbt, metadata_intensity(fields), paramId="261023" - ) - - @metered("nefft", out=logger.debug) - def calc_nefft(self, fields): - t2m = field_values(fields, "2t") # Kelvin - ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s - rhp = self.calc_field("2r", self.calc_rhp, fields).to_array() # % - - nefft = thermofeel.calculate_normal_effective_temperature( - t2m, ws, rhp - ) # Kelvin - - return self.create_surface_output( - nefft, metadata_intensity(fields), paramId="261018" - ) - - @metered("wcf", out=logger.debug) - def calc_wcf(self, fields): - t2m = field_values(fields, "2t") # Kelvin - - ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s - - wcf = thermofeel.calculate_wind_chill(t2m, ws) # Kelvin - - return self.create_surface_output( - wcf, metadata_intensity(fields), paramId="260005" - ) - - @metered("aptmp", out=logger.debug) - def calc_aptmp(self, fields): - t2m = field_values(fields, "2t") # Kelvin - rhp = self.calc_field("2r", self.calc_rhp, fields).to_array() # % - ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s - - aptmp = thermofeel.calculate_apparent_temperature( - t2_k=t2m, va=ws, rh=rhp - ) # Kelvin - - return self.create_surface_output( - aptmp, metadata_intensity(fields), paramId="260255" - ) - - @metered("mrt", out=logger.debug) - def calc_mrt(self, fields): - - cossza = self.calc_field("cossza", self.calc_cossza_int, fields).to_array() - dsrp = self.calc_field("dsrp", self.calc_dsrp, fields).to_array() - - delta = step_interval(fields) - seconds_in_time_step = delta * 3600 # steps are in hours - - f = 1.0 / float(seconds_in_time_step) - - ssrd = field_values(fields, "ssrd") # W/m2 - fdir = field_values(fields, "fdir") # W/m2 - strd = field_values(fields, "strd") # W/m2 - strr = field_values(fields, "str") # W/m2 - ssr = field_values(fields, "ssr") # W/m2 - - self.field_stats("ssrd", ssrd) - - # remove negative values from deaccumulated solar fields - for v in ssrd, fdir, strd, ssr: - v[v < 0] = 0 - - self.field_stats("dsrp", dsrp) - self.field_stats("ssrd", ssrd) - self.field_stats("fdir", fdir) - self.field_stats("strd", strd) - self.field_stats("str", strr) - self.field_stats("ssr", ssr) - - mrt = thermofeel.calculate_mean_radiant_temperature( - ssrd * f, ssr * f, dsrp * f, strd * f, fdir * f, strr * f, cossza - ) # Kelvin - - return self.create_surface_output( - mrt, metadata_intensity(fields), paramId="261002" - ) From 04957b871fad6ff1d1cf7805b054ae0333ccc3a9 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 20 Apr 2026 07:18:38 +0000 Subject: [PATCH 06/95] Fix imports --- .gitignore | 1 + pproc-core/.gitignore | 50 +++-- .../workflows/plugins/pproc/fluent.py | 5 + pproc-core/tests/conftest.py | 21 ++ pproc-core/tests/helpers/mock.py | 28 --- .../tests/schema/schema.yaml | 0 .../tests/schema/test_config_schema.py | 2 +- .../tests/schema/test_deriver.py | 2 +- .../tests/schema/test_input_schema.py | 6 +- .../tests/schema/test_schema.py | 2 +- .../tests/schema/test_step_schema.py | 2 +- pproc-core/tests/utils/test_dicts.py | 26 +++ pproc-runtime/.gitignore | 40 ++++ pproc-runtime/pyproject.toml | 4 +- .../src/ppruntime/thermal_indices.py | 194 ++++++++---------- pproc/pyproject.toml | 13 +- pproc/src/pproc/common/accumulation.py | 3 +- .../src/pproc/common/accumulation_manager.py | 3 +- pproc/src/pproc/common/parallel.py | 3 +- pproc/src/pproc/common/utils.py | 17 -- pproc/src/pproc/config/accumulation.py | 3 +- pproc/src/pproc/config/base.py | 7 +- pproc/src/pproc/config/factory.py | 5 +- pproc/src/pproc/config/io.py | 3 +- pproc/src/pproc/config/param.py | 4 +- pproc/src/pproc/config/types.py | 7 +- pproc/src/pproc/config/utils.py | 2 +- pproc/src/pproc/config_generation.py | 2 +- pproc/src/pproc/ensms.py | 2 +- pproc/src/pproc/flight_levels.py | 3 +- pproc/src/pproc/quantiles.py | 2 +- pproc/src/pproc/wind.py | 2 +- .../tests/common/test_accumulation_manager.py | 2 +- pproc/tests/common/test_utils.py | 26 --- pproc/tests/config/test_base.py | 2 +- pproc/tests/config/test_factory.py | 6 +- pproc/tests/config/types/test_flightlevels.py | 3 +- 37 files changed, 268 insertions(+), 235 deletions(-) create mode 100644 .gitignore create mode 100644 pproc-core/tests/conftest.py delete mode 100644 pproc-core/tests/helpers/mock.py rename {pproc => pproc-core}/tests/schema/schema.yaml (100%) rename {pproc => pproc-core}/tests/schema/test_config_schema.py (98%) rename {pproc => pproc-core}/tests/schema/test_deriver.py (98%) rename {pproc => pproc-core}/tests/schema/test_input_schema.py (99%) rename {pproc => pproc-core}/tests/schema/test_schema.py (99%) rename {pproc => pproc-core}/tests/schema/test_step_schema.py (98%) create mode 100644 pproc-core/tests/utils/test_dicts.py create mode 100644 pproc-runtime/.gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..d5e4f15f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/__pycache__ \ No newline at end of file diff --git a/pproc-core/.gitignore b/pproc-core/.gitignore index d5f3cbe7..1cf1fab6 100644 --- a/pproc-core/.gitignore +++ b/pproc-core/.gitignore @@ -1,18 +1,42 @@ +*.sw[op] +.DS_Store +.idea/ + +# Byte-compiled / optimized / DLL files +__pycache__/ *.py[cod] -*.swp -**/__pycache__ -.vscode -*.egg-info -.pytest_cache -*.prof -*.idx -.mypy_cache +*$py.class + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + + +src/earthkit/workflows/plugins/pproc/_version.py -dist/* -env -build *.ipynb_checkpoints -runs docs/examples/lib -lib/ experiments \ No newline at end of file diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 72086513..375fc94d 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -19,6 +19,7 @@ class Action(fluent.Action): + # TODO: migrate to schema _THERMAL_CONFIG = { "utci": {"operation": "ppcore.thermal_indices.calc_utci", "params": ["2t", "2d", "10si", "mrt"]}, "10si": { @@ -481,6 +482,10 @@ def param_operation( return self.multiply(kwargs["value"], metadata=metadata) return self._wrapped_reduction(operation, dim, batch_size, metadata, **kwargs) + # TODO: turn this into more general param operation that scans schema to look for + # computation method of missing parameters. Or should it be that in the creation of the + # configuration returned by the schema, we list configuration for creating all required + # intermediate parameters def thermal_index( self, param: str, dim: str = "param", metadata: dict | None = None ) -> "Action": diff --git a/pproc-core/tests/conftest.py b/pproc-core/tests/conftest.py new file mode 100644 index 00000000..c40b6dd1 --- /dev/null +++ b/pproc-core/tests/conftest.py @@ -0,0 +1,21 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import os +from typing import Optional +import yaml + + +TEST_DIR = os.path.dirname(os.path.realpath(__file__)) +SCHEMA = os.path.join(TEST_DIR, "schema", "schema.yaml") + +def schema(section: Optional[str] = None) -> dict: + with open(SCHEMA, "r") as f: + schema = yaml.safe_load(f) + return schema if section is None else schema[section] diff --git a/pproc-core/tests/helpers/mock.py b/pproc-core/tests/helpers/mock.py deleted file mode 100644 index 0fabd063..00000000 --- a/pproc-core/tests/helpers/mock.py +++ /dev/null @@ -1,28 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -from earthkit.workflows.fluent import Node, Payload -from ppcascade.entry import parser - - -def mock_args(config_path: str): - test_parser = parser.basic_parser("Test", True) - return test_parser.parse_args( - ["--config", config_path, "--forecast", "fdb:fc", "--climatology", "fdb:clim"] - ) - - -class MockPayload(Payload): - def __init__(self, name: str): - super().__init__(name) - - -class MockNode(Node): - def __init__(self, name: str): - super().__init__(MockPayload(name)) diff --git a/pproc/tests/schema/schema.yaml b/pproc-core/tests/schema/schema.yaml similarity index 100% rename from pproc/tests/schema/schema.yaml rename to pproc-core/tests/schema/schema.yaml diff --git a/pproc/tests/schema/test_config_schema.py b/pproc-core/tests/schema/test_config_schema.py similarity index 98% rename from pproc/tests/schema/test_config_schema.py rename to pproc-core/tests/schema/test_config_schema.py index 90d13e94..54105e94 100644 --- a/pproc/tests/schema/test_config_schema.py +++ b/pproc-core/tests/schema/test_config_schema.py @@ -9,7 +9,7 @@ import pytest -from pproc.schema.config import ConfigSchema +from ppcore.schema.config import ConfigSchema from conftest import schema diff --git a/pproc/tests/schema/test_deriver.py b/pproc-core/tests/schema/test_deriver.py similarity index 98% rename from pproc/tests/schema/test_deriver.py rename to pproc-core/tests/schema/test_deriver.py index 46742c64..21147984 100644 --- a/pproc/tests/schema/test_deriver.py +++ b/pproc-core/tests/schema/test_deriver.py @@ -2,7 +2,7 @@ from pydantic import TypeAdapter -from pproc.schema.deriver import ForecastStepDeriver, ClimStepDeriver, ClimDateDeriver +from ppcore.schema.deriver import ForecastStepDeriver, ClimStepDeriver, ClimDateDeriver FcStepDeriver = TypeAdapter(ForecastStepDeriver) diff --git a/pproc/tests/schema/test_input_schema.py b/pproc-core/tests/schema/test_input_schema.py similarity index 99% rename from pproc/tests/schema/test_input_schema.py rename to pproc-core/tests/schema/test_input_schema.py index 24dcab30..cf65beb6 100644 --- a/pproc/tests/schema/test_input_schema.py +++ b/pproc-core/tests/schema/test_input_schema.py @@ -9,13 +9,13 @@ import pytest -from pproc.config.utils import expand, update_request -from pproc.schema.input import ( +from ppcore.utils.requests import expand, update_request +from ppcore.schema.input import ( InputSchema, ForecastConfig, ForecastInput, ) -from pproc.schema.step import StepSchema +from ppcore.schema.step import StepSchema from conftest import schema diff --git a/pproc/tests/schema/test_schema.py b/pproc-core/tests/schema/test_schema.py similarity index 99% rename from pproc/tests/schema/test_schema.py rename to pproc-core/tests/schema/test_schema.py index 93ff7f83..eecab89c 100644 --- a/pproc/tests/schema/test_schema.py +++ b/pproc-core/tests/schema/test_schema.py @@ -10,7 +10,7 @@ import pytest import os -from pproc.schema.schema import Schema +from ppcore.schema.schema import Schema from conftest import schema diff --git a/pproc/tests/schema/test_step_schema.py b/pproc-core/tests/schema/test_step_schema.py similarity index 98% rename from pproc/tests/schema/test_step_schema.py rename to pproc-core/tests/schema/test_step_schema.py index a5b6f5ac..a9b921da 100644 --- a/pproc/tests/schema/test_step_schema.py +++ b/pproc-core/tests/schema/test_step_schema.py @@ -9,7 +9,7 @@ import pytest -from pproc.schema.step import StepType, StepSchema +from ppcore.schema.step import StepType, StepSchema from conftest import schema diff --git a/pproc-core/tests/utils/test_dicts.py b/pproc-core/tests/utils/test_dicts.py new file mode 100644 index 00000000..804eb406 --- /dev/null +++ b/pproc-core/tests/utils/test_dicts.py @@ -0,0 +1,26 @@ +from ppcore.utils.dicts import dict_product + +def test_dictprod(): + assert list(dict_product({})) == [{}] + + assert list(dict_product({"x": range(3), "empty": []})) == [] + + assert list(dict_product({"foo": [1, 2, 3]})) == [ + {"foo": n} for n in [1, 2, 3] + ] + + dic = {"a": [5, 12], "b": range(3), "c": ("a", "b")} + assert list(dict_product(dic)) == [ + {"a": 5, "b": 0, "c": "a"}, + {"a": 5, "b": 0, "c": "b"}, + {"a": 5, "b": 1, "c": "a"}, + {"a": 5, "b": 1, "c": "b"}, + {"a": 5, "b": 2, "c": "a"}, + {"a": 5, "b": 2, "c": "b"}, + {"a": 12, "b": 0, "c": "a"}, + {"a": 12, "b": 0, "c": "b"}, + {"a": 12, "b": 1, "c": "a"}, + {"a": 12, "b": 1, "c": "b"}, + {"a": 12, "b": 2, "c": "a"}, + {"a": 12, "b": 2, "c": "b"}, + ] \ No newline at end of file diff --git a/pproc-runtime/.gitignore b/pproc-runtime/.gitignore new file mode 100644 index 00000000..c3f71f77 --- /dev/null +++ b/pproc-runtime/.gitignore @@ -0,0 +1,40 @@ +*.sw[op] +.DS_Store +.idea/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +tests/data + + +src/ppruntime/_version.py diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index a90e33e4..c9a4a5b1 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -23,10 +23,10 @@ readme = "README.md" dynamic = [ "version" ] dependencies = [ - "earthkit-data[mars,fdb]", + "earthkit-data[mars,fdb]==0.19.0", "earthkit-meteo", "thermofeel", - "code-meters" + "code-meters", "mir-python", "fdblibs", "array_api_compat", diff --git a/pproc-runtime/src/ppruntime/thermal_indices.py b/pproc-runtime/src/ppruntime/thermal_indices.py index ddc29eca..21524db2 100644 --- a/pproc-runtime/src/ppruntime/thermal_indices.py +++ b/pproc-runtime/src/ppruntime/thermal_indices.py @@ -6,22 +6,22 @@ from earthkit.workflows.backends.earthkit import Metadata, resolve_metadata from ppruntime.thermo.helpers import ( compute_ehPa, - field_values, find_utci_missing_values, get_datetime, latlon, step_interval, units, validate_utci, - create_output, + create_output, create_surface_output, ) logger = logging.getLogger(__name__) -def _check_shape(fields: earthkit.data.FieldList, params: list[str]): +def field_values(fields: earthkit.data.FieldList, params: list[str]): shape = None + out_values = [] for param in params: selected = fields.sel(param=param) if len(selected) == 0: @@ -33,6 +33,8 @@ def _check_shape(fields: earthkit.data.FieldList, params: list[str]): assert ( shape == selected.values.shape ), f"Shape mismatch for {param} {shape} != {selected.values.shape}" + out_values.append(selected.to_array()) + return out_values @metered("cossza", out=logger.debug) @@ -56,48 +58,45 @@ def calc_cossza(*fields: FieldList, metadata: Metadata = None) -> FieldList: ) return create_output( - cossza, metadata_intensity(fields)[:1], {**resolve_metadata(metadata), "paramId": "214001"} + cossza, + metadata_intensity(fields)[:1], + {**resolve_metadata(metadata), "paramId": "214001"}, ) @metered("hmdx", out=logger.debug) def calc_hmdx(*fields: FieldList, metadata: Metadata = None) -> FieldList: fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["2t", "2d"]) - t2m = field_values(fields, "2t") # Kelvin - td = field_values(fields, "2d") # Kelvin - - hmdx = thermofeel.calculate_humidex(t2_k=t2m, td_k=td) # Kelvin - + inputs = field_values(fields, ["2t", "2d"]) + hmdx = thermofeel.calculate_humidex(*inputs) return create_surface_output( - hmdx, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261016"} + hmdx, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "261016"}, ) @metered("rhp", out=logger.debug) def calc_rhp(*fields: FieldList, metadata: Metadata = None) -> FieldList: fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["2t", "2d"]) - t2m = field_values(fields, "2t") # Kelvin - td = field_values(fields, "2d") # Kelvin - - rhp = thermofeel.calculate_relative_humidity_percent(t2_k=t2m, td_k=td) # % - - return create_surface_output(rhp, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "260242"}) + inputs = field_values(fields, ["2t", "2d"]) + rhp = thermofeel.calculate_relative_humidity_percent(*inputs) + return create_surface_output( + rhp, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "260242"}, + ) @metered("heatx", out=logger.debug) def calc_heatx(*fields: FieldList, metadata: Metadata = None) -> FieldList: fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["2t", "2d"]) - - t2m = field_values(fields, "2t") # Kelvin - td = field_values(fields, "2d") # Kelvin - - heatx = thermofeel.calculate_heat_index_adjusted(t2_k=t2m, td_k=td) # Kelvin - + inputs = field_values(fields, ["2t", "2d"]) + heatx = thermofeel.calculate_heat_index_adjusted(*inputs) return create_surface_output( - heatx, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "260004"} + heatx, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "260004"}, ) @@ -108,111 +107,94 @@ def calc_dsrp(*fields: FieldList, metadata: Metadata = None): Note this introduces some amount of error as cossza approaches zero """ fields = sum(fields[1:], fields[0]) - - # Will use dsrp if available, otherwise approximate it - if "dsrp" in fields.indices()["param"]: - return fields.sel(param="dsrp") - - fdir = field_values(fields, "fdir") # W/m2 - cossza = field_values(fields, "cossza") - - dsrp = thermofeel.approximate_dsrp(fdir, cossza) - - return create_output(dsrp, metadata_accumulation(fields), {**resolve_metadata(metadata), "paramId": "47"}) + inputs = field_values(fields, ["fdir", "cossza"]) + dsrp = thermofeel.approximate_dsrp(*inputs) + return create_output( + dsrp, + metadata_accumulation(fields), + {**resolve_metadata(metadata), "paramId": "47"}, + ) @metered("utci", out=logger.debug) def calc_utci(*fields: FieldList, metadata: Metadata = None, validate=True): fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["2t", "2d", "10si", "mrt"]) - lats, lons = latlon(fields) + inputs = field_values(fields, ["2t", "2d", "10si", "mrt"]) - t2m = field_values(fields, "2t") # Kelvin - t2d = field_values(fields, "2d") # Kelvin - ws = field_values(fields, "10si") # m/s - mrt = field_values(fields, "mrt") # Kelvin - - ehPa = compute_ehPa(t2m, t2d) - - utci = thermofeel.calculate_utci(t2_k=t2m, va=ws, mrt=mrt, ehPa=ehPa) # Kelvin + ehPa = compute_ehPa(inputs[0], inputs[1]) + utci = thermofeel.calculate_utci( + t2_k=inputs[0], va=inputs[2], mrt=inputs[3], ehPa=ehPa + ) # Kelvin for index in range(len(utci)): missing = find_utci_missing_values( - t2m[index], - ws[index], - mrt[index], + inputs[0][index], + inputs[2][index], + inputs[3][index], ehPa[index], utci[index], - print_misses, ) if validate: + lats, lons = latlon(fields) validate_utci(utci[index], missing, lats, lons) - utci[index][missing] = np.nan return create_surface_output( - utci, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261001"} + utci, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "261001"}, ) @metered("wbgt", out=logger.debug) def calc_wbgt(*fields: FieldList, metadata: Metadata = None): fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["2t", "2d", "10si", "mrt"]) - t2m = field_values(fields, "2t") # Kelvin - t2d = field_values(fields, "2d") # Kelvin - ws = field_values(fields, "10si") # m/s - mrt = field_values(fields, "mrt") # Kelvin - - wbgt = thermofeel.calculate_wbgt(t2m, mrt, ws, t2d) # Kelvin - + inputs = field_values(fields, ["2t", "mrt", "10si", "2d"]) + wbgt = thermofeel.calculate_wbgt(*inputs) return create_surface_output( - wbgt, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261014"} + wbgt, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "261014"}, ) @metered("gt", out=logger.debug) def calc_gt(*fields: FieldList, metadata: Metadata = None): fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["2t", "10si", "mrt"]) - t2m = field_values(fields, "2t") # Kelvin - ws = field_values(fields, "10si") # m/s - mrt = field_values(fields, "mrt") # Kelvin + inputs = field_values(fields, ["2t", "mrt", "10si"]) - gt = thermofeel.calculate_bgt(t2m, mrt, ws) # Kelvin + gt = thermofeel.calculate_bgt(*inputs) return create_surface_output( - gt, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261015"} + gt, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "261015"}, ) + @metered("wbt", out=logger.debug) def calc_wbt(*fields: FieldList, metadata: Metadata = None): fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["2t", "2r"]) - t2m = field_values(fields, "2t") # Kelvin - rhp = field_values(fields, "2r") # % - - wbt = thermofeel.calculate_wbt(t2_k=t2m, rh=rhp) # Kelvin - + inputs = field_values(fields, ["2t", "2r"]) + wbt = thermofeel.calculate_wbt(*inputs) return create_surface_output( - wbt, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261023"} + wbt, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "261023"}, ) + @metered("nefft", out=logger.debug) def calc_nefft(*fields: FieldList, metadata: Metadata = None): fields = sum(fields[1:], fields[0]) _check_shape(fields, ["2t", "10si", "2r"]) - t2m = field_values(fields, "2t") # Kelvin - ws = field_values(fields, "10si") # m/s - rhp = field_values(fields, "2r") # % - - nefft = thermofeel.calculate_normal_effective_temperature( - t2m, ws, rhp - ) # Kelvin - + inputs = field_values(fields, ["2t", "10si", "2r"]) + nefft = thermofeel.calculate_normal_effective_temperature(*inputs) return create_surface_output( - nefft, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261018"} + nefft, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "261018"}, ) @@ -220,51 +202,39 @@ def calc_nefft(*fields: FieldList, metadata: Metadata = None): def calc_wcf(*fields: FieldList, metadata: Metadata = None): fields = sum(fields[1:], fields[0]) _check_shape(fields, ["2t", "10si"]) - t2m = field_values(fields, "2t") # Kelvin - ws = field_values(fields, "10si") # m/s - - wcf = thermofeel.calculate_wind_chill(t2m, ws) # Kelvin - + inputs = field_values(fields, ["2t", "10si"]) + wcf = thermofeel.calculate_wind_chill(*inputs) return create_surface_output( - wcf, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "260005"} + wcf, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "260005"}, ) @metered("aptmp", out=logger.debug) def calc_aptmp(*fields: FieldList, metadata: Metadata = None): fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["2t", "10si", "2r"]) - t2m = field_values(fields, "2t") # Kelvin - ws = field_values(fields, "10si") # m/s - rhp = field_values(fields, "2r") # % - - aptmp = thermofeel.calculate_apparent_temperature( - t2_k=t2m, va=ws, rh=rhp - ) # Kelvin - + inputs = field_values(fields, ["2t", "10si", "2r"]) + aptmp = thermofeel.calculate_apparent_temperature(*inputs) return create_surface_output( - aptmp, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "260255"} + aptmp, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "260255"}, ) @metered("mrt", out=logger.debug) def calc_mrt(*fields: FieldList, metadata: Metadata = None): fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["ssrd", "fdir", "strd", "ssr", "dsrp", "str", "cossza"]) - cossza = field_values(fields, "cossza") - dsrp = field_values(fields, "dsrp") + ssrd, ssr, dsrp, strd, fdir, strr, cossza = field_values( + fields, ["ssrd", "ssr", "dsrp", "strd", "fdir", "str", "cossza"] + ) delta = step_interval(fields) seconds_in_time_step = delta * 3600 # steps are in hours f = 1.0 / float(seconds_in_time_step) - ssrd = field_values(fields, "ssrd") # W/m2 - fdir = field_values(fields, "fdir") # W/m2 - strd = field_values(fields, "strd") # W/m2 - strr = field_values(fields, "str") # W/m2 - ssr = field_values(fields, "ssr") # W/m2 - # remove negative values from deaccumulated solar fields for v in ssrd, fdir, strd, ssr: v[v < 0] = 0 @@ -274,5 +244,7 @@ def calc_mrt(*fields: FieldList, metadata: Metadata = None): ) # Kelvin return create_surface_output( - mrt, metadata_intensity(fields), {**resolve_metadata(metadata), "paramId": "261002"} - ) \ No newline at end of file + mrt, + metadata_intensity(fields), + {**resolve_metadata(metadata), "paramId": "261002"}, + ) diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index 50c538da..66045e3b 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -22,10 +22,11 @@ dependencies = [ "earthkit-utils >= 0.2.1", "eccodes >= 1.6.1", "filelock >= 3.12.0", - "mir-python >= 0.2.0", + "mir-python", "numexpr", "numpy >= 1.21.2", "pandas >= 1.3.3", + "pproc-core", "psutil", "pydantic", "pyfdb", @@ -87,3 +88,13 @@ __version__ = "{version}" ''' local_scheme = "no-local-version" scm.git.describe_command = ['git', 'describe', '--dirty', '--tags', '--long', '--abbrev=40', '--match', '[0-9]*'] + +[tool.uv.source] +pproc-core = { workspace = true, git = https://github.com/ecmwf/pproc.git, branch = mono-repo, subdirectory = pproc-core } +pproc-runtime = { workspace = true, git = https://github.com/ecmwf/pproc.git, branch = mono-repo, subdirectory = pproc-runtime } + +[tool.uv.workspace] +members = [ + "../pproc-core", + "../pproc-runtime", +] \ No newline at end of file diff --git a/pproc/src/pproc/common/accumulation.py b/pproc/src/pproc/common/accumulation.py index b55762d6..ad173bde 100644 --- a/pproc/src/pproc/common/accumulation.py +++ b/pproc/src/pproc/common/accumulation.py @@ -19,8 +19,7 @@ from earthkit.time.calendar import MonthInYear from earthkit.time.sequence import MonthlySequence - -from pproc.common.grib_helpers import fill_template_values +from ppcore.utils.helpers import fill_template_values NumericCoord = int diff --git a/pproc/src/pproc/common/accumulation_manager.py b/pproc/src/pproc/common/accumulation_manager.py index 9e53e1ae..39eb77a8 100644 --- a/pproc/src/pproc/common/accumulation_manager.py +++ b/pproc/src/pproc/common/accumulation_manager.py @@ -11,8 +11,9 @@ import numpy as np +from ppcore.utils.dicts import dict_product + from pproc.common.accumulation import Accumulator, Coord -from pproc.common.utils import dict_product from pproc.common.steps import parse_step from pproc.config.accumulation import accumulation_factory, AccumulationConfig diff --git a/pproc/src/pproc/common/parallel.py b/pproc/src/pproc/common/parallel.py index 8d4feddf..3ca05145 100644 --- a/pproc/src/pproc/common/parallel.py +++ b/pproc/src/pproc/common/parallel.py @@ -16,9 +16,10 @@ import psutil from meters import ResourceMeter +from ppcore.utils.dicts import dict_product from pproc.common.param_requester import ParamRequester -from pproc.common.utils import delayed_map, dict_product +from pproc.common.utils import delayed_map from pproc.config.base import Parallelisation diff --git a/pproc/src/pproc/common/utils.py b/pproc/src/pproc/common/utils.py index 6589c9e8..e6c31269 100644 --- a/pproc/src/pproc/common/utils.py +++ b/pproc/src/pproc/common/utils.py @@ -18,13 +18,6 @@ NestedDict: TypeAlias = Dict[K, V | "NestedDict"] -def dict_product(dic: Dict[K, Iterable[V]]) -> Iterator[Dict[K, V]]: - keys = list(dic.keys()) - its = tuple(dic.values()) - for vals in itertools.product(*its): - yield dict(zip(keys, vals)) - - def delayed_map(delay: int, func: Callable[[T], U], it: Iterable[T]) -> Iterator[U]: sentinel = object() it = iter(it) @@ -34,13 +27,3 @@ def delayed_map(delay: int, func: Callable[[T], U], it: Iterable[T]) -> Iterator x = next(it, sentinel) if x is not sentinel: queue.append(func(x)) - - -def dict_apply(func: Callable[[V], V], dic: NestedDict) -> NestedDict: - modified_dic = dic.copy() - for k, v in modified_dic.items(): - if isinstance(v, dict): - modified_dic[k] = dict_apply(func, v) - else: - modified_dic[k] = func(v) - return modified_dic diff --git a/pproc/src/pproc/config/accumulation.py b/pproc/src/pproc/config/accumulation.py index 045e4289..28e61496 100644 --- a/pproc/src/pproc/config/accumulation.py +++ b/pproc/src/pproc/config/accumulation.py @@ -15,10 +15,11 @@ from earthkit.time.calendar import parse_date from earthkit.time.sequence import Sequence +from ppcore.utils.requests import extract_mars from pproc.common.stepseq import stepseq_ranges, stepseq_monthly from pproc.common.accumulation import convert_coords, coords_name -from pproc.config.utils import extract_mars, _get +from pproc.config.utils import _get class StepRanges(BaseModel): diff --git a/pproc/src/pproc/config/base.py b/pproc/src/pproc/config/base.py index 2225b4f7..ee37d181 100644 --- a/pproc/src/pproc/config/base.py +++ b/pproc/src/pproc/config/base.py @@ -18,15 +18,14 @@ from conflator import CLIArg, ConfigModel from pydantic import Field, field_validator, model_validator from typing_extensions import Self +from ppcore.utils.dicts import deep_update +from ppcore.utils.helpers import to_list +from ppcore.utils.requests import extract_mars, update_request from pproc.config import io from pproc.config.log import LoggingConfig from pproc.config.param import ParamConfig, partial_equality from pproc.config.utils import ( - deep_update, - extract_mars, - update_request, - to_list, _get, _set, ) diff --git a/pproc/src/pproc/config/factory.py b/pproc/src/pproc/config/factory.py index 1b030d74..42b05a8e 100644 --- a/pproc/src/pproc/config/factory.py +++ b/pproc/src/pproc/config/factory.py @@ -12,10 +12,11 @@ import numpy as np import logging +from ppcore.utils.requests import expand, squeeze +from ppcore.schema.schema import Schema + from pproc.config import types from pproc.config.base import BaseConfig -from pproc.config.utils import expand, squeeze -from pproc.schema.schema import Schema logging.getLogger("pproc").setLevel(os.environ.get("PPROC_LOG", "INFO").upper()) diff --git a/pproc/src/pproc/config/io.py b/pproc/src/pproc/config/io.py index c44dbb0a..7a9bbfe2 100644 --- a/pproc/src/pproc/config/io.py +++ b/pproc/src/pproc/config/io.py @@ -23,6 +23,7 @@ model_validator, field_validator, ) +from ppcore.utils.dicts import deep_update from pproc.config import utils from pproc.config.targets import ( @@ -139,7 +140,7 @@ def set_defaults(cls, data: Any) -> Any: def_source = data["default"] for sub in cls.names: subsec = data.setdefault(sub, {}) - data[sub] = utils.deep_update(subsec, def_source) + data[sub] = deep_update(subsec, def_source) return data diff --git a/pproc/src/pproc/config/param.py b/pproc/src/pproc/config/param.py index 392a558c..339d1c7c 100644 --- a/pproc/src/pproc/config/param.py +++ b/pproc/src/pproc/config/param.py @@ -17,12 +17,12 @@ import numpy as np import pandas as pd from pydantic import BaseModel, Field, model_validator +from ppcore.utils.dicts import deep_update +from ppcore.utils.requests import expand, extract_mars, update_request from pproc.config.preprocessing import PreprocessingConfig from pproc.config.accumulation import AccumulationConfig -from pproc.config.utils import extract_mars, deep_update from pproc.config.io import Source, Input, InputsCollection -from pproc.config.utils import update_request, expand logger = logging.getLogger(__name__) diff --git a/pproc/src/pproc/config/types.py b/pproc/src/pproc/config/types.py index ce454d03..dc7655aa 100644 --- a/pproc/src/pproc/config/types.py +++ b/pproc/src/pproc/config/types.py @@ -26,6 +26,8 @@ from conflator import CLIArg, ConfigModel from earthkit.time import DailySequence +from ppcore.utils.dicts import deep_update +from ppcore.utils.requests import expand, extract_mars, update_request, squeeze from pproc.clustereps.season import MONTH_DAYS, Season from pproc.config.base import BaseConfig, Parallelisation @@ -34,11 +36,6 @@ from pproc.config.utils import ( _set, _get, - extract_mars, - update_request, - deep_update, - expand, - squeeze, ) from pproc.config.preprocessing import Reshape, Expression from pproc.common.stepseq import steprange_to_fcmonth diff --git a/pproc/src/pproc/config/utils.py b/pproc/src/pproc/config/utils.py index b83231a4..fd541e9f 100644 --- a/pproc/src/pproc/config/utils.py +++ b/pproc/src/pproc/config/utils.py @@ -13,7 +13,7 @@ import pandas as pd import itertools -from pproc.common.utils import dict_product +from ppcore.utils.dicts import dict_product def parse_vars(items): diff --git a/pproc/src/pproc/config_generation.py b/pproc/src/pproc/config_generation.py index 69163b92..52cb4806 100644 --- a/pproc/src/pproc/config_generation.py +++ b/pproc/src/pproc/config_generation.py @@ -16,9 +16,9 @@ import yaml import json +from ppcore.schema import Schema from pproc.config.factory import ConfigFactory -from pproc.schema.schema import Schema from pproc.common import mars logging.basicConfig( diff --git a/pproc/src/pproc/ensms.py b/pproc/src/pproc/ensms.py index 0c08cd42..21807b78 100755 --- a/pproc/src/pproc/ensms.py +++ b/pproc/src/pproc/ensms.py @@ -25,6 +25,7 @@ import numpy as np from conflator import Conflator from meters import ResourceMeter +from ppcore.utils.helpers import fill_template_values from pproc.common.io import write_grib from pproc.common.accumulation import Accumulator @@ -35,7 +36,6 @@ sigterm_handler, ) from pproc.common.param_requester import ParamConfig, ParamRequester -from pproc.common.grib_helpers import fill_template_values from pproc.config.types import EnsmsConfig diff --git a/pproc/src/pproc/flight_levels.py b/pproc/src/pproc/flight_levels.py index 6afd7881..eebf333a 100644 --- a/pproc/src/pproc/flight_levels.py +++ b/pproc/src/pproc/flight_levels.py @@ -28,10 +28,11 @@ from earthkit.meteo import vertical from earthkit.data import FieldList, SimpleFieldList from meters import ResourceMeter +from ppcore.utils.dicts import dict_product from pproc.common.accumulation_manager import AccumulationManager from pproc.common.io import write_grib -from pproc.common.utils import dict_product + from pproc.common.parallel import ( parallel_processing, sigterm_handler, diff --git a/pproc/src/pproc/quantiles.py b/pproc/src/pproc/quantiles.py index 142eb7b4..5be583c1 100644 --- a/pproc/src/pproc/quantiles.py +++ b/pproc/src/pproc/quantiles.py @@ -18,10 +18,10 @@ from earthkit.meteo.stats import iter_quantiles from meters import ResourceMeter from conflator import Conflator +from ppcore.utils.helpers import fill_template_values from pproc.common.accumulation import Accumulator from pproc.common.accumulation_manager import AccumulationManager -from pproc.common.grib_helpers import fill_template_values from pproc.common.io import write_grib from pproc.common.parallel import ( create_executor, diff --git a/pproc/src/pproc/wind.py b/pproc/src/pproc/wind.py index 78b0c093..e62771bd 100755 --- a/pproc/src/pproc/wind.py +++ b/pproc/src/pproc/wind.py @@ -25,11 +25,11 @@ import eccodes from meters import ResourceMeter from conflator import Conflator +from ppcore.utils.dicts import dict_product from pproc import common from pproc.common.accumulation_manager import AccumulationManager from pproc.common.parallel import parallel_processing, sigterm_handler -from pproc.common.utils import dict_product from pproc.common.param_requester import ParamRequester from pproc.config.param import ParamConfig from pproc.config.types import WindConfig diff --git a/pproc/tests/common/test_accumulation_manager.py b/pproc/tests/common/test_accumulation_manager.py index f6a92408..313c4853 100644 --- a/pproc/tests/common/test_accumulation_manager.py +++ b/pproc/tests/common/test_accumulation_manager.py @@ -11,10 +11,10 @@ import numpy as np import pytest +from ppcore.utils.dicts import dict_product from pproc.common.accumulation import Aggregation, Mean, SimpleAccumulation from pproc.common.accumulation_manager import AccumulationManager -from pproc.common.utils import dict_product CONFIGS = { diff --git a/pproc/tests/common/test_utils.py b/pproc/tests/common/test_utils.py index 98ff7bfc..a0dc1e77 100644 --- a/pproc/tests/common/test_utils.py +++ b/pproc/tests/common/test_utils.py @@ -10,32 +10,6 @@ from pproc.common import utils -def test_dictprod(): - assert list(utils.dict_product({})) == [{}] - - assert list(utils.dict_product({"x": range(3), "empty": []})) == [] - - assert list(utils.dict_product({"foo": [1, 2, 3]})) == [ - {"foo": n} for n in [1, 2, 3] - ] - - dic = {"a": [5, 12], "b": range(3), "c": ("a", "b")} - assert list(utils.dict_product(dic)) == [ - {"a": 5, "b": 0, "c": "a"}, - {"a": 5, "b": 0, "c": "b"}, - {"a": 5, "b": 1, "c": "a"}, - {"a": 5, "b": 1, "c": "b"}, - {"a": 5, "b": 2, "c": "a"}, - {"a": 5, "b": 2, "c": "b"}, - {"a": 12, "b": 0, "c": "a"}, - {"a": 12, "b": 0, "c": "b"}, - {"a": 12, "b": 1, "c": "a"}, - {"a": 12, "b": 1, "c": "b"}, - {"a": 12, "b": 2, "c": "a"}, - {"a": 12, "b": 2, "c": "b"}, - ] - - def test_delayedmap(capsys): def myfunc(x): print(f"p {x}") diff --git a/pproc/tests/config/test_base.py b/pproc/tests/config/test_base.py index 27307331..d32e9632 100644 --- a/pproc/tests/config/test_base.py +++ b/pproc/tests/config/test_base.py @@ -13,9 +13,9 @@ import pytest import yaml from conflator import Conflator +from ppcore.utils.dicts import deep_update from pproc.config.base import BaseConfig -from pproc.config.utils import deep_update @pytest.fixture(scope="function") diff --git a/pproc/tests/config/test_factory.py b/pproc/tests/config/test_factory.py index bbb1dd88..769aaab9 100644 --- a/pproc/tests/config/test_factory.py +++ b/pproc/tests/config/test_factory.py @@ -10,9 +10,11 @@ import os import pytest -from pproc.schema.schema import Schema +from ppcore.utils.dicts import deep_update +from ppcore.utils.requests import expand, extract_mars +from ppcore.schema.schema import Schema + from pproc.config import types -from pproc.config.utils import deep_update, extract_mars, expand from pproc.config.factory import ConfigFactory from conftest import schema diff --git a/pproc/tests/config/types/test_flightlevels.py b/pproc/tests/config/types/test_flightlevels.py index fc74d982..f15e5741 100644 --- a/pproc/tests/config/types/test_flightlevels.py +++ b/pproc/tests/config/types/test_flightlevels.py @@ -2,8 +2,9 @@ import pytest from contextlib import nullcontext +from ppcore.utils.dicts import deep_update + from pproc.config.types import FlightLevelsConfig -from pproc.config.utils import deep_update @pytest.mark.parametrize( From 2de3b753b4f325b9c2bbfaa5f9483b5ade5e0e0b Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 3 Jun 2026 14:25:53 +0000 Subject: [PATCH 07/95] Update workflows --- .github/workflows/cd-ppcore.yml | 98 ++++++++++++++++++++++ .github/workflows/cd-pproc.yml | 103 ++++++++++++++++++++++++ .github/workflows/cd-ppruntime.yml | 93 +++++++++++++++++++++ .github/workflows/cd.yml | 12 --- .github/workflows/ci.yml | 125 +++++++++++++++++++++++++++++ .github/workflows/test-pypi.yml | 11 --- pproc-runtime/pyproject.toml | 4 +- pproc/pyproject.toml | 1 - pproc/requirements.txt | 21 ----- 9 files changed, 422 insertions(+), 46 deletions(-) create mode 100644 .github/workflows/cd-ppcore.yml create mode 100644 .github/workflows/cd-pproc.yml create mode 100644 .github/workflows/cd-ppruntime.yml delete mode 100644 .github/workflows/cd.yml create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/test-pypi.yml delete mode 100644 pproc/requirements.txt diff --git a/.github/workflows/cd-ppcore.yml b/.github/workflows/cd-ppcore.yml new file mode 100644 index 00000000..6680d85b --- /dev/null +++ b/.github/workflows/cd-ppcore.yml @@ -0,0 +1,98 @@ +name: Publish pproc-core to PyPI or TestPyPI + +on: + workflow_dispatch: + inputs: + tag: + description: 'Release tag X.Y.Z' + required: true + type: string + environment: + description: 'Publish to' + required: true + type: choice + options: + - testpypi + - pypi + default: testpypi + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + python_version: ["3.11", "3.12", "3.13"] + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python_version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + cd pproc-core + pip install -e . + pip install pytest + + - name: Run tests + run: | + cd pproc-core + pytest tests/ -v + + publish: + needs: test + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + python_version: ["3.11", "3.12", "3.13"] + permissions: + id-token: write + contents: read + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python_version }} + + - name: Install build tools + run: python -m pip install --upgrade build twine + + - name: Build package + run: | + cd pproc-core + python -m build + + - name: Check package + run: | + cd pproc-core + twine check dist/* + + - run: | + cd pproc-core + python -m pip install --upgrade build twine + python -m build + twine check dist/* + if [ "${{ inputs.environment }}" = "testpypi" ] ; then + TARGET="--repository testpypi" + export TWINE_PASSWORD="$TWINE_PASSWORD_TEST" + else + TARGET="" + export TWINE_PASSWORD="$TWINE_PASSWORD_PROD" + fi + twine upload $TARGET --verbose --skip-existing dist/*whl + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD_PROD: ${{ secrets.PYPI_API_TOKEN }} + TWINE_PASSWORD_TEST: ${{ secrets.PYPI_TEST_API_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/cd-pproc.yml b/.github/workflows/cd-pproc.yml new file mode 100644 index 00000000..ade003b7 --- /dev/null +++ b/.github/workflows/cd-pproc.yml @@ -0,0 +1,103 @@ +name: Publish pproc to PyPI or TestPyPI + +on: + workflow_dispatch: + inputs: + tag: + description: 'Release tag X.Y.Z' + required: true + type: string + environment: + description: 'Publish to' + required: true + type: choice + options: + - testpypi + - pypi + default: testpypi + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + python_version: ["3.11", "3.12", "3.13"] + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python_version }} + + - name: Install pproc-runtime + run: | + python -m pip install --upgrade pip + cd pproc-runtime + pip install -e . + + - name: Install pproc-core + run: | + cd pproc-core + pip install -e . + + - name: Install pproc dependencies + run: | + cd pproc + pip install -e . + pip install pytest + + - name: Run tests + run: | + cd pproc + pytest tests/ -v + + publish: + needs: test + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + python_version: ["3.11", "3.12", "3.13"] + permissions: + id-token: write + contents: read + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python_version }} + + - name: Install build tools + run: python -m pip install --upgrade build twine + + - name: Build package + run: | + cd pproc + python -m build + + - name: Check package + run: | + cd pproc + twine check dist/* + + - name: Publish to Test PyPI + if: inputs.environment == 'testpypi' + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: pproc/dist/ + repository-url: https://test.pypi.org/legacy/ + + - name: Publish to PyPI + if: inputs.environment == 'pypi' + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: pproc/dist/ \ No newline at end of file diff --git a/.github/workflows/cd-ppruntime.yml b/.github/workflows/cd-ppruntime.yml new file mode 100644 index 00000000..c9c5eb4a --- /dev/null +++ b/.github/workflows/cd-ppruntime.yml @@ -0,0 +1,93 @@ +name: Publish pproc-runtime to PyPI or TestPyPI + +on: + workflow_dispatch: + inputs: + tag: + description: 'Release tag X.Y.Z' + required: true + type: string + environment: + description: 'Publish to' + required: true + type: choice + options: + - testpypi + - pypi + default: testpypi + +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + python_version: ["3.11", "3.12", "3.13"] + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python_version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + cd pproc-runtime + pip install -e . + pip install pytest + + - name: Run tests + run: | + cd pproc-runtime + pytest tests/ -v + + publish: + needs: test + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + python_version: ["3.11", "3.12", "3.13"] + permissions: + id-token: write + contents: read + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python_version }} + + - name: Install build tools + run: python -m pip install --upgrade build twine + + - name: Build package + run: | + cd pproc-runtime + python -m build + + - name: Check package + run: | + cd pproc-runtime + twine check dist/* + + - name: Publish to Test PyPI + if: inputs.environment == 'testpypi' + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: pproc-runtime/dist/ + repository-url: https://test.pypi.org/legacy/ + + - name: Publish to PyPI + if: inputs.environment == 'pypi' + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: pproc-runtime/dist/ \ No newline at end of file diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml deleted file mode 100644 index cf58fe88..00000000 --- a/.github/workflows/cd.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: cd - -on: - push: - tags: - - '[0-9]+.[0-9]+.[0-9]+' # NOTE there are other tags for generating "unstable modules", those should *not* trigger pypi upload - -jobs: - - pypi: - uses: ecmwf/reusable-workflows/.github/workflows/cd-pypi.yml@v2 - secrets: inherit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..a8e5adb6 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,125 @@ +name: ci + +on: + push: + branches: [ main, develop ] + pull_request: + branches: [ main, develop ] + +jobs: + quality_assurance: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: pip install ruff + - run: ruff check + ppruntime_test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.11', '3.12', '3.13'] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Cache pip dependencies + uses: actions/cache@v3 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt', '**/pyproject.toml') }} + restore-keys: | + ${{ runner.os }}-pip- + + - name: Install pproc-runtime + run: | + cd pproc-runtime + pip install -e . + + - name: Run pproc-runtime tests + run: | + cd pproc-runtime + if [ -d "tests" ]; then + python -m pytest tests/ -v + fi + ppcore_test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.11', '3.12', '3.13'] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Cache pip dependencies + uses: actions/cache@v3 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt', '**/pyproject.toml') }} + restore-keys: | + ${{ runner.os }}-pip- + + - name: Install pproc-core + run: | + cd pproc-core + pip install -e . + + - name: Run pproc-core tests + run: | + cd pproc-core + if [ -d "tests" ]; then + python -m pytest tests/ -v + fi + pproc_test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.11', '3.12', '3.13'] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Cache pip dependencies + uses: actions/cache@v3 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt', '**/pyproject.toml') }} + restore-keys: | + ${{ runner.os }}-pip- + + - name: Install pproc-runtime + run: | + cd pproc-runtime + pip install -e . + + - name: Install pproc-core + run: | + cd pproc-core + pip install -e . + + - name: Install pproc + run: | + cd pproc + pip install -e . + pip install -r requirements.txt + + - name: Run pproc tests + run: | + cd pproc + if [ -d "tests" ]; then + python -m pytest tests/ -v + fi \ No newline at end of file diff --git a/.github/workflows/test-pypi.yml b/.github/workflows/test-pypi.yml deleted file mode 100644 index 4a4e8a22..00000000 --- a/.github/workflows/test-pypi.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: test cd - -on: - workflow_dispatch: ~ - -jobs: - deploy: - uses: ecmwf/reusable-workflows/.github/workflows/cd-pypi.yml@v2 - secrets: inherit - with: - testpypi: true diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index c9a4a5b1..fdd88298 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -23,12 +23,14 @@ readme = "README.md" dynamic = [ "version" ] dependencies = [ - "earthkit-data[mars,fdb]==0.19.0", + "earthkit-data[mars,fdb]", "earthkit-meteo", "thermofeel", "code-meters", + "eccodes", "mir-python", "fdblibs", + "numpy", "array_api_compat", ] diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index 66045e3b..fd157b76 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -22,7 +22,6 @@ dependencies = [ "earthkit-utils >= 0.2.1", "eccodes >= 1.6.1", "filelock >= 3.12.0", - "mir-python", "numexpr", "numpy >= 1.21.2", "pandas >= 1.3.3", diff --git a/pproc/requirements.txt b/pproc/requirements.txt deleted file mode 100644 index 6f70b2b9..00000000 --- a/pproc/requirements.txt +++ /dev/null @@ -1,21 +0,0 @@ -code-meters >= 0.0.3 -conflator >= 0.1.7 -earthkit-data >= 0.19.0 -earthkit-meteo >= 0.6.1 -earthkit-time >= 0.1.3 -earthkit-utils >= 0.2.1 -eccodes @ git+ssh://git@github.com/ecmwf/eccodes-python.git@develop -filelock >= 3.12.0 -mir-python @ git+ssh://git@github.com/ecmwf/mir.git@develop#subdirectory=python/mir -numexpr -numpy >= 1.21.2 -pandas >= 1.3.3 -psutil -pydantic -pyfdb @ git+ssh://git@github.com/ecmwf/pyfdb.git@develop -pyyaml -requests -scikit-learn -scipy >= 1.8.0 -thermofeel >= 2.1.0 -xarray \ No newline at end of file From 86f9eeb72fff475bbe867b521d27be0840ae4f5d Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 8 Jun 2026 16:15:56 +0000 Subject: [PATCH 08/95] Fix linting and tests in pproc-core and pproc-runtime --- .github/workflows/cd-ppcore.yml | 20 +- .github/workflows/cd-pproc.yml | 28 +- .github/workflows/cd-ppruntime.yml | 24 +- .github/workflows/ci.yml | 89 +- .github/workflows/sync.yml | 10 +- .pre-commit-config.yaml | 46 + pproc-core/.gitignore | 2 +- pproc-core/.pre-commit-config.yaml | 78 - pproc-core/LICENSE | 2 +- pproc-core/README.md | 2 +- pproc-core/pyproject.toml | 54 +- pproc-core/setup.py | 4 +- .../plugins/pproc/config/__init__.py | 88 + .../workflows/plugins/pproc/config/anomaly.py | 68 + .../plugins/pproc/config/ensemble.py | 43 + .../workflows/plugins/pproc/config/extreme.py | 58 + .../workflows/plugins/pproc/fluent.py | 141 +- .../workflows/plugins/pproc/products.py | 14 +- .../workflows/plugins/pproc/templates.py | 204 +- .../workflows/plugins/pproc/utils/metadata.py | 1 - pproc-core/src/ppcore/config/preprocessing.py | 29 +- pproc-core/src/ppcore/config/threshold.py | 111 + pproc-core/src/ppcore/schema/base.py | 14 +- pproc-core/src/ppcore/schema/config.py | 12 +- pproc-core/src/ppcore/schema/deriver.py | 23 +- pproc-core/src/ppcore/schema/filters.py | 2 +- pproc-core/src/ppcore/schema/input.py | 57 +- pproc-core/src/ppcore/schema/schema.py | 11 +- pproc-core/src/ppcore/schema/step.py | 51 +- pproc-core/src/ppcore/utils/dicts.py | 13 +- pproc-core/src/ppcore/utils/helpers.py | 5 +- pproc-core/src/ppcore/utils/requests.py | 15 +- pproc-core/src/ppcore/utils/stepseq.py | 75 + pproc-core/tests/conftest.py | 5 +- .../{ => ppcore}/schema/test_config_schema.py | 11 +- .../tests/{ => ppcore}/schema/test_deriver.py | 5 +- .../{ => ppcore}/schema/test_input_schema.py | 113 +- .../tests/{ => ppcore}/schema/test_schema.py | 70 +- .../{ => ppcore}/schema/test_step_schema.py | 6 +- .../tests/{ => ppcore}/utils/test_dicts.py | 7 +- pproc-core/tests/schema.yaml | 4794 ++++++++++++++--- pproc-core/tests/schema/schema.yaml | 4462 --------------- .../{ => workflows}/templates/ensms.yaml | 2 +- .../{ => workflows}/templates/extreme.yaml | 2 +- .../tests/{ => workflows}/templates/prob.yaml | 2 +- .../{ => workflows}/templates/quantiles.yaml | 0 .../tests/{ => workflows}/templates/t850.yaml | 2 +- .../tests/{ => workflows}/templates/wind.yaml | 2 +- .../tests/{ => workflows}/test_fluent.py | 27 +- .../tests/{ => workflows}/test_products.py | 19 +- .../tests/{ => workflows}/test_templates.py | 47 +- pproc-core/uv.lock | 2926 ++++++++++ pproc-runtime/LICENSE | 2 +- pproc-runtime/README.md | 2 +- pproc-runtime/pyproject.toml | 60 +- pproc-runtime/src/ppruntime/io.py | 56 +- .../ppruntime/{metatdata.py => metadata.py} | 37 +- pproc-runtime/src/ppruntime/stats.py | 106 +- .../src/ppruntime/thermal_indices.py | 132 +- .../src/ppruntime/thermo/__init__.py | 1 - pproc-runtime/src/ppruntime/thermo/helpers.py | 18 +- pproc-runtime/tests/test_io.py | 20 +- pproc-runtime/uv.lock | 2394 ++++++++ 63 files changed, 10489 insertions(+), 6235 deletions(-) create mode 100644 .pre-commit-config.yaml delete mode 100644 pproc-core/.pre-commit-config.yaml create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/config/__init__.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/config/anomaly.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/config/ensemble.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/config/extreme.py create mode 100644 pproc-core/src/ppcore/config/threshold.py create mode 100644 pproc-core/src/ppcore/utils/stepseq.py rename pproc-core/tests/{ => ppcore}/schema/test_config_schema.py (90%) rename pproc-core/tests/{ => ppcore}/schema/test_deriver.py (98%) rename pproc-core/tests/{ => ppcore}/schema/test_input_schema.py (85%) rename pproc-core/tests/{ => ppcore}/schema/test_schema.py (91%) rename pproc-core/tests/{ => ppcore}/schema/test_step_schema.py (97%) rename pproc-core/tests/{ => ppcore}/utils/test_dicts.py (87%) delete mode 100644 pproc-core/tests/schema/schema.yaml rename pproc-core/tests/{ => workflows}/templates/ensms.yaml (99%) rename pproc-core/tests/{ => workflows}/templates/extreme.yaml (99%) rename pproc-core/tests/{ => workflows}/templates/prob.yaml (99%) rename pproc-core/tests/{ => workflows}/templates/quantiles.yaml (100%) rename pproc-core/tests/{ => workflows}/templates/t850.yaml (99%) rename pproc-core/tests/{ => workflows}/templates/wind.yaml (99%) rename pproc-core/tests/{ => workflows}/test_fluent.py (71%) rename pproc-core/tests/{ => workflows}/test_products.py (54%) rename pproc-core/tests/{ => workflows}/test_templates.py (64%) create mode 100644 pproc-core/uv.lock rename pproc-runtime/src/ppruntime/{metatdata.py => metadata.py} (86%) create mode 100644 pproc-runtime/uv.lock diff --git a/.github/workflows/cd-ppcore.yml b/.github/workflows/cd-ppcore.yml index 6680d85b..f87719e5 100644 --- a/.github/workflows/cd-ppcore.yml +++ b/.github/workflows/cd-ppcore.yml @@ -27,19 +27,19 @@ jobs: - uses: actions/checkout@v4 with: ref: ${{ inputs.tag }} - + - name: Set up Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python_version }} - + - name: Install dependencies run: | python -m pip install --upgrade pip cd pproc-core pip install -e . - pip install pytest - + pip install pytest + - name: Run tests run: | cd pproc-core @@ -55,25 +55,25 @@ jobs: permissions: id-token: write contents: read - + steps: - uses: actions/checkout@v4 with: ref: ${{ inputs.tag }} - + - name: Set up Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python_version }} - + - name: Install build tools run: python -m pip install --upgrade build twine - + - name: Build package run: | cd pproc-core python -m build - + - name: Check package run: | cd pproc-core @@ -95,4 +95,4 @@ jobs: env: TWINE_USERNAME: __token__ TWINE_PASSWORD_PROD: ${{ secrets.PYPI_API_TOKEN }} - TWINE_PASSWORD_TEST: ${{ secrets.PYPI_TEST_API_TOKEN }} \ No newline at end of file + TWINE_PASSWORD_TEST: ${{ secrets.PYPI_TEST_API_TOKEN }} diff --git a/.github/workflows/cd-pproc.yml b/.github/workflows/cd-pproc.yml index ade003b7..346bd943 100644 --- a/.github/workflows/cd-pproc.yml +++ b/.github/workflows/cd-pproc.yml @@ -27,29 +27,29 @@ jobs: - uses: actions/checkout@v4 with: ref: ${{ inputs.tag }} - + - name: Set up Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python_version }} - + - name: Install pproc-runtime run: | python -m pip install --upgrade pip cd pproc-runtime pip install -e . - + - name: Install pproc-core run: | cd pproc-core pip install -e . - + - name: Install pproc dependencies run: | cd pproc pip install -e . - pip install pytest - + pip install pytest + - name: Run tests run: | cd pproc @@ -65,39 +65,39 @@ jobs: permissions: id-token: write contents: read - + steps: - uses: actions/checkout@v4 with: ref: ${{ inputs.tag }} - + - name: Set up Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python_version }} - + - name: Install build tools run: python -m pip install --upgrade build twine - + - name: Build package run: | cd pproc python -m build - + - name: Check package run: | cd pproc twine check dist/* - + - name: Publish to Test PyPI if: inputs.environment == 'testpypi' uses: pypa/gh-action-pypi-publish@release/v1 with: packages-dir: pproc/dist/ repository-url: https://test.pypi.org/legacy/ - + - name: Publish to PyPI if: inputs.environment == 'pypi' uses: pypa/gh-action-pypi-publish@release/v1 with: - packages-dir: pproc/dist/ \ No newline at end of file + packages-dir: pproc/dist/ diff --git a/.github/workflows/cd-ppruntime.yml b/.github/workflows/cd-ppruntime.yml index c9c5eb4a..19d823aa 100644 --- a/.github/workflows/cd-ppruntime.yml +++ b/.github/workflows/cd-ppruntime.yml @@ -27,19 +27,19 @@ jobs: - uses: actions/checkout@v4 with: ref: ${{ inputs.tag }} - + - name: Set up Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python_version }} - + - name: Install dependencies run: | python -m pip install --upgrade pip cd pproc-runtime pip install -e . - pip install pytest - + pip install pytest + - name: Run tests run: | cd pproc-runtime @@ -55,39 +55,39 @@ jobs: permissions: id-token: write contents: read - + steps: - uses: actions/checkout@v4 with: ref: ${{ inputs.tag }} - + - name: Set up Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python_version }} - + - name: Install build tools run: python -m pip install --upgrade build twine - + - name: Build package run: | cd pproc-runtime python -m build - + - name: Check package run: | cd pproc-runtime twine check dist/* - + - name: Publish to Test PyPI if: inputs.environment == 'testpypi' uses: pypa/gh-action-pypi-publish@release/v1 with: packages-dir: pproc-runtime/dist/ repository-url: https://test.pypi.org/legacy/ - + - name: Publish to PyPI if: inputs.environment == 'pypi' uses: pypa/gh-action-pypi-publish@release/v1 with: - packages-dir: pproc-runtime/dist/ \ No newline at end of file + packages-dir: pproc-runtime/dist/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a8e5adb6..70634600 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,110 +16,65 @@ jobs: ppruntime_test: runs-on: ubuntu-latest strategy: + fail-fast: true matrix: python-version: ['3.11', '3.12', '3.13'] - steps: - uses: actions/checkout@v4 - + - uses: astral-sh/setup-uv@v7 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - - name: Cache pip dependencies - uses: actions/cache@v3 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt', '**/pyproject.toml') }} - restore-keys: | - ${{ runner.os }}-pip- - - - name: Install pproc-runtime - run: | - cd pproc-runtime - pip install -e . - - - name: Run pproc-runtime tests + - name: Run checks and tests run: | cd pproc-runtime + export UV_FROZEN=1 + uv sync --prerelease allow --python "${{ matrix.python_version }}" --all-packages + uv run --prerelease allow prek --directory . --config ../.pre-commit-config.yaml + uv run --prerelease allow ty check if [ -d "tests" ]; then - python -m pytest tests/ -v + uv run --prerelease allow -m pytest tests/ -v fi + ppcore_test: runs-on: ubuntu-latest strategy: + fail-fast: true matrix: python-version: ['3.11', '3.12', '3.13'] - steps: - uses: actions/checkout@v4 - + - uses: astral-sh/setup-uv@v7 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - - name: Cache pip dependencies - uses: actions/cache@v3 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt', '**/pyproject.toml') }} - restore-keys: | - ${{ runner.os }}-pip- - - - name: Install pproc-core - run: | - cd pproc-core - pip install -e . - - - name: Run pproc-core tests + - name: Run checks and tests run: | cd pproc-core + export UV_FROZEN=1 + uv sync --python "${{ matrix.python_version }}" --all-packages + uv run prek --directory . --config ../.pre-commit-config.yaml if [ -d "tests" ]; then - python -m pytest tests/ -v + uv run -m pytest tests/ -v fi + pproc_test: runs-on: ubuntu-latest strategy: + fail-fast: true matrix: python-version: ['3.11', '3.12', '3.13'] - + steps: - uses: actions/checkout@v4 - + - uses: astral-sh/setup-uv@v7 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - - name: Cache pip dependencies - uses: actions/cache@v3 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt', '**/pyproject.toml') }} - restore-keys: | - ${{ runner.os }}-pip- - - - name: Install pproc-runtime - run: | - cd pproc-runtime - pip install -e . - - - name: Install pproc-core - run: | - cd pproc-core - pip install -e . - - - name: Install pproc - run: | - cd pproc - pip install -e . - pip install -r requirements.txt - - name: Run pproc tests run: | cd pproc if [ -d "tests" ]; then - python -m pytest tests/ -v - fi \ No newline at end of file + uv run --active --locked --prerelease allow --with pytest -m tests/ -v + fi diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index fc06d5d9..3597c7bc 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -1,20 +1,20 @@ name: sync - + # Controls when the workflow will run on: - + # Trigger the workflow on all pushes push: branches: - '**' tags: - '**' - + # Trigger the workflow when a branch or tag is deleted delete: ~ - + jobs: - + # Calls a reusable CI workflow to sync the current with a remote repository. # It will correctly handle addition of any new and removal of existing Git objects. sync: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..7d556f8e --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,46 @@ +default_language_version: + python: python3 +default_stages: + - commit + - push +repos: +# Empty notebookds +- repo: local + hooks: + - id: clear-notebooks-output + name: clear-notebooks-output + files: tools/.*\.ipynb$ + stages: [pre-commit] + language: python + entry: jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace + additional_dependencies: [jupyter] +- repo: https://github.com/charliermarsh/ruff-pre-commit + rev: v0.5.6 + hooks: + - id: ruff + args: [--fix] + - id: ruff-format +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: detect-private-key + - id: check-ast + - id: end-of-file-fixer + - id: mixed-line-ending + args: [--fix=lf] + - id: trailing-whitespace + - id: check-case-conflict +- repo: local + hooks: + - id: forbid-to-commit + name: Don't commit rej files + entry: | + Cannot commit .rej files. These indicate merge conflicts that + arise during automated template updates. + Fix the merge conflicts manually and remove the .rej files. + language: fail + files: '.*\.rej$' +- repo: https://github.com/tox-dev/pyproject-fmt + rev: "v2.5.0" + hooks: + - id: pyproject-fmt \ No newline at end of file diff --git a/pproc-core/.gitignore b/pproc-core/.gitignore index 1cf1fab6..b3c1c591 100644 --- a/pproc-core/.gitignore +++ b/pproc-core/.gitignore @@ -39,4 +39,4 @@ src/earthkit/workflows/plugins/pproc/_version.py *.ipynb_checkpoints docs/examples/lib -experiments \ No newline at end of file +experiments diff --git a/pproc-core/.pre-commit-config.yaml b/pproc-core/.pre-commit-config.yaml deleted file mode 100644 index 9eadf0c8..00000000 --- a/pproc-core/.pre-commit-config.yaml +++ /dev/null @@ -1,78 +0,0 @@ -repos: -# Empty notebookds -- repo: local - hooks: - - id: clear-notebooks-output - name: clear-notebooks-output - files: tools/.*\.ipynb$ - stages: [pre-commit] - language: python - entry: jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace - additional_dependencies: [jupyter] -- repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 - hooks: - - id: check-yaml # Check YAML files for syntax errors only - args: [--unsafe, --allow-multiple-documents] - - id: debug-statements # Check for debugger imports and py37+ breakpoint() - - id: end-of-file-fixer # Ensure files end in a newline - - id: trailing-whitespace # Trailing whitespace checker - - id: no-commit-to-branch # Prevent committing to main / master - - id: check-added-large-files # Check for large files added to git - - id: check-merge-conflict # Check for files that contain merge conflict -- repo: https://github.com/pre-commit/pygrep-hooks - rev: v1.10.0 # Use the ref you want to point at - hooks: - - id: python-use-type-annotations # Check for missing type annotations - - id: python-check-blanket-noqa # Check for # noqa: all - - id: python-no-log-warn # Check for log.warn -- repo: https://github.com/psf/black-pre-commit-mirror - rev: 24.10.0 - hooks: - - id: black - args: [--line-length=120] -- repo: https://github.com/pycqa/isort - rev: 5.13.2 - hooks: - - id: isort - args: - - -l 120 - - --force-single-line-imports - - --profile black -- repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.8.1 - hooks: - - id: ruff - args: - - --line-length=120 - - --fix - - --exit-non-zero-on-fix - - --preview - - --exclude=docs/**/*_.py -- repo: https://github.com/sphinx-contrib/sphinx-lint - rev: v1.0.0 - hooks: - - id: sphinx-lint -# For now, we use it. But it does not support a lot of sphinx features -- repo: https://github.com/dzhu/rstfmt - rev: v0.0.14 - hooks: - - id: rstfmt - exclude: 'cli/.*' # Because we use argparse -- repo: https://github.com/tox-dev/pyproject-fmt - rev: "v2.5.0" - hooks: - - id: pyproject-fmt -- repo: https://github.com/jshwi/docsig # Check docstrings against function sig - rev: v0.65.0 - hooks: - - id: docsig - args: - - --ignore-no-params # Allow docstrings without parameters - - --check-dunders # Check dunder methods - - --check-overridden # Check overridden methods - - --check-protected # Check protected methods - - --check-class # Check class docstrings - - --disable=E113 # Disable empty docstrings -ci: - autoupdate_schedule: monthly \ No newline at end of file diff --git a/pproc-core/LICENSE b/pproc-core/LICENSE index 74a60543..32d3e94a 100644 --- a/pproc-core/LICENSE +++ b/pproc-core/LICENSE @@ -198,4 +198,4 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file + limitations under the License. diff --git a/pproc-core/README.md b/pproc-core/README.md index 11b146eb..5f129fa2 100644 --- a/pproc-core/README.md +++ b/pproc-core/README.md @@ -31,4 +31,4 @@ The workflows defined in this plugin depend on PProc. Please follow the instruct pip install git+https://github.com/ecmwf/earthkit-workflows-pproc.git ``` -For development, you can use `pip install -e .` +For development, you can use `pip install -e .` diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 4707cd89..f45e9f42 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -7,41 +7,52 @@ # nor does it submit to any jurisdiction. [build-system] -requires = ["setuptools>=65", "setuptools_scm[toml]>=6.2"] build-backend = "setuptools.build_meta" +requires = [ "setuptools>=65", "setuptools-scm[toml]>=6.2" ] + [project] name = "pproc-core" description = "An earthkit-workflows interface to PProc" +readme = "README.md" license = "Apache-2.0" -license-files = ["LICENSE"] +license-files = [ "LICENSE" ] authors = [ { name = "European Centre for Medium-Range Weather Forecasts (ECMWF)", email = "software.support@ecmwf.int" }, ] requires-python = ">=3.10" -readme = "README.md" +classifiers = [ + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", +] dynamic = [ "version" ] dependencies = [ - "code-meters", - "earthkit-workflows", - "earthkit-time", - "numpy", - "pandas", + "code-meters", + "earthkit-time", + "earthkit-workflows", + "numpy", + "pandas", + "pydantic", ] - -[project.optional-dependencies] -tests = ["pytest"] -lint = ["black", "isort", "flake8"] - -[tool.setuptools.packages.find] -where = ["src"] +[dependency-groups] +dev = [ + "prek>=0.4.4", + "pytest>=9.0.3", + "ty>=0.0.43", +] [tool.setuptools] include-package-data = true zip-safe = false +[tool.setuptools.packages.find] +where = [ "src" ] + [tool.setuptools_scm] write_to = "src/earthkit/workflows/plugins/pproc/_version.py" write_to_template = '''# Do not change! Do not track in version control! @@ -49,14 +60,9 @@ __version__ = "{version}" ''' local_scheme = "no-local-version" +[tool.ruff] +lint.ignore = [ "E722", "E731", "E741" ] + [tool.pytest.ini_options] log_cli = true -log_cli_level = "DEBUG" -testpaths = ["tests/"] -addopts = "-n8" - -[tool.isort] -profile = "black" - -[tool.ruff.lint] -ignore = ["E722", "E731", "E741"] +testpaths = [ "tests/" ] diff --git a/pproc-core/setup.py b/pproc-core/setup.py index ee4e3b85..60684932 100644 --- a/pproc-core/setup.py +++ b/pproc-core/setup.py @@ -1,3 +1,3 @@ -from setuptools import setup +from setuptools import setup -setup() \ No newline at end of file +setup() diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/__init__.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/__init__.py new file mode 100644 index 00000000..afa5cefa --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/__init__.py @@ -0,0 +1,88 @@ +from typing import Optional +from ppcore.config.preprocessing import PreprocessingConfig +from .ensemble import EnsembleConfig +from .extreme import ExtremeConfig +from .anomaly import AnomalyConfig + +ENTRYPOINT_TO_CONFIG = { + "pproc-ensms": "ensemble", + "pproc-quantiles": "ensemble", + "pproc-probabilities": "ensemble", + "pproc-accumulate": "ensemble", + "pproc-extreme": "extreme", +} + +CONFIGS = { + "ensemble": EnsembleConfig, + "extreme": ExtremeConfig, + "anomaly": AnomalyConfig, +} + + +def _translate_accum_op(accum: dict) -> str: + OPS = { + "aggregation": None, + "difference": "diff", + "maximum": "max", + "minimum": "min", + "mean": "mean", + "standard_deviation": "std", + "sum": "add", + } + operation = accum.setdefault("operation", "aggregation") + if operation not in OPS: + raise ValueError(f"Accumulation operation {operation} not supported") + return OPS[operation] + + +def schema_to_config( + schema_config: dict, request: dict, metadata: Optional[dict] = None +) -> object: + entrypoint = schema_config.pop("entrypoint") + config_name = schema_config.pop("config", ENTRYPOINT_TO_CONFIG[entrypoint]) + ensemble_operation = { + "em": "mean", + "es": "std", + "pb": "quantiles", + "ep": "threshold_prob", + "fcmean": None, + "fcstdev": None, + "fcmin": None, + "fcmax": None, + "efi": "efi", + "efic": "efi", + "sot": "sot", + "cf": None, + "pf": None, + } + schema_config.pop("interp_keys") + schema_config.pop("name", None) + schema_config.pop("dtype", None) + inputs = schema_config.pop("inputs") + + # Populate coords in accumulations with values from inputs + accums = schema_config.pop("accumulations", {}) + for dim, accum in accums.items(): + accum["operation"] = _translate_accum_op(accum) + values = inputs[0][dim] + accum["coords"] = [values] if isinstance(values, (str, int)) else values + + config = { + "inputs": inputs, + "preprocessing": PreprocessingConfig( + actions=schema_config.pop("preprocessing", []) + ), + "accumulations": accums, + "stats": { + "operation": ensemble_operation[request["type"]], + **schema_config, + }, + } + config["stats"].setdefault("metadata", {}).setdefault("type", request["type"]) + if metadata: + config["stats"]["metadata"].update(metadata) + if config_name not in CONFIGS: + raise ValueError( + f"Unknown config {config_name}: supported configs are {list(CONFIGS.keys())}" + ) + return CONFIGS[config_name](**config) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/anomaly.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/anomaly.py new file mode 100644 index 00000000..d714382b --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/anomaly.py @@ -0,0 +1,68 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + + +from earthkit.workflows.backends.earthkit import FieldListBackend +from earthkit.workflows.fluent import Payload + +from earthkit.workflows.plugins.pproc.fluent import Action + +from .ensemble import EnsembleConfig + + +class AnomalyConfig(EnsembleConfig): + @property + def climatology(self) -> list[dict]: + return [x for x in self.inputs if x["type"] in ["em", "es"]] + + @property + def forecast(self) -> list[dict]: + return [x for x in self.inputs if x["type"] not in ["em", "es"]] + + def action( + self, + forecast: Action, + climatology: Action, + preprocessing_dim="param", + ensemble_dim="number", + ) -> Action: + clim_headers = climatology.iselect({"type": 0, "step": 0}, drop=True).map( + Payload( + "ppruntime.metadata.extract", + {"keys": ["climateDateFrom", "climateDateTo", "referenceDate"]}, + ) + ) + action = forecast + for preprocessing in self.preprocessing.actions: + action = action.param_operation( + dim=preprocessing_dim, **preprocessing.model_dump() + ) + action = action.anomaly( + climatology.select({"type": "em"}, drop=True), + climatology.select({"type": "es"}, drop=True), + self.accumulations["step"].get("std_anomaly", False), + ) + for dim, accumulation in self.accumulations.items(): + action = action.accum_operation( + accumulation["operation"], + dim=dim, + coords=[accumulation["coords"]], + metadata=accumulation.get("metadata", None), + include_start=accumulation.get("include_start", False), + deaccumulate=accumulation.get("deaccumulate", False), + ) + stats = action.ensemble_operation( + dim=ensemble_dim, + **self.stats, + ) + if self.stats["metadata"].get("edition", 1) == 1: + return stats + return stats.join(clim_headers, "**datatype**", match_coord_values=True).reduce( + FieldListBackend.set_metadata, dim="**datatype**" + ) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/ensemble.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/ensemble.py new file mode 100644 index 00000000..fb7808f3 --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/ensemble.py @@ -0,0 +1,43 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from dataclasses import dataclass + +from earthkit.workflows.plugins.pproc.fluent import Action +from ppcore.config.preprocessing import PreprocessingConfig + + +@dataclass +class EnsembleConfig: + inputs: list[dict] + preprocessing: PreprocessingConfig + accumulations: dict[str, dict] + stats: dict + + def action( + self, forecast: Action, preprocessing_dim="param", ensemble_dim="number" + ) -> Action: + action = forecast + for preprocessing in self.preprocessing.actions: + action = action.param_operation( + dim=preprocessing_dim, **preprocessing.model_dump() + ) + for dim, accumulation in self.accumulations.items(): + action = action.accum_operation( + accumulation["operation"], + dim=dim, + coords=[accumulation["coords"]], + metadata=accumulation.get("metadata", None), + include_start=accumulation.get("include_start", False), + deaccumulate=accumulation.get("deaccumulate", False), + ) + return action.ensemble_operation( + dim=ensemble_dim, + **self.stats, + ) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/extreme.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/extreme.py new file mode 100644 index 00000000..c8874c3f --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/extreme.py @@ -0,0 +1,58 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + + +from earthkit.workflows.plugins.pproc.fluent import Action + +from .ensemble import EnsembleConfig + + +class ExtremeConfig(EnsembleConfig): + @property + def climatology(self) -> list[dict]: + return [x for x in self.inputs if x["type"] == "cd"] + + @property + def forecast(self) -> list[dict]: + return [x for x in self.inputs if x["type"] != "cd"] + + @property + def step_range(self) -> str: + step_accum = self.accumulations["step"] + if len(step_accum["coords"]) == 1: + return f"{step_accum['coords'][0]}" + return f"{step_accum['coords'][0]}-{step_accum['coords'][-1]}" + + def action( + self, + forecast: Action, + climatology: Action, + preprocessing_dim="param", + ensemble_dim="number", + ) -> Action: + action = forecast + for preprocessing in self.preprocessing.actions: + action = action.param_operation( + dim=preprocessing_dim, **preprocessing.model_dump() + ) + for dim, accumulation in self.accumulations.items(): + action = action.accum_operation( + accumulation["operation"], + dim=dim, + coords=[accumulation["coords"]], + metadata=accumulation.get("metadata", None), + include_start=accumulation.get("include_start", False), + deaccumulate=accumulation.get("deaccumulate", False), + ) + return action.ensemble_extreme( + climatology=climatology, + ensemble_dim=ensemble_dim, + step_ranges=[self.step_range], + **self.stats, + ) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 375fc94d..21faeb59 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -7,21 +7,27 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -import functools import inspect from typing import Any import numpy as np from earthkit.workflows.backends.earthkit import FieldListBackend +from earthkit.workflows.nodetree import nodetree_size from earthkit.workflows import fluent -from earthkit.workflows.plugins.pproc.utils.request import MultiSourceRequest, Request +from earthkit.workflows.plugins.pproc.utils.request import MultiSourceRequest +from earthkit.workflows.plugins.pproc.utils.request import Request +from ppcore.config.preprocessing import MaskExpression +from ppcore.config.threshold import ThresholdConfig class Action(fluent.Action): # TODO: migrate to schema _THERMAL_CONFIG = { - "utci": {"operation": "ppcore.thermal_indices.calc_utci", "params": ["2t", "2d", "10si", "mrt"]}, + "utci": { + "operation": "ppcore.thermal_indices.calc_utci", + "params": ["2t", "2d", "10si", "mrt"], + }, "10si": { "operation": "norm", "metadata": {"paramId": 207}, @@ -31,16 +37,43 @@ class Action(fluent.Action): "operation": "ppcore.thermal_indices.calc_mrt", "params": ["cossza", "dsrp", "ssrd", "fdir", "strd", "str", "ssr"], }, - "cossza": {"operation": "ppcore.thermal_indices.calc_cossza", "params": ["2t", "fdir"]}, - "dsrp": {"operation": "ppcore.thermal_indices.calc_dsrp", "params": ["fdir", "cossza"]}, - "hmdx": {"operation": "ppcore.thermal_indices.calc_hmdx", "params": ["2t", "2d"]}, + "cossza": { + "operation": "ppcore.thermal_indices.calc_cossza", + "params": ["2t", "fdir"], + }, + "dsrp": { + "operation": "ppcore.thermal_indices.calc_dsrp", + "params": ["fdir", "cossza"], + }, + "hmdx": { + "operation": "ppcore.thermal_indices.calc_hmdx", + "params": ["2t", "2d"], + }, "2r": {"operation": "ppcore.thermal_indices.calc_rhp", "params": ["2t", "2d"]}, - "heatx": {"operation": "ppcore.thermal_indices.calc_heatx", "params": ["2t", "2d"]}, - "wbgt": {"operation": "ppcore.thermal_indices.calc_wbgt", "params": ["2t", "2d", "10si", "mrt"]}, - "gt": {"operation": "ppcore.thermal_indices.calc_gt", "params": ["2t", "10si", "mrt"]}, - "nefft": {"operation": "ppcore.thermal_indices.calc_nefft", "params": ["2t", "10si", "2r"]}, - "wcf": {"operation": "ppcore.thermal_indices.calc_wcf", "params": ["2t", "10si"]}, - "aptmp": {"operation": "ppcore.thermal_indices.calc_aptmp", "params": ["2t", "2r", "10si"]}, + "heatx": { + "operation": "ppcore.thermal_indices.calc_heatx", + "params": ["2t", "2d"], + }, + "wbgt": { + "operation": "ppcore.thermal_indices.calc_wbgt", + "params": ["2t", "2d", "10si", "mrt"], + }, + "gt": { + "operation": "ppcore.thermal_indices.calc_gt", + "params": ["2t", "10si", "mrt"], + }, + "nefft": { + "operation": "ppcore.thermal_indices.calc_nefft", + "params": ["2t", "10si", "2r"], + }, + "wcf": { + "operation": "ppcore.thermal_indices.calc_wcf", + "params": ["2t", "10si"], + }, + "aptmp": { + "operation": "ppcore.thermal_indices.calc_aptmp", + "params": ["2t", "2r", "10si"], + }, } def _reduction_with_metadata( @@ -343,8 +376,7 @@ def ensms( ------ Action """ - if metadata is None: - metadata = {} + metadata = metadata or {} mean = self.mean( dim=dim, batch_size=batch_size, metadata={"type": "em", **metadata} ) @@ -361,17 +393,31 @@ def threshold_prob( batch_size: int = 0, metadata: dict | None = None, ) -> "Action": - payload = fluent.Payload( - "ppcore.stats.threshold", - ( - fluent.Node.input_name(0), - threshold, - ), - ) - return ( - self.map(payload) - .multiply(100) - .mean(dim=dim, batch_size=batch_size, metadata=metadata) + thresholds = ThresholdConfig(**threshold) + combined = None + for threshold in thresholds.param_thresholds: + selected = self.sel(threshold.select) if threshold.select else self + selected.map( + fluent.Payload( + "ppcore.stats.mask", + (fluent.Node.input_name(0),), + threshold.model_dump( + exclude=("select", "lower_scale_factor", "upper_scale_factor") + ), + ) + ) + if combined is None: + combined = selected + else: + combined = combined.join(dim="param").reduce( + "ppruntime.stats.logical_and", dim="param" + ) + + metadata = metadata or {} + threshold_metadata = thresholds.grib_keys(edition=metadata.get("edition", 1)) + threshold_metadata.update(metadata) + return combined.multiply(100).mean( + dim=dim, batch_size=batch_size, metadata=threshold_metadata ) def anomaly( @@ -447,11 +493,7 @@ def _wrapped_reduction( return op(dim=dim, metadata=metadata, **kwargs) if metadata is not None: kwargs.setdefault("metadata", {}).update(metadata) - op_function = getattr(FieldListBackend, operation, None) or getattr( - math, operation, None - ) - if op_function is None: - raise ValueError(f"Operation {operation} not found") + op_function = getattr(FieldListBackend, operation, None) or operation operation = fluent.Payload( op_function, kwargs=kwargs, @@ -482,9 +524,9 @@ def param_operation( return self.multiply(kwargs["value"], metadata=metadata) return self._wrapped_reduction(operation, dim, batch_size, metadata, **kwargs) - # TODO: turn this into more general param operation that scans schema to look for - # computation method of missing parameters. Or should it be that in the creation of the - # configuration returned by the schema, we list configuration for creating all required + # TODO: turn this into more general param operation that scans schema to look for + # computation method of missing parameters. Or should it be that in the creation of the + # configuration returned by the schema, we list configuration for creating all required # intermediate parameters def thermal_index( self, param: str, dim: str = "param", metadata: dict | None = None @@ -515,20 +557,29 @@ def thermal_index( def mask( self, select: dict, - mask: tuple[dict, str, float], + mask: dict, replacement: float = 0.0, dim: str = "param", metadata: dict | None = None, ) -> "Action": - filter_selection, comparison, threshold = mask - selected_nodes = self.sel(select).join(self.sel(filter_selection), dim=dim) - return selected_nodes._wrapped_reduction( - "filter", - dim=dim, - metadata=metadata, - comparison=comparison, - threshold=threshold, - replacement=replacement, + mask = MaskExpression(**mask) + mask_action = self.sel(mask.select, drop=True) if select else self + mask_action = mask_action.map( + fluent.Payload( + "ppcore.stats.mask", + (fluent.Node.input_name(0),), + {"lower_comparison": mask.comparison, "lower_value": mask.value}, + ) + ) + return ( + self.sel(select, drop=True) + .join(mask_action, dim=dim) + ._wrapped_reduction( + FieldListBackend.filter, + dim=dim, + metadata=metadata, + replacement=replacement, + ) ) def ensemble_operation( @@ -726,8 +777,8 @@ def from_source( request = Request(request) payloads = np.empty(tuple(request.dims.values()), dtype=object) for indices, new_request in request.expand(): - payloads[indices] = functools.partial( - "ppcore.io.retrieve", new_request, **backend_kwargs + payloads[indices] = fluent.Payload( + "ppruntime.io.retrieve", [new_request], backend_kwargs ) new_action = fluent.from_source( payloads, diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/products.py b/pproc-core/src/earthkit/workflows/plugins/pproc/products.py index d6d70970..e5244282 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/products.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/products.py @@ -7,12 +7,14 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from earthkit.workflows.graph import Graph, deduplicate_nodes +from earthkit.workflows.graph import Graph +from earthkit.workflows.graph import deduplicate_nodes from earthkit.workflows.plugins.pproc.fluent import from_source from earthkit.workflows.plugins.pproc.templates import derive_template from earthkit.workflows.plugins.pproc.utils.request import Request -from ppcore.utils.requests import expand, squeeze +from ppcore.utils.requests import expand +from ppcore.utils.requests import squeeze def ensemble( @@ -47,7 +49,7 @@ def ensemble( ], join_key=ensemble_dim, backend_kwargs={"stream": True}, - ).concatenate(dim=ensemble_dim, keep_dim=True) + ) total_graph += ( config.action(forecast=source, ensemble_dim=ensemble_dim) .write(target) @@ -56,7 +58,7 @@ def ensemble( return deduplicate_nodes(total_graph) -def ensemble_anomaly( +def anomaly( output_requests: list[dict], pproc_schema: str, target: str = "null:" ) -> Graph: """ @@ -86,7 +88,7 @@ def ensemble_anomaly( ], join_key=ensemble_dim, backend_kwargs={"stream": True}, - ).concatenate(dim=ensemble_dim, keep_dim=True) + ) climatology = from_source( [ Request(x) @@ -136,7 +138,7 @@ def extreme( ], join_key=ensemble_dim, backend_kwargs={"stream": True}, - ).concatenate(dim=ensemble_dim, keep_dim=True) + ) climatology = from_source( [Request(x, no_expand=("quantile")) for x in config.climatology] ) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py b/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py index 5459a0fe..91491ec8 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py @@ -7,200 +7,13 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from dataclasses import dataclass from typing import Optional -from earthkit.workflows.backends.earthkit import FieldListBackend -from earthkit.workflows.fluent import Payload - from earthkit.workflows.plugins.pproc.fluent import Action -from ppcore.config.preprocessing import PreprocessingConfig +from earthkit.workflows.plugins.pproc.config import schema_to_config from ppcore.schema.schema import Schema -@dataclass -class EnsembleConfig: - inputs: list[dict] - preprocessing: PreprocessingConfig - accumulations: dict[str, dict] - stats: dict - - def action( - self, forecast: Action, preprocessing_dim="param", ensemble_dim="number" - ) -> Action: - action = forecast - for preprocessing in self.preprocessing: - action = action.param_operation(dim=preprocessing_dim, **preprocessing.model_dump()) - for dim, accumulation in self.accumulations.items(): - action = action.accum_operation( - accumulation["operation"], - dim=dim, - coords=[accumulation["coords"]], - metadata=accumulation.get("metadata", None), - include_start=accumulation.get("include_start", False), - deaccumulate=accumulation.get("deaccumulate", False), - ) - return action.ensemble_operation( - dim=ensemble_dim, - **self.stats, - ) - - -class ExtremeConfig(EnsembleConfig): - - @property - def climatology(self) -> list[dict]: - return [x for x in self.inputs if x["type"] == "cd"] - - @property - def forecast(self) -> list[dict]: - return [x for x in self.inputs if x["type"] != "cd"] - - @property - def step_range(self) -> str: - step_accum = self.accumulations["step"] - if len(step_accum["coords"]) == 1: - return f"{step_accum['coords'][0]}" - return f"{step_accum['coords'][0]}-{step_accum['coords'][-1]}" - - def action( - self, - forecast: Action, - climatology: Action, - preprocessing_dim="param", - ensemble_dim="number", - ) -> Action: - action = forecast - for preprocessing in self.preprocessing: - action = action.param_operation(dim=preprocessing_dim, **preprocessing.model_dump()) - for dim, accumulation in self.accumulations.items(): - action = action.accum_operation( - accumulation["operation"], - dim=dim, - coords=[accumulation["coords"]], - metadata=accumulation.get("metadata", None), - include_start=accumulation.get("include_start", False), - deaccumulate=accumulation.get("deaccumulate", False), - ) - return action.ensemble_extreme( - climatology=climatology, - ensemble_dim=ensemble_dim, - step_ranges=[self.step_range], - **self.stats, - ) - - -class AnomalyConfig(EnsembleConfig): - - @property - def climatology(self) -> list[dict]: - return [x for x in self.inputs if x["type"] in ["em", "es"]] - - @property - def forecast(self) -> list[dict]: - return [x for x in self.inputs if x["type"] not in ["em", "es"]] - - def action( - self, - forecast: Action, - climatology: Action, - preprocessing_dim="param", - ensemble_dim="number", - ) -> Action: - clim_headers = climatology.iselect({"type": 0, "step": 0}, drop=True).map( - Payload("earthkit.workflows.plugins.pproc.runtime.metadata.anomaly_clim") - ) - action = forecast - for preprocessing in self.preprocessing: - action = action.param_operation(dim=preprocessing_dim, **preprocessing.model_dump()) - action = action.anomaly( - climatology.select({"type": "em"}, drop=True), - climatology.select({"type": "es"}, drop=True), - self.accumulations["step"].get("std_anomaly", False), - ) - for dim, accumulation in self.accumulations.items(): - action = action.accum_operation( - accumulation["operation"], - dim=dim, - coords=[accumulation["coords"]], - metadata=accumulation.get("metadata", None), - include_start=accumulation.get("include_start", False), - deaccumulate=accumulation.get("deaccumulate", False), - ) - stats = action.ensemble_operation( - dim=ensemble_dim, - **self.stats, - ) - if self.stats["metadata"].get("edition", 1) == 1: - return stats - return stats.join(clim_headers, "**datatype**", match_coord_values=True).reduce( - FieldListBackend.set_metadata, dim="**datatype**" - ) - - -def _translate_accum_op(accum: dict) -> str: - OPS = { - "aggregation": None, - "difference": "diff", - "maximum": "max", - "minimum": "min", - "mean": "mean", - "standard_deviation": "std", - "sum": "add", - } - operation = accum.setdefault("operation", "aggregation") - if operation not in OPS: - raise ValueError(f"Accumulation operation {operation} not supported") - return OPS[operation] - - -def derive_config( - request: dict, schema_config: dict, metadata: Optional[dict] = None -) -> dict: - ensemble_operation = { - "em": "mean", - "es": "std", - "pb": "quantiles", - "ep": "threshold_prob", - "fcmean": None, - "fcstdev": None, - "fcmin": None, - "fcmax": None, - "efi": "efi", - "efic": "efi", - "sot": "sot", - "cf": None, - "pf": None, - } - schema_config.pop("entrypoint") - schema_config.pop("interp_keys") - schema_config.pop("name", None) - schema_config.pop("dtype", None) - inputs = schema_config.pop("inputs") - - # Populate coords in accumulations with values from inputs - accums = schema_config.pop("accumulations", {}) - for dim, accum in accums.items(): - accum["operation"] = _translate_accum_op(accum) - values = inputs[0][dim] - accum["coords"] = [values] if isinstance(values, (str, int)) else values - - config = { - "inputs": inputs, - "preprocessing": schema_config.pop("preprocessing", []), - "accumulations": accums, - "stats": { - "operation": ensemble_operation[request["type"]], - **schema_config.pop("threshold", {}), - **schema_config, - }, - } - config["stats"].setdefault("metadata", {}).setdefault("type", request["type"]) - if metadata: - config["stats"]["metadata"].update(metadata) - return config - - def derive_template( request: dict, pproc_schema: str, @@ -209,20 +22,7 @@ def derive_template( ) -> Action: schema = Schema.from_file(pproc_schema) schema_config = schema.config_from_output(request, inputs=inputs) - templates = { - "pproc-ensms": EnsembleConfig, - "pproc-quantiles": EnsembleConfig, - "pproc-probabilities": EnsembleConfig, - "pproc-accumulate": EnsembleConfig, - "pproc-extreme": ExtremeConfig, - "pproc-anomaly-probabilities": AnomalyConfig, - "pproc-wind": EnsembleConfig, - } - entrypoint = schema_config["entrypoint"] - if entrypoint not in templates: - raise ValueError(f"Schema {entrypoint} not supported") - config = derive_config(request, schema_config, metadata) - return templates[entrypoint](**config) + return schema_to_config(schema_config, request, metadata) def from_request( diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py index 044131e9..92296008 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py @@ -28,4 +28,3 @@ def window(operation: str, coords: list[Any], include_init: bool) -> dict: ret.setdefault("stepType", "max") ret["stepRange"] = f"{coords[0]}-{coords[-1]}" return ret - \ No newline at end of file diff --git a/pproc-core/src/ppcore/config/preprocessing.py b/pproc-core/src/ppcore/config/preprocessing.py index ee2641f6..d0e17ce6 100644 --- a/pproc-core/src/ppcore/config/preprocessing.py +++ b/pproc-core/src/ppcore/config/preprocessing.py @@ -7,15 +7,22 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from abc import ABC, abstractmethod -from typing import Annotated, Any, List, Literal, Optional, Tuple, Union -from typing_extensions import Self +from abc import ABC +from typing import Annotated +from typing import Any +from typing import List +from typing import Literal +from typing import Optional +from typing import Union -from pydantic import BaseModel, Field, model_validator +from pydantic import BaseModel +from pydantic import Field +from pydantic import model_validator class Preprocessing(BaseModel, ABC): - output: Optional[dict] = None + metadata: Optional[dict] = None + class Scaling(Preprocessing): # - operation: scale @@ -43,16 +50,18 @@ class Expression(Preprocessing): class MaskExpression(BaseModel): - lhs: Union[float, dict] - cmp: Literal["<", ">", ">=", "<=", "==", "!="] - rhs: Union[float, dict] + select: dict + comparison: Literal["<", ">", ">=", "<=", "==", "!="] + value: float @model_validator(mode="before") @classmethod def validate_model(cls, data: Any) -> Any: if isinstance(data, list): - assert len(data) == 3, "Mask expression should be a [lhs, cmp, rhs] list" - return {"lhs": data[0], "cmp": data[1], "rhs": data[2]} + assert ( + len(data) == 3 + ), "Mask expression should be a [select, comparison, value] list" + return {"select": data[0], "comparison": data[1], "value": data[2]} return data diff --git a/pproc-core/src/ppcore/config/threshold.py b/pproc-core/src/ppcore/config/threshold.py new file mode 100644 index 00000000..8426c542 --- /dev/null +++ b/pproc-core/src/ppcore/config/threshold.py @@ -0,0 +1,111 @@ +from pydantic import BaseModel, Field, model_validator +from typing import Any, Optional, Literal, List + +Comparisons = Literal["<", ">", "<=", ">="] + + +class Threshold(BaseModel): + select: Optional[dict] = None + lower_scale_factor: int = 0 + lower_comparison: Comparisons + lower_value: float + upper_scale_factor: int = 0 + upper_comparison: Optional[Comparisons] = None + upper_value: Optional[float] = None + + @model_validator(mode="before") + def validate_threshold(cls, data: Any) -> Any: + if "comparison" in data and "value" in data: + data["lower_comparison"] = data.pop("comparison") + data["lower_value"] = data.pop("value") + data["lower_scale_factor"] = data.get("scale_factor", 0) + if any(k in data for k in ["upper_comparison", "upper_value"]) and not all( + k in data for k in ["upper_comparison", "upper_value"] + ): + raise ValueError( + "Both upper_comparison and upper_value must be provided together" + ) + return data + + def grib_keys(self, edition: int) -> dict: + if self.upper_comparison is None: + threshold_value = round(self.lower_value * 10**self.lower_scale_factor, 0) + comparison = self.lower_comparison.strip("=") + if edition == 1 and comparison == "<": + grib_keys = { + "localDefinitionNumber": 5, + "localDecimalScaleFactor": self.lower_scale_factor, + "thresholdIndicator": 2, + "upperThreshold": threshold_value, + } + elif edition == 1 and comparison == ">": + grib_keys = { + "localDefinitionNumber": 5, + "localDecimalScaleFactor": self.lower_scale_factor, + "thresholdIndicator": 1, + "lowerThreshold": threshold_value, + } + elif edition == 2: + # GRIB 2 has probability types above/below upper/lower limits (see Code Table 4.9) + # Default is to use limit_type=lower probability types + # where the threshold value can correspond to either limit. The default limit type + # is upper for "<" and lower for ">", consistent with the GRIB 1 to GRIB 2 conversion + # assumption. + limit_type = "lower" + prob_types = { + "<": {"upper": 4, "lower": 0}, + ">": {"upper": 1, "lower": 3}, + } + probability_type = prob_types[comparison][limit_type] + missing = "Upper" if limit_type == "lower" else "Lower" + grib_keys = { + f"scaleFactorOf{limit_type.capitalize()}Limit": self.lower_scale_factor, + f"scaledValueOf{limit_type.capitalize()}Limit": threshold_value, + "probabilityType": probability_type, + f"scaleFactorOf{missing}Limit": "MISSING", + f"scaledValueOf{missing}Limit": "MISSING", + } + else: + raise ValueError( + f"Unsupported threshold comparison {comparison} for grib edition {edition}" + ) + return grib_keys + if edition != 2: + raise ValueError("Threshold ranges are only supported for GRIB edition 2") + return { + "scaleFactorOfLowerLimit": self.lower_scale_factor, + "scaledValueOfLowerLimit": round( + self.lower_value * 10**self.lower_scale_factor, 0 + ), + "probabilityType": 2, + "scaleFactorOfUpperLimit": self.upper_scale_factor, + "scaledValueOfUpperLimit": round( + self.upper_value * 10**self.upper_scale_factor, 0 + ), + } + + +class ThresholdConfig(BaseModel): + param_thresholds: List[Threshold] = Field(default_factory=list) + metadata: dict = {} + + @model_validator(mode="before") + def validate_thresholds(cls, data: Any) -> Any: + if isinstance(data, dict) and "param_thresholds" not in data: + data["param_thresholds"] = [ + {k: data[k] for k in data if k not in cls.model_fields} + ] + return data + + def grib_keys(self, edition: int, clim_metadata: Optional[dict] = None) -> dict: + """ + Creates dictionary of threshold related grib headers + """ + threshold_dict = {} + if "paramId" in self.metadata: + threshold_dict["paramId"] = self.metadata["paramId"] + threshold_dict.update(self.param_thresholds[0].grib_keys(edition)) + if edition == 2 and clim_metadata: + threshold_dict.update(clim_metadata) + threshold_dict.update(self.metadata) + return threshold_dict diff --git a/pproc-core/src/ppcore/schema/base.py b/pproc-core/src/ppcore/schema/base.py index 053ba09f..ff4024ad 100644 --- a/pproc-core/src/ppcore/schema/base.py +++ b/pproc-core/src/ppcore/schema/base.py @@ -7,13 +7,17 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -import yaml import copy -from typing import Callable, Any, Optional, Iterator -from typing_extensions import Self import logging +from typing import Any +from typing import Callable +from typing import Iterator +from typing import Optional + +import yaml +from typing_extensions import Self -from ppcore.utils.helpers import deep_update +from ppcore.utils.dicts import deep_update logger = logging.getLogger(__name__) @@ -79,7 +83,7 @@ def subschema(cls, key: str, schema: dict, request: dict) -> dict: raise ValueError( f"Filter value {filter_value} not found in schema {schema}, and no default provided" ) - assert isinstance(ret, dict), f"Subschema must be a dictionary." + assert isinstance(ret, dict), "Subschema must be a dictionary." return ret @classmethod diff --git a/pproc-core/src/ppcore/schema/config.py b/pproc-core/src/ppcore/schema/config.py index 0925da35..51f7be1a 100644 --- a/pproc-core/src/ppcore/schema/config.py +++ b/pproc-core/src/ppcore/schema/config.py @@ -9,11 +9,15 @@ import numpy as np -from ppcore.schema.base import BaseSchema, dict_update -from ppcore.schema.filters import _steplength, _selection, _steptype -from ppcore.utils.requests import validate_request -from ppcore.utils.helpers import to_list, fill_template_value +from ppcore.schema.base import BaseSchema +from ppcore.schema.base import dict_update +from ppcore.schema.filters import _selection +from ppcore.schema.filters import _steplength +from ppcore.schema.filters import _steptype from ppcore.utils.dicts import dict_apply +from ppcore.utils.helpers import fill_template_value +from ppcore.utils.helpers import to_list +from ppcore.utils.requests import validate_request class ConfigSchema(BaseSchema): diff --git a/pproc-core/src/ppcore/schema/deriver.py b/pproc-core/src/ppcore/schema/deriver.py index 3650f095..92925f54 100644 --- a/pproc-core/src/ppcore/schema/deriver.py +++ b/pproc-core/src/ppcore/schema/deriver.py @@ -7,16 +7,24 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Literal, Any, Optional, Annotated, Union -import datetime import bisect -from pydantic import BaseModel, Field, model_validator, ConfigDict -import numpy as np +import datetime +from typing import Annotated +from typing import Any +from typing import Literal +from typing import Optional +from typing import Union +import numpy as np from earthkit.time import Sequence -from earthkit.time.climatology import RelativeYear, date_range +from earthkit.time.climatology import RelativeYear +from earthkit.time.climatology import date_range +from pydantic import BaseModel +from pydantic import ConfigDict +from pydantic import Field +from pydantic import model_validator -# from pproc.common.stepseq import fcmonth_to_steprange +from ppcore.utils.stepseq import fcmonth_to_steprange class DefaultStepDeriver(BaseModel): @@ -66,7 +74,7 @@ class DeaccumulateStepDeriver(BaseModel): def _inst_step(self, step: int, fc_steps: list[int]) -> list[int]: if step == 0: - raise ValueError(f"Cannot perform de-accumulation for step 0") + raise ValueError("Cannot perform de-accumulation for step 0") if step == fc_steps[0]: return [step] start = fc_steps[fc_steps.index(step) - 1] @@ -254,7 +262,6 @@ class HindcastDatesDeriver(BaseModel): def derive(self, fc_request: dict) -> list[str]: date = datetime.datetime.strptime(str(fc_request["date"]), "%Y%m%d").date() - kwargs = self.model_dump() start = RelativeYear(self.rstart).relative_to(date) end = RelativeYear(self.rend).relative_to(date) return [ diff --git a/pproc-core/src/ppcore/schema/filters.py b/pproc-core/src/ppcore/schema/filters.py index 70d0f1db..d5bcbbb8 100644 --- a/pproc-core/src/ppcore/schema/filters.py +++ b/pproc-core/src/ppcore/schema/filters.py @@ -1,4 +1,4 @@ -# from pproc.common.stepseq import fcmonth_to_steprange +from ppcore.utils.stepseq import fcmonth_to_steprange def _steptype(request: dict, key: str) -> str: diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index b3f64eac..6cb95543 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -7,33 +7,38 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Optional, Union, Iterator, Any -from typing_extensions import Self -from pydantic import BaseModel, model_validator, field_validator import copy -import pandas as pd -import numpy as np import logging +from typing import Any +from typing import Iterator +from typing import Optional +from typing import Union + +import numpy as np +import pandas as pd +from pydantic import BaseModel +from pydantic import field_validator +from pydantic import model_validator +from typing_extensions import Self from ppcore.schema.base import BaseSchema -from ppcore.schema.deriver import ( - ForecastStepDeriver, - DefaultStepDeriver, - ClimDateDeriver, - ClimStepDeriver, - HindcastDatesDeriver, -) -from ppcore.schema.filters import _steplength, _steptype, _selection, _members +from ppcore.schema.deriver import ClimDateDeriver +from ppcore.schema.deriver import ClimStepDeriver +from ppcore.schema.deriver import DefaultStepDeriver +from ppcore.schema.deriver import ForecastStepDeriver +from ppcore.schema.deriver import HindcastDatesDeriver +from ppcore.schema.filters import _members +from ppcore.schema.filters import _selection +from ppcore.schema.filters import _steplength +from ppcore.schema.filters import _steptype from ppcore.schema.step import StepSchema -from ppcore.schema.utils import validate_request -from ppcore.utils.requests import ( - update_request, - expand, - squeeze, - extract_mars, -) from ppcore.utils.dicts import deep_update from ppcore.utils.helpers import to_list +from ppcore.utils.requests import expand +from ppcore.utils.requests import extract_mars +from ppcore.utils.requests import squeeze +from ppcore.utils.requests import update_request +from ppcore.utils.requests import validate_request logger = logging.getLogger(__name__) @@ -337,9 +342,7 @@ class InputSchema(BaseSchema): custom_match = {"forecast": _match_forecast, "climatology": _match_forecast} @classmethod - def _format_output_request( - cls, request: dict, pop: Optional[list[str]] = [] - ) -> dict: + def _format_output_request(cls, request: dict, pop: list[str] = []) -> dict: out = copy.deepcopy(request) ignore_inheritance = { "number": lambda req: ( @@ -389,7 +392,7 @@ def inputs(self, output_request: dict, step_schema: StepSchema) -> Iterator[dict yield validate_request(inp) def reconstruct( - self, output_template: Optional[dict] = None, **matching + self, output_template: dict[str, Any] = {}, **matching ) -> Iterator[tuple[dict, InputConfig]]: inherit = ["levelist", "levtype"] base_request = { @@ -436,15 +439,13 @@ def outputs( self, input_requests: list[dict], step_schema: Optional[StepSchema] = None, - output_template: Optional[dict] = None, + output_template: dict[str, Any] = {}, ) -> Iterator[tuple[dict, list[dict]]]: """ Assumes inputs are from the same forecast for a single date and time """ input_requests = list(expand([validate_request(req) for req in input_requests])) - output_template = ( - None if output_template is None else validate_request(output_template) - ) + output_template = validate_request(output_template) for base_output, config in self.reconstruct( output_template=output_template, forecast={"inputs": input_requests}, diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index 310a191e..6b8319b3 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -7,17 +7,20 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Iterator, Optional -from typing_extensions import Self -import copy +from typing import Iterator +from typing import Optional + import numpy as np import pandas as pd import yaml +from typing_extensions import Self from ppcore.schema.config import ConfigSchema from ppcore.schema.input import InputSchema from ppcore.schema.step import StepSchema -from ppcore.utils.requests import METADATA_KEYS, VALUE_TYPES, expand, validate_request +from ppcore.utils.requests import METADATA_KEYS +from ppcore.utils.requests import VALUE_TYPES +from ppcore.utils.requests import validate_request class Schema: diff --git a/pproc-core/src/ppcore/schema/step.py b/pproc-core/src/ppcore/schema/step.py index 1f6fe37b..1bf9d5fa 100644 --- a/pproc-core/src/ppcore/schema/step.py +++ b/pproc-core/src/ppcore/schema/step.py @@ -7,14 +7,20 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from pydantic import BaseModel, Field, RootModel -from typing import Literal, Optional, Annotated, Union -import numpy as np import bisect +from typing import Annotated +from typing import Literal +from typing import Optional +from typing import Union -# from pproc.common.stepseq import stepseq_monthly, steprange_to_fcmonth +import numpy as np +from pydantic import BaseModel +from pydantic import Field +from pydantic import RootModel from ppcore.schema.base import BaseSchema +from ppcore.utils.stepseq import steprange_to_fcmonth +from ppcore.utils.stepseq import stepseq_monthly class Instantaneous(BaseModel): @@ -46,7 +52,7 @@ class Range(BaseModel): width: int dim: Literal["step"] = "step" - def generate_steps(self, steps: list[int | str]) -> list[str]: + def generate_steps(self, steps: list[int] | list[str]) -> list[str]: if all(isinstance(x, str) for x in steps): return steps assert all( @@ -103,38 +109,35 @@ def in_steps(self, request: dict) -> list[int]: return self._create_steps(config.get("in_steps", [])) def out_steps( - self, request_or_name: dict | str, steps: Optional[list[int]] = None - ) -> tuple[str, list[int | str]]: - if isinstance(request_or_name, str): - step_configs = self.schema.get("defs", {}).get(request_or_name, []) - else: - for dim in ["step", "fcmonth"]: - if dim in request_or_name: - return dim, [request_or_name[dim]] - - config = self.traverse(request_or_name, {}) - steps = steps or self._create_steps(config.get("in_steps", [])) - step_configs = config.get("out_steps", None) - if step_configs is None: - raise ValueError(f"No output steps defined {request_or_name}") + self, request: dict, steps: Optional[list[int]] = None + ) -> tuple[str, list[Union[int, str]]]: + for dim in ["step", "fcmonth"]: + if dim in request: + return dim, [request[dim]] + + config = self.traverse(request, {}) + in_steps: list[int] = steps or self._create_steps(config.get("in_steps", [])) + step_configs = config.get("out_steps", None) + if step_configs is None: + raise ValueError(f"No output steps defined {request}") if isinstance(step_configs, dict): step_configs = [step_configs] out = [] - dim = None + dim: str = "" for step_config in step_configs: if isinstance(step_config, str): - if all(x in steps for x in map(int, step_config.split("-"))): + if all(x in in_steps for x in map(int, step_config.split("-"))): out.append(step_config) continue step_config = { - k: v.format_map(request_or_name) if isinstance(v, str) else v + k: v.format_map(request) if isinstance(v, str) else v for k, v in step_config.items() } step_type = StepType(**step_config).root - if dim is None: + if not dim: dim = step_type.dim assert dim == step_type.dim, "All steps must be of the same dimension" - out.extend([x for x in step_type.generate_steps(steps) if x not in out]) + out.extend([x for x in step_type.generate_steps(in_steps) if x not in out]) return dim, out diff --git a/pproc-core/src/ppcore/utils/dicts.py b/pproc-core/src/ppcore/utils/dicts.py index a47e91bf..0d5dd031 100644 --- a/pproc-core/src/ppcore/utils/dicts.py +++ b/pproc-core/src/ppcore/utils/dicts.py @@ -9,7 +9,12 @@ import collections import itertools -from typing import Callable, Dict, Iterable, Iterator, TypeVar, TypeAlias +from typing import Callable +from typing import Dict +from typing import Iterable +from typing import Iterator +from typing import TypeAlias +from typing import TypeVar K = TypeVar("K") T = TypeVar("T") @@ -18,7 +23,7 @@ NestedDict: TypeAlias = Dict[K, V | "NestedDict"] -def dict_product(dic: Dict[K, Iterable[V]]) -> Iterator[Dict[K, V]]: +def dict_product(dic: collections.abc.Mapping[K, Iterable[V]]) -> Iterator[Dict[K, V]]: keys = list(dic.keys()) its = tuple(dic.values()) for vals in itertools.product(*its): @@ -37,8 +42,8 @@ def dict_apply(func: Callable[[V], V], dic: NestedDict) -> NestedDict: def deep_update(original: NestedDict, update: NestedDict) -> NestedDict: for key, value in update.items(): - if isinstance(value, NestedDict) and isinstance(original.get(key, None), NestedDict): + if isinstance(value, dict) and isinstance(original.get(key, None), dict): original[key] = deep_update(original[key], value) else: original[key] = value - return original \ No newline at end of file + return original diff --git a/pproc-core/src/ppcore/utils/helpers.py b/pproc-core/src/ppcore/utils/helpers.py index 33e35db5..c85873c6 100644 --- a/pproc-core/src/ppcore/utils/helpers.py +++ b/pproc-core/src/ppcore/utils/helpers.py @@ -1,6 +1,8 @@ import re from typing import Any +import numpy as np + _TEMPLATE_RE = re.compile("^{([a-z_]*)}:?([a-z]*)$", re.I) _TYPES = { "int": int, @@ -8,6 +10,7 @@ "float": float, } + def to_list(value: Any) -> list[Any]: if np.ndim(value) == 0: return [value] @@ -30,4 +33,4 @@ def fill_template_values(metadata: dict, template_map: dict) -> dict: for key, val in metadata.items(): if isinstance(val, str): metadata[key] = fill_template_value(val, template_map) - return metadata \ No newline at end of file + return metadata diff --git a/pproc-core/src/ppcore/utils/requests.py b/pproc-core/src/ppcore/utils/requests.py index 089618f5..2346509b 100644 --- a/pproc-core/src/ppcore/utils/requests.py +++ b/pproc-core/src/ppcore/utils/requests.py @@ -1,7 +1,14 @@ -from typing import Any, Iterator, Optional import copy -import pandas as pd +import itertools +from typing import Iterator +from typing import Optional + import numpy as np +import pandas as pd + +from ppcore.utils.dicts import deep_update +from ppcore.utils.dicts import dict_product +from ppcore.utils.helpers import to_list METADATA_KEYS = {"param": "paramId", "date": "dataDate"} @@ -128,7 +135,7 @@ def update_request( return deduplicated -def extract_mars(keys: dict, additional: list[str] = None) -> dict: +def extract_mars(keys: dict, additional: Optional[list[str]] = None) -> dict: additional = additional or [] for key, metadata_key in METADATA_KEYS.items(): if metadata_key in keys: @@ -157,4 +164,4 @@ def extract_mars(keys: dict, additional: list[str] = None) -> dict: "origin", "system", ] - return {k: v for k, v in keys.items() if (k in mars_namespace) or (k in additional)} \ No newline at end of file + return {k: v for k, v in keys.items() if (k in mars_namespace) or (k in additional)} diff --git a/pproc-core/src/ppcore/utils/stepseq.py b/pproc-core/src/ppcore/utils/stepseq.py new file mode 100644 index 00000000..7fc7ae3b --- /dev/null +++ b/pproc-core/src/ppcore/utils/stepseq.py @@ -0,0 +1,75 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import datetime +from typing import Iterator + +from earthkit.time.calendar import MonthInYear +from earthkit.time.sequence import MonthlySequence + + +def steprange_to_fcmonth(fcdate: datetime.datetime | str, steprange: str) -> int: + if isinstance(fcdate, str): + fcdate = datetime.datetime.strptime(str(fcdate), "%Y%m%d") + start, end = map(int, steprange.split("-")) + seq = MonthlySequence(1) + first_month = seq.next(fcdate, False) + this_month = fcdate + datetime.timedelta(hours=int(start)) + + month_length = MonthInYear(this_month.year, this_month.month).length() * 24 + assert ( + month_length == (end - start) + ), f"Expected month length {end - start} for {fcdate} and step range {steprange}. Got {month_length}." + + return ( + (this_month.year - first_month.year) * 12 + + this_month.month + - first_month.month + + 1 + ) + + +def fcmonth_to_steprange(fcdate: datetime.datetime | str, fcmonth: int) -> str: + if isinstance(fcdate, str): + fcdate = datetime.datetime.strptime(str(fcdate), "%Y%m%d") + seq = MonthlySequence(1) + month = seq.next(fcdate, False) + for _ in range(1, fcmonth): + month = seq.next(month, True) + date = datetime.datetime(month.year, month.month, month.day) + start = (date - fcdate).total_seconds() // 3600 + end = start + MonthInYear(date.year, date.month).length() * 24 + return f"{int(start)}-{int(end)}" + + +def stepseq_monthly(date: str, start: int, end: int, interval: int) -> Iterator: + fcdate = datetime.datetime.strptime(str(date), "%Y%m%d") + start_date = fcdate + datetime.timedelta(hours=start) + seq = MonthlySequence(1) + start_month = seq.next(start_date.date(), strict=False) + # Steps are in hours, from forecast date + step_start = (start_month - fcdate.date()).days * 24 + miny = MonthInYear(start_month.year, start_month.month) + while step_start < end: + delta = miny.length() * 24 + step_end = step_start + delta + + if step_end > end: + break + + yield range(step_start, step_end + 1, interval) + miny = miny.next() + step_start = step_end + + +def stepseq_ranges( + start: int, end: int, width: int, interval: int, by: int +) -> Iterator: + for start in range(start, end - width + 1, interval): + yield range(start, start + width + 1, by) diff --git a/pproc-core/tests/conftest.py b/pproc-core/tests/conftest.py index c40b6dd1..b9a00a26 100644 --- a/pproc-core/tests/conftest.py +++ b/pproc-core/tests/conftest.py @@ -9,11 +9,12 @@ import os from typing import Optional -import yaml +import yaml TEST_DIR = os.path.dirname(os.path.realpath(__file__)) -SCHEMA = os.path.join(TEST_DIR, "schema", "schema.yaml") +SCHEMA = os.path.join(TEST_DIR, "schema.yaml") + def schema(section: Optional[str] = None) -> dict: with open(SCHEMA, "r") as f: diff --git a/pproc-core/tests/schema/test_config_schema.py b/pproc-core/tests/ppcore/schema/test_config_schema.py similarity index 90% rename from pproc-core/tests/schema/test_config_schema.py rename to pproc-core/tests/ppcore/schema/test_config_schema.py index 54105e94..790718d2 100644 --- a/pproc-core/tests/schema/test_config_schema.py +++ b/pproc-core/tests/ppcore/schema/test_config_schema.py @@ -8,11 +8,10 @@ # nor does it submit to any jurisdiction. import pytest +from conftest import schema from ppcore.schema.config import ConfigSchema -from conftest import schema - def test_reconstruct(): config_schema = ConfigSchema(schema("config")) @@ -31,6 +30,7 @@ def test_reconstruct(): [ [ { + "class": "od", "stream": "enfo", "date": "20250101", "time": "00", @@ -38,11 +38,13 @@ def test_reconstruct(): "number": 90, "param": "132167", "step": "0-24", + "levtype": "sfc", }, {"sot": [90]}, ], [ { + "class": "od", "stream": "enfo", "date": "20250101", "time": "00", @@ -50,11 +52,13 @@ def test_reconstruct(): "number": [10, 90], "param": "132167", "step": "0-24", + "levtype": "sfc", }, {"sot": [10, 90]}, ], [ { + "class": "od", "stream": "enfo", "date": "20250101", "time": "00", @@ -62,11 +66,13 @@ def test_reconstruct(): "quantile": "1:100", "param": "167", "step": "0-24", + "levtype": "sfc", }, {"quantiles": [0.01]}, ], [ { + "class": "od", "stream": "enfo", "date": "20250101", "time": "00", @@ -74,6 +80,7 @@ def test_reconstruct(): "quantile": ["1:100", "2:100"], "param": "167", "step": "0-24", + "levtype": "sfc", }, {"quantiles": [0.01, 0.02]}, ], diff --git a/pproc-core/tests/schema/test_deriver.py b/pproc-core/tests/ppcore/schema/test_deriver.py similarity index 98% rename from pproc-core/tests/schema/test_deriver.py rename to pproc-core/tests/ppcore/schema/test_deriver.py index 21147984..dab0098c 100644 --- a/pproc-core/tests/schema/test_deriver.py +++ b/pproc-core/tests/ppcore/schema/test_deriver.py @@ -1,8 +1,9 @@ import pytest - from pydantic import TypeAdapter -from ppcore.schema.deriver import ForecastStepDeriver, ClimStepDeriver, ClimDateDeriver +from ppcore.schema.deriver import ClimDateDeriver +from ppcore.schema.deriver import ClimStepDeriver +from ppcore.schema.deriver import ForecastStepDeriver FcStepDeriver = TypeAdapter(ForecastStepDeriver) diff --git a/pproc-core/tests/schema/test_input_schema.py b/pproc-core/tests/ppcore/schema/test_input_schema.py similarity index 85% rename from pproc-core/tests/schema/test_input_schema.py rename to pproc-core/tests/ppcore/schema/test_input_schema.py index cf65beb6..2bb73837 100644 --- a/pproc-core/tests/schema/test_input_schema.py +++ b/pproc-core/tests/ppcore/schema/test_input_schema.py @@ -8,28 +8,28 @@ # nor does it submit to any jurisdiction. import pytest +from conftest import schema -from ppcore.utils.requests import expand, update_request -from ppcore.schema.input import ( - InputSchema, - ForecastConfig, - ForecastInput, -) +from ppcore.schema.input import ForecastConfig +from ppcore.schema.input import ForecastInput +from ppcore.schema.input import InputSchema from ppcore.schema.step import StepSchema - -from conftest import schema +from ppcore.utils.requests import expand +from ppcore.utils.requests import update_request INPUTS = { "ensms": [ { - "stream": "enfo", + "class": "od", + "stream": "oper", "levtype": "sfc", "param": "167", "step": 3, - "type": "cf", + "type": "fc", "time": "0000", }, { + "class": "od", "stream": "enfo", "levtype": "sfc", "param": "167", @@ -41,24 +41,27 @@ ], "thermofeel": [ { - "stream": "enfo", + "class": "od", + "stream": "oper", "levtype": "sfc", "param": ["169", "175", "176", "177", "228021", "47"], "step": [2, 3], - "type": "cf", + "type": "fc", "time": "0000", }, { - "stream": "enfo", + "class": "od", + "stream": "oper", "levtype": "sfc", "param": ["165", "166", "167", "168"], "step": 3, - "type": "cf", + "type": "fc", "time": "0000", }, ], "thermo_pf": [ { + "class": "od", "stream": "enfo", "levtype": "sfc", "param": ["169", "175", "176", "177", "228021", "47"], @@ -68,6 +71,7 @@ "number": [1, 2, 3], }, { + "class": "od", "stream": "enfo", "levtype": "sfc", "param": ["165", "166", "167", "168"], @@ -79,19 +83,21 @@ ], "t850": [ { - "stream": "enfo", + "class": "od", + "stream": "oper", "param": "130", - "step": list(range(120, 169, 12)), - "type": "cf", + "step": list(range(120, 169, 6)), + "type": "fc", "date": "20250314", "time": "1200", "levtype": "pl", "levelist": 250, }, { + "class": "od", "stream": "enfo", "param": "130", - "step": list(range(120, 169, 12)), + "step": list(range(120, 169, 6)), "type": "pf", "number": list(range(1, 51)), "date": "20250314", @@ -100,9 +106,10 @@ "levelist": 250, }, { + "class": "od", "stream": "efhs", "param": "130", - "step": list(range(132, 181, 12)), + "step": list(range(132, 181, 6)), "type": "em", "date": "20250313", "time": "0000", @@ -111,9 +118,10 @@ "climatology": True, }, { + "class": "od", "stream": "efhs", "param": "130", - "step": list(range(132, 181, 12)), + "step": list(range(132, 181, 6)), "type": "es", "date": "20250313", "time": "0000", @@ -124,6 +132,7 @@ ], "efi": [ { + "class": "od", "stream": "eefo", "levtype": "sfc", "param": "167", @@ -134,6 +143,7 @@ "time": "0000", }, { + "class": "od", "stream": "eehs", "levtype": "sfc", "param": "228004", @@ -147,6 +157,7 @@ ], "monthly": [ { + "class": "od", "stream": "mmsf", "levtype": "sfc", "param": ["165", "166"], @@ -159,6 +170,16 @@ ], "prob": [ { + "class": "od", + "stream": "oper", + "levtype": "sfc", + "param": "228", + "step": [0, 24], + "type": "fc", + "time": "0000", + }, + { + "class": "od", "stream": "enfo", "levtype": "sfc", "param": "228", @@ -170,15 +191,17 @@ ], "sfc-pl": [ { - "stream": "enfo", + "class": "od", + "stream": "oper", "levtype": "pl", "levelist": [250, 850], "param": "130", "step": 6, - "type": "cf", + "type": "fc", "time": "0000", }, { + "class": "od", "stream": "enfo", "levtype": "pl", "levelist": [250, 850], @@ -189,14 +212,16 @@ "time": "0000", }, { - "stream": "enfo", + "class": "od", + "stream": "oper", "levtype": "sfc", "param": "167", "step": 6, - "type": "cf", + "type": "fc", "time": "0000", }, { + "class": "od", "stream": "enfo", "levtype": "sfc", "param": "167", @@ -298,6 +323,7 @@ def test_forecast_config(inputs, expected_num_inputs): "output", [ { + "class": "od", "stream": "enfo", "type": "em", "time": "0000", @@ -306,14 +332,16 @@ def test_forecast_config(inputs, expected_num_inputs): "levtype": "sfc", }, { - "stream": "enfo", - "type": "cf", + "class": "od", + "stream": "oper", + "type": "fc", "param": "261001", "step": 3, "levtype": "sfc", "time": "0000", }, { + "class": "od", "stream": "enfo", "type": "pf", "param": "261001", @@ -323,6 +351,7 @@ def test_forecast_config(inputs, expected_num_inputs): "number": [1, 2, 3], }, { + "class": "od", "stream": "enfo", "type": "ep", "param": "131020", @@ -333,6 +362,7 @@ def test_forecast_config(inputs, expected_num_inputs): "levelist": 250, }, { + "class": "od", "stream": "eefo", "levtype": "sfc", "type": "efi", @@ -342,6 +372,7 @@ def test_forecast_config(inputs, expected_num_inputs): "time": "0000", }, { + "class": "od", "stream": "msmm", "levtype": "sfc", "type": "fcmean", @@ -352,6 +383,7 @@ def test_forecast_config(inputs, expected_num_inputs): "time": "0000", }, { + "class": "od", "stream": "enfo", "levtype": "sfc", "type": "ep", @@ -380,7 +412,7 @@ def test_inputs(request, output): @pytest.mark.parametrize( "out_type, num_outputs", - [["em", 1], ["cf", 12], ["ep", 52], ["efi", 1], ["fcmean", 3], ["ep", 7]], + [["em", 1], ["fc", 11], ["ep", 52], ["efi", 1], ["fcmean", 3], ["ep", 7]], ids=["ensms", "thermofeel", "t850", "efi", "monthly", "prob"], ) def test_outputs(request, out_type, num_outputs): @@ -410,6 +442,7 @@ def test_input_format(): ) expected_outputs = [ { + "class": "od", "stream": "enfo", "levtype": "pl", "levelist": [250, 850], @@ -419,6 +452,7 @@ def test_input_format(): "time": "0000", }, { + "class": "od", "stream": "enfo", "levtype": "sfc", "param": "167", @@ -440,6 +474,7 @@ def test_input_format(): [ [ { + "class": "od", "stream": "oper", "param": [ "165", @@ -461,32 +496,36 @@ def test_input_format(): } ], {"type": "fc"}, - 20, + 18, ], [ [ { - "stream": "enfo", + "class": "od", + "stream": "oper", "param": ["228246", "228247"], - "type": "cf", + "type": "fc", "levtype": "sfc", "time": "0000", + "step": 3, } ], - {"type": "cf"}, + {"type": "fc"}, 0, ], [ [ { - "stream": "enfo", + "class": "od", + "stream": "oper", "param": "129", - "type": "cf", + "type": "fc", "levtype": "sfc", "step": 3, "time": "0000", }, { + "class": "od", "stream": "enfo", "param": "129", "type": "pf", @@ -496,15 +535,17 @@ def test_input_format(): "time": "0000", }, { - "stream": "enfo", + "class": "od", + "stream": "oper", "param": "129", - "type": "cf", + "type": "fc", "levtype": "pl", "levelist": [50, 100], "step": 3, "time": "0000", }, { + "class": "od", "stream": "enfo", "param": "129", "type": "pf", @@ -544,12 +585,14 @@ def test_fcstat_inputs(number, updates): input_schema = InputSchema(schema("inputs")) step_schema = StepSchema(schema("windows")) output = { + "class": "od", "stream": "eefo", "type": "fcmean", "number": number, "param": "167", "step": "0-168", "time": "0000", + "levtype": "sfc", } inputs = input_schema.inputs(output, step_schema) base_input = output.copy() diff --git a/pproc-core/tests/schema/test_schema.py b/pproc-core/tests/ppcore/schema/test_schema.py similarity index 91% rename from pproc-core/tests/schema/test_schema.py rename to pproc-core/tests/ppcore/schema/test_schema.py index eecab89c..c33b7360 100644 --- a/pproc-core/tests/schema/test_schema.py +++ b/pproc-core/tests/ppcore/schema/test_schema.py @@ -7,13 +7,12 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. + import pytest -import os +from conftest import schema from ppcore.schema.schema import Schema -from conftest import schema - @pytest.mark.parametrize( "req, config, num_generated", @@ -66,9 +65,6 @@ }, } }, - "metadata": { - "stream": "msmm", - }, }, 1, ], @@ -102,6 +98,12 @@ "deaccumulate": True, "metadata": { "type": "fcmean", + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, }, "name": { "type": "default", @@ -143,9 +145,6 @@ "number": list(range(1, 4)), }, ], - "metadata": { - "paramId": 172228, - }, }, 2, ], @@ -176,14 +175,14 @@ "inputs": [ { "class": "od", - "stream": "enfo", + "stream": "oper", "expver": "0001", "levtype": "pl", "domain": "g", "param": "130", "date": "20241001", "time": "0000", - "type": "cf", + "type": "fc", "levelist": [250, 850], "step": 12, "target_grid": "O640", @@ -204,11 +203,6 @@ "target_grid": "O640", }, ], - "metadata": { - "bitsPerValue": 16, - "numberOfForecastsInEnsemble": "{num_fields}:int", - "perturbationNumber": 0, - }, }, 1, ], @@ -217,7 +211,9 @@ ) def test_schema_from_output(req, config, num_generated): test_schema = Schema(**schema()) - assert config == test_schema.config_from_output(req) + test_config = test_schema.config_from_output(req) + test_config.pop("metadata", None) + assert config == test_config generated = test_schema.config_from_input( config["inputs"], {k: req[k] for k in ["stream", "type", "param"]} @@ -246,7 +242,7 @@ def test_schema_from_output(req, config, num_generated): }, { "class": "od", - "stream": "enfo", + "stream": "oper", "expver": "0001", "levtype": "sfc", "domain": "g", @@ -254,7 +250,7 @@ def test_schema_from_output(req, config, num_generated): "date": "20241001", "time": "0", "step": list(range(0, 169, 6)), - "type": "cf", + "type": "fc", }, ], 8, @@ -264,14 +260,14 @@ def test_schema_from_output(req, config, num_generated): "inputs": [ { "class": "od", - "stream": "enfo", + "stream": "oper", "expver": "0001", "levtype": "sfc", "domain": "g", "param": "167", "date": "20241001", "time": "0000", - "type": "cf", + "type": "fc", "step": list(range(6, 169, 6)), } ], @@ -279,7 +275,15 @@ def test_schema_from_output(req, config, num_generated): "step": { "type": "legacywindow", "operation": "mean", - "metadata": {"type": "fcmean"}, + "metadata": { + "type": "fcmean", + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, + }, "name": { "type": "default", "length": 168, @@ -292,7 +296,6 @@ def test_schema_from_output(req, config, num_generated): "matrix-loader": "file-io", }, "dtype": "float64", - "metadata": {}, }, ], [ @@ -359,10 +362,6 @@ def test_schema_from_output(req, config, num_generated): "legendre-loader": "shmem", "matrix-loader": "file-io", }, - "metadata": { - "paramId": 172228, - "stream": "msmm", - }, }, ], [ @@ -384,7 +383,7 @@ def test_schema_from_output(req, config, num_generated): }, { "class": "od", - "stream": "enfo", + "stream": "oper", "expver": "0001", "levtype": "pl", "levelist": [250, 850], @@ -393,7 +392,7 @@ def test_schema_from_output(req, config, num_generated): "date": "20241001", "time": "0", "step": [0, 6, 12, 18, 24], - "type": "cf", + "type": "fc", }, ], 10, @@ -403,7 +402,7 @@ def test_schema_from_output(req, config, num_generated): "inputs": [ { "class": "od", - "stream": "enfo", + "stream": "oper", "expver": "0001", "levtype": "pl", "levelist": [250, 850], @@ -411,7 +410,7 @@ def test_schema_from_output(req, config, num_generated): "param": "130", "date": "20241001", "time": "0000", - "type": "cf", + "type": "fc", "step": 0, }, { @@ -435,11 +434,6 @@ def test_schema_from_output(req, config, num_generated): "matrix-loader": "file-io", }, "dtype": "float64", - "metadata": { - "bitsPerValue": 16, - "numberOfForecastsInEnsemble": "{num_fields}:int", - "perturbationNumber": 0, - }, }, ], ], @@ -449,4 +443,6 @@ def test_schema_from_input(entrypoint, req, num_expected, expected): test_schema = Schema(**schema()) configs = list(test_schema.config_from_input(req, entrypoint=entrypoint)) assert len(configs) == num_expected - assert configs[0] == expected + test_config = configs[0] + test_config.pop("metadata", None) + assert test_config == expected diff --git a/pproc-core/tests/schema/test_step_schema.py b/pproc-core/tests/ppcore/schema/test_step_schema.py similarity index 97% rename from pproc-core/tests/schema/test_step_schema.py rename to pproc-core/tests/ppcore/schema/test_step_schema.py index a9b921da..7ec0c736 100644 --- a/pproc-core/tests/schema/test_step_schema.py +++ b/pproc-core/tests/ppcore/schema/test_step_schema.py @@ -8,11 +8,11 @@ # nor does it submit to any jurisdiction. import pytest - -from ppcore.schema.step import StepType, StepSchema - from conftest import schema +from ppcore.schema.step import StepSchema +from ppcore.schema.step import StepType + @pytest.mark.parametrize( "config, steps, expected", diff --git a/pproc-core/tests/utils/test_dicts.py b/pproc-core/tests/ppcore/utils/test_dicts.py similarity index 87% rename from pproc-core/tests/utils/test_dicts.py rename to pproc-core/tests/ppcore/utils/test_dicts.py index 804eb406..30f01e72 100644 --- a/pproc-core/tests/utils/test_dicts.py +++ b/pproc-core/tests/ppcore/utils/test_dicts.py @@ -1,13 +1,12 @@ from ppcore.utils.dicts import dict_product + def test_dictprod(): assert list(dict_product({})) == [{}] assert list(dict_product({"x": range(3), "empty": []})) == [] - assert list(dict_product({"foo": [1, 2, 3]})) == [ - {"foo": n} for n in [1, 2, 3] - ] + assert list(dict_product({"foo": [1, 2, 3]})) == [{"foo": n} for n in [1, 2, 3]] dic = {"a": [5, 12], "b": range(3), "c": ("a", "b")} assert list(dict_product(dic)) == [ @@ -23,4 +22,4 @@ def test_dictprod(): {"a": 12, "b": 1, "c": "b"}, {"a": 12, "b": 2, "c": "a"}, {"a": 12, "b": 2, "c": "b"}, - ] \ No newline at end of file + ] diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index dd01d7fd..ca1bfa52 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -3,646 +3,1875 @@ config: intgrid: "none" legendre-loader: "shmem" matrix-loader: "file-io" + metadata_from_output: ["param", "stream", "date"] filter:param: "*": {} "10": - preprocessing: + preprocessing: + - operation: reshape + shape: 2 - operation: norm - interp_keys: - vod2uv: true - "121/122/228026/228027": + vod2uv: true + "131/132": + filter:type: + taem/taes: {} + cf/pf/fc/fcmean/fcstdev/fcmax/fcmin: + filter:levtype: + pl: + metadata_from_output: ["stream", "date"] + vod2uv: true + "121/122/123/228026/228027": filter:type: em/es/pb: + metadata: + timeRangeIndicator: 2 accumulations: step: type: legacywindow - "131068/131069": - filter:type: - ep: - preprocessing: - - operation: norm - "132044": - filter:type: - efi/efic/sot: - preprocessing: - - operation: mask - select: {param: "228036"} - mask: [{param: "228035"}, "<=", 10] - "132059": - filter:type: - efi/efic/sot: - preprocessing: - - operation: mask - select: {param: "228035"} - mask: [{param: "228035"}, "<=", 10] - "132045": - filter:type: - efi/efic/sot: + name: + type: default + length: "{steplength}:int" + "*": {} + "207": + filter:stream: + msmm: preprocessing: - operation: norm - "207/228249": - preprocessing: - - operation: norm - "172142/172143/172144/172228": + "*": + forecast: + inputs: + request: + param: "{param}" + "140249": filter:type: - fcmean/fcstdev/fcmin/fcmax: - vmin: 0. - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - include_start: true - deaccumulate: true - "172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172205/172212": - filter:type: - fcmean/fcstdev/fcmin/fcmax: + fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - include_start: true - deaccumulate: true - "172189": + - operation: "direction" + cd: {} + "172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228": filter:type: fcmean/fcstdev/fcmin/fcmax: - vmin: 0. - vmax: 1. + filter:param: + 172142/172143/172144/172228: + vmin: 0. + "172189": + vmin: 0. + vmax: 1. + "*": {} preprocessing: - operation: scale value: 0.00001157407 + filter:stream: + enfh/enwh/eefh/weeh: + accumulations: + hdate: {} + "*": {} accumulations: step: - include_start: true deaccumulate: true - "260033/260053": + taem/taes: {} + "260033/260053": preprocessing: - operation: sum - - operation: scale - value: 3600 + metadata: + shortName: tprate + edition: 2 "200189/200142/200143/200144/228216/200228": accumulations: step: + type: legacywindow operation: difference - include_start: true + name: + type: default + length: "{steplength}:int" + metadata: + timeRangeIndicator: 5 + stepType: diff + "234167": + metadata: + bitsPerValue: 24 + "234228": + preprocessing: + - operation: scale + value: 604800000 filter:type: - pf/cf: - filter:param: - "261001/261014/261015/261016/260242/260004/260005/261018/260255/261002": - entrypoint: pproc-thermal-indices - "10": - entrypoint: pproc-wind + pf/cf/fc: + filter:levtype: + fl: + entrypoint: pproc-flight-levels + target_flight_levels: "{levelist}" + metadata: + edition: 2 + bitsPerValue: 16 + filter:type: + fc: + metadata: + productDefinitionTemplateNumber: 1 + typeOfGeneratingProcess: 4 + typeOfProcessedData: 3 + typeOfEnsembleForecast: 5 + perturbationNumber: 0 + numberOfForecastsInEnsemble: 51 # TODO: Remove in 50r2 when oper/fc encodes this correctly + localTablesVersion: 1 + deletePV: 1 + pf: + metadata: + grib2LocalSectionNumber: 1 + typeOfEnsembleForecast: 6 + localTablesVersion: 1 + deletePV: 1 + accumulations: + step: {} + number: {} "*": - entrypoint: pproc-accumulate + filter:param: + "261016/260242/260004/260005/261018/260255/261023": + entrypoint: pproc-thermal-indices + outputs: + indices: + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + "261001/261002/261014/261015": + entrypoint: pproc-thermal-indices + outputs: + indices: + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + accumulations: + step: + operation: difference + "*": + entrypoint: pproc-accumulate + filter:stream: + "enfh/enwh/eefh/weeh": + accumulations: + hdate: {} + "*": {} em/es: - dtype: float64 - metadata: - perturbationNumber: 0 - bitsPerValue: 16 - filter:param: - "10": - entrypoint: pproc-wind - "*": - entrypoint: pproc-ensms + entrypoint: pproc-ensms + filter:stream: + enfo/waef/eefo/weef: + dtype: float64 + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: "{num_fields}:int" + filter:param: + "10": + metadata: + bitsPerValue: 24 + "*": {} + efhs/wehs/eehs: + filter:steptype: + range: + total_fields: 220 + outputs: + default: + metadata: + localDefinitionNumber: 19 + metadata: + bitsPerValue: 12 + sampleSizeOfModelClimate: "{num_fields}:int" + versionOfModelClimate: 0 + efiOrder: 0 + numberOfReforecastYearsInModelClimate: 20 + accumulations: + date: + operation: "aggregation" + filter:steplength: + "*": + metadata: + numberOfDaysInClimateSamplingWindow: 31 + "168": + metadata: + numberOfDaysInClimateSamplingWindow: 7 + instantaneous: + dtype: float64 + metadata: + perturbationNumber: 0 + numberOfForecastsInEnsemble: "{num_fields}:int" + bitsPerValue: 16 + dataDate: "{date}:int" + accumulations: + step: {} + filter:param: + "129": + metadata: + bitsPerValue: 24 + "*": {} efi/sot/efic: entrypoint: pproc-extreme + dtype: float64 + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" filter:param: - 132044/132059: + "132044": eps: 1e-4 + preprocessing: + - operation: mask + select: {param: "228036"} + mask: [{param: "228035"}, "<=", 10] + accumulations: + step: + operation: maximum + metadata: + typeOfStatisticalProcessing: 1 + edition: 1 + bitsPerValue: 12 + indicatorOfTypeOfLevel: 1 + localDefinitionNumber: 19 + "132059": + eps: 1e-4 + preprocessing: + - operation: mask + select: {param: "228035"} + mask: [{param: "228035"}, "<=", 10] accumulations: step: - type: legacywindow operation: maximum - 132045/132165/132167: + metadata: + typeOfStatisticalProcessing: 1 + edition: 1 + bitsPerValue: 12 + indicatorOfTypeOfLevel: 1 + localDefinitionNumber: 19 + "132045": eps: -1e-4 + preprocessing: + - operation: norm accumulations: step: - type: legacywindow operation: mean - 132049/132201/132216: + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + timeRangeIndicator: 3 + stepType: avg + 132165/132167: eps: -1e-4 accumulations: step: - type: legacywindow + operation: mean + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + timeRangeIndicator: 3 + stepType: avg + 132049/132201: + eps: -1e-4 + accumulations: + step: + operation: maximum + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + "132216": + eps: 1e-4 + preprocessing: + - operation: mask + select: {param: "140229"} + mask: [{param: "140229"}, "<=", 0.1] + accumulations: + step: operation: maximum + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 "132144": eps: 1e-4 accumulations: step: - type: legacywindow operation: difference - include_start: true + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + timeRangeIndicator: 5 + stepType: diff "132202": eps: -1e-4 accumulations: step: - type: legacywindow operation: minimum + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 "132228": eps: 1e-4 accumulations: step: - type: legacywindow operation: difference - include_start: true + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + timeRangeIndicator: 5 + stepType: diff filter:stream: "*": {} "eefo": - preprocessing: - - scale: + preprocessing: + - operation: scale value: 604800000 ep: entrypoint: pproc-probabilities - filter:param: - "131060": - accumulations: - step: - type: legacywindow - operation: difference - include_start: true - threshold: - comparison: ">=" - value: 0.001 - local_scale_factor: 3 - "131061": - accumulations: - step: - type: legacywindow - operation: difference - include_start: true - threshold: - comparison: ">=" - value: 0.005 - local_scale_factor: 3 - "131062": - accumulations: - step: - type: legacywindow - operation: difference - include_start: true - threshold: - comparison: ">=" - value: 0.01 - local_scale_factor: 3 - "131063": - accumulations: - step: - type: legacywindow - operation: difference - include_start: true - threshold: - comparison: ">=" - value: 0.02 - local_scale_factor: 3 - "131098": + dtype: float64 + filter:steptype: + instantaneous: accumulations: step: type: legacywindow - operation: difference - include_start: true - threshold: - comparison: ">=" - value: 0.025 - local_scale_factor: 3 - metadata: - scaleFactorOfLowerLimit: 0 - "131099": + range: accumulations: step: type: legacywindow - operation: difference - include_start: true - threshold: - comparison: ">=" - value: 0.05 - local_scale_factor: 3 - metadata: - scaleFactorOfLowerLimit: 0 - "131085": + name: + type: default + length: "{steplength}:int" + filter:param: + "131060/131061/131062/131063/131064": accumulations: step: - type: legacywindow operation: difference - include_start: true - threshold: - comparison: ">=" - value: 0.1 - local_scale_factor: 3 - metadata: - scaleFactorOfLowerLimit: 0 - "131064": + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + timeRangeIndicator: 5 + stepType: diff + "131098/131099/131085": accumulations: step: - type: legacywindow operation: difference - include_start: true - threshold: - comparison: '<' - value: 0.0001 - local_scale_factor: 4 - "131065": - accumulations: - step: - type: legacywindow - operation: difference_rate - factor: 0.041666666666666664 - include_start: true - threshold: - comparison: '<' - value: 0.001 - local_scale_factor: 4 - "131066": + metadata: + localDefinitionNumber: 5 + stepType: "accum" + stepRange: "0-0" + edition: 2 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 12 + packingType: "grid_ccsds" + bitsPerValue: 8 + "131065/131066/131067": accumulations: step: - type: legacywindow operation: difference_rate factor: 0.041666666666666664 - include_start: true - threshold: - comparison: '>=' - value: 0.003 - local_scale_factor: 4 - "131067": + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + timeRangeIndicator: 5 + stepType: diff + "131068/131069": + preprocessing: + - operation: norm accumulations: step: - type: legacywindow - operation: difference_rate - factor: 0.041666666666666664 - include_start: true - threshold: - comparison: '>=' - value: 0.005 - local_scale_factor: 4 - "131068": - accumulations: - step: - type: legacywindow operation: maximum - threshold: - comparison: ">=" - value: 10 - "131069": - accumulations: + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + "131070/131071/131072/131074/131075/131076/131077/131078/131079/131080/131081": + accumulations: step: - type: legacywindow operation: maximum - threshold: - comparison: ">=" - value: 15 - "131070": - accumulations: + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + "131073": + accumulations: step: - type: legacywindow - operation: maximum - threshold: - comparison: ">=" - value: 15 - "131071": - accumulations: + operation: minimum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + "131100": + accumulations: step: - type: legacywindow operation: maximum - threshold: - comparison: ">=" - value: 20 - "131072": - accumulations: + metadata: + localDefinitionNumber: 5 + edition: 2 + productDefinitionTemplateNumber: 9 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 12 + typeOfTimeIncrement: 2 + packingType: "grid_ccsds" + bitsPerValue: 8 + 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + config: anomaly + filter:param: + "131020/131021": + accumulations: + step: + operation: "mean" + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + "131022/131023": + accumulations: + step: + operation: minimum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + "131024/131025": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + "133093/133094/133095": + accumulations: + step: + operation: maximum + std_anomaly: true + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 + "133096/133097/133098": + accumulations: + step: + operation: minimum + std_anomaly: true + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 + "260290": + metadata: + edition: 2 + productDefinitionTemplateNumber: 5 + typeOfGeneratingProcess: 5 + filter:selection: + "default": + filter:param: + "131060": + threshold: + comparison: ">=" + value: 0.001 + scale_factor: 3 + "131061": + threshold: + comparison: ">=" + value: 0.005 + scale_factor: 3 + "131062": + threshold: + comparison: ">=" + value: 0.01 + scale_factor: 3 + "131063": + threshold: + comparison: ">=" + value: 0.02 + scale_factor: 3 + "131098": + threshold: + comparison: ">=" + value: 0.025 + scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131099": + threshold: + comparison: ">=" + value: 0.05 + scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131085": + threshold: + comparison: ">=" + value: 0.1 + scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131064": + threshold: + comparison: '<' + value: 0.0001 + scale_factor: 4 + "131065": + threshold: + comparison: '<' + value: 0.001 + scale_factor: 4 + "131066": + threshold: + comparison: '>=' + value: 0.003 + scale_factor: 4 + "131067": + threshold: + comparison: '>=' + value: 0.005 + scale_factor: 4 + "131068": + threshold: + comparison: ">=" + value: 10 + "131069": + threshold: + comparison: ">=" + value: 15 + "131070": + threshold: + comparison: ">=" + value: 15 + "131071": + threshold: + comparison: ">=" + value: 20 + "131072": + threshold: + comparison: ">=" + value: 25 + "131100": + threshold: + comparison: ">=" + value: 10 + "131074": + threshold: + comparison: ">=" + value: 2 + "131075": + threshold: + comparison: ">=" + value: 4 + "131076": + threshold: + comparison: ">=" + value: 6 + "131077": + threshold: + comparison: ">=" + value: 8 + "131078": + threshold: + comparison: ">=" + value: 8 + "131079": + threshold: + comparison: ">=" + value: 10 + "131080": + threshold: + comparison: ">=" + value: 12 + "131081": + threshold: + comparison: ">=" + value: 15 + "131073": + threshold: + comparison: "<=" + value: 273.15 + scale_factor: 2 + "131020": + threshold: + comparison: "<" + value: -2 + "131021": + threshold: + comparison: ">=" + value: 2 + "131022": + threshold: + comparison: "<" + value: -8 + "131023": + threshold: + comparison: "<" + value: -4 + "131024": + threshold: + comparison: ">" + value: 4 + "131025": + threshold: + comparison: ">" + value: 8 + "133093": + threshold: + comparison: '>' + value: 1 + "133094": + threshold: + comparison: '>' + value: 1.5 + scale_factor: 1 + metadata: + scaleFactorOfLowerLimit: 1 + "133095": + threshold: + comparison: '>' + value: 2 + "133096": + threshold: + comparison: '<' + value: -1 + limit_type: lower + "133097": + threshold: + comparison: '<' + value: -1.5 + scale_factor: 1 + limit_type: lower + metadata: + scaleFactorOfLowerLimit: 1 + "133098": + threshold: + comparison: '<' + value: -2 + limit_type: lower + "eccharts": + filter:param: + "131060": + threshold: + comparison: ">=" + value: "{threshold}:float" + scale_factor: 3 + "260290": + threshold: "{threshold}" + fcmean: + filter:param: + 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: + filter:stream: + eefo: + entrypoint: pproc-anomaly + dtype: float64 + metadata: + bitsPerValue: 24 + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + metadata: + timeRangeIndicator: 3 + stepType: avg + clim: + accumulations: + step: {} + levelist: {} + date: + operation: mean + "*": + dtype: float64 + filter:stream: + enfo/waef/eefo/weef: + entrypoint: pproc-accumulate + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + operation: mean + metadata: + bitsPerValue: 16 + legBaseDate: 0 + legNumber: 0 + stepType: avg + type: fcmean + filter:param: + "*": + accumulations: + step: + metadata: + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "201": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 201 + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "202": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 202 + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "235117": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + edition: 2 + paramId: 235117 + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 0 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + "enfh/enwh/eefh/weeh": + entrypoint: pproc-accumulate + filter:selection: + mclimate: + dtype: float32 + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + levelist: {} + hdate: {} + filter:param: + "140229": + preprocessing: + - operation: mask + select: {param: "140229"} + mask: [{param: "140229"}, "<=", 0.1] + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 2 + stepType: max + "123": + vmin: 0. + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 2 + stepType: max + "140249": + vmin: 0. + vmax: 360. + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + "162071": + preprocessing: + - operation: norm + accumulations: + step: + metadata: + edition: 1 + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 3 + stepType: avg + "164": + vmin: 0. + vmax: 1. + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 3 + stepType: avg + "167": + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 3 + stepType: avg + "228/144": + vmin: 0. + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 5 + stepType: diff + "121": + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 2 + stepType: max + "122": + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 2 + "207": + vmin: 0. + preprocessing: + - operation: norm + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 3 + stepType: avg + "228044": + vmin: 0 + preprocessing: + - operation: mask + select: {param: "228036"} + mask: [{param: "228035"}, "<=", 10] + accumulations: + step: + metadata: + typeOfStatisticalProcessing: 1 + edition: 1 + bitsPerValue: 12 + indicatorOfTypeOfLevel: 1 + type: fcmean + timeRangeIndicator: 2 + stepType: max + "59": + vmin: 0 + preprocessing: + - operation: mask + select: {param: "228035"} + mask: [{param: "228035"}, "<=", 10] + accumulations: + step: + metadata: + typeOfStatisticalProcessing: 1 + edition: 1 + bitsPerValue: 12 + indicatorOfTypeOfLevel: 1 + type: fcmean + timeRangeIndicator: 2 + stepType: max + filter:steplength: + "*": + filter:param: + "228/144": + accumulations: + step: + operation: difference + metadata: + numberIncludedInAverage: "{num_coords}:int" + "123/140229/121/228044/59": + accumulations: + step: + operation: maximum + metadata: + numberIncludedInAverage: "{num_coords}:int" + "122": + accumulations: + step: + operation: minimum + metadata: + numberIncludedInAverage: "{num_coords}:int" + "164/167/162071/207": + accumulations: + step: + operation: mean + metadata: + numberIncludedInAverage: "{num_coords}:int" + "140249": + accumulations: + step: + operation: aggregation + metadata: + numberIncludedInAverage: "{num_coords}:int" + "168": + accumulations: + step: + operation: aggregation + filter:param: + "228": + preprocessing: + - operation: scale + value: 604800000 + "167": {} + "*": + accumulations: + hdate: {} + levelist: {} + step: + type: legacywindow + operation: mean + name: + type: default + length: "{steplength}:int" + metadata: + bitsPerValue: 16 + legBaseDate: 0 + legNumber: 0 + stepType: avg + type: fcmean + filter:param: + "*": + accumulations: + step: + metadata: + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "201": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 201 + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "202": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 202 + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "235117": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + edition: 2 + paramId: 235117 + stepType: avg + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 0 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: + step: + type: legacywindow + operation: mean + name: + type: monthly + date: "{date}:str" + metadata: + type: fcmean + bitsPerValue: 16 + fcstdev: + dtype: float64 + filter:stream: + oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: + entrypoint: pproc-accumulate + filter:stream: + enfh/enwh/eefh/weeh: + accumulations: + hdate: {} + "*": {} + accumulations: + levelist: {} step: type: legacywindow - operation: maximum - threshold: - comparison: ">=" - value: 25 - "131100": - accumulations: + operation: standard_deviation + name: + type: default + length: "{steplength}:int" + metadata: + type: fcstdev + bitsPerValue: 16 + legBaseDate: 0 + legNumber: 0 + filter:param: + "*": + accumulations: + step: + metadata: + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "201": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 201 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "202": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 202 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "239117": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + edition: 2 + paramId: 239117 + stepType: sd + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 6 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: step: type: legacywindow - operation: maximum - threshold: - comparison: ">=" - value: 10 - "131074": - accumulations: + operation: standard_deviation + name: + type: monthly + date: "{date}:str" + metadata: + type: fcstdev + bitsPerValue: 16 + fcmin: + dtype: float64 + filter:stream: + oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: + entrypoint: pproc-accumulate + filter:stream: + enfh/enwh/eefh/weeh: + accumulations: + hdate: {} + "*": {} + accumulations: + levelist: {} step: type: legacywindow - operation: maximum - threshold: - comparison: ">=" - value: 2 - "131075": - accumulations: + operation: minimum + name: + type: default + length: "{steplength}:int" + metadata: + type: fcmin + bitsPerValue: 16 + legBaseDate: 0 + legNumber: 0 + filter:param: + "*": + accumulations: + step: + metadata: + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "201": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 201 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "202": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 202 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "238117": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + edition: 2 + paramId: 238117 + stepType: min + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 3 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: step: type: legacywindow - operation: maximum - threshold: - comparison: ">=" - value: 4 - "131076": - accumulations: + operation: minimum + name: + type: monthly + date: "{date}:str" + metadata: + type: fcmin + bitsPerValue: 16 + fcmax: + dtype: float64 + filter:stream: + oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: + entrypoint: pproc-accumulate + filter:stream: + enfh/enwh/eefh/weeh: + accumulations: + hdate: {} + "*": {} + accumulations: + levelist: {} step: type: legacywindow operation: maximum - threshold: - comparison: ">=" - value: 6 - "131077": - accumulations: + name: + type: default + length: "{steplength}:int" + metadata: + type: fcmax + bitsPerValue: 16 + legBaseDate: 0 + legNumber: 0 + filter:param: + "*": + accumulations: + step: + metadata: + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "201": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 201 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "202": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 202 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "237117": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + edition: 2 + paramId: 237117 + stepType: max + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 2 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: step: type: legacywindow operation: maximum - threshold: - comparison: ">=" - value: 8 - "131074": - accumulations: - step: - type: legacywindow - operation: maximum - threshold: - comparison: ">=" - value: 2 - "131075": - accumulations: - step: - type: legacywindow - operation: maximum - threshold: - comparison: ">=" - value: 4 - "131076": - accumulations: - step: - type: legacywindow - operation: maximum - threshold: - comparison: ">=" - value: 6 - "131077": - accumulations: - step: - type: legacywindow - operation: maximum - threshold: - comparison: ">=" - value: 8 - "131073": - accumulations: - step: - type: legacywindow - operation: minimum - threshold: - comparison: "<=" - value: 273.15 - local_scale_factor: 2 - "131020": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - include_start: true - operation: "mean" - threshold: - comparison: "<" - value: -2 - "131021": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - include_start: true - operation: "mean" - threshold: - comparison: ">=" - value: 2 - "131022": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - operation: minimum - threshold: - comparison: "<" - value: -8 - "131023": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - operation: minimum - threshold: - comparison: "<" - value: -4 - "131024": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - operation: maximum - threshold: - comparison: ">" - value: 4 - "131025": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - operation: maximum - threshold: - comparison: ">" - value: 8 - "133093": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - operation: maximum - std_anomaly: true - threshold: - comparison: '>' - value: 1 - "133094": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - operation: maximum - std_anomaly: true - threshold: - comparison: '>' - value: 1.5 - local_scale_factor: 1 - metadata: - scaleFactorOfLowerLimit: 1 - "133095": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - operation: maximum - std_anomaly: true - threshold: - comparison: '>' - value: 2 - "133096": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - operation: minimum - std_anomaly: true - threshold: - comparison: '<' - value: -1 - limit_type: lower - "133097": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - operation: minimum - std_anomaly: true - threshold: - comparison: '<' - value: -1.5 - local_scale_factor: 1 - metadata: - scaleFactorOfLowerLimit: 1 - limit_type: lower - "133098": - entrypoint: pproc-anomaly-probabilities - accumulations: - step: - type: legacywindow - operation: minimum - std_anomaly: true - threshold: - comparison: '<' - value: -2 - limit_type: lower - fcmean: - dtype: float64 - filter:stream: - "enfo/waef/eefo/weef/enfh/enwh": - entrypoint: pproc-accumulate - accumulations: - step: - type: legacywindow - operation: mean + name: + type: monthly + date: "{date}:str" metadata: - type: fcmean + type: fcmax + bitsPerValue: 16 + pb: + entrypoint: pproc-quantiles + filter:stream: + enfo/waef: + metadata: + localDefinitionNumber: 30 + "*": {} + taem/taes: + filter:stream: + eefo: filter:param: - "*": {} + 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: + entrypoint: pproc-anomaly + dtype: float64 + metadata: + bitsPerValue: 24 + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + metadata: + timeRangeIndicator: 3 + stepType: avg + clim: + accumulations: + date: + operation: mean + 234167/234139/234151/234228: + entrypoint: pproc-significance + epsilon: 1e-10 + use_clim_anomaly: true + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + metadata: + timeRangeIndicator: 3 + stepType: avg + clim: + total_fields: 220 + accumulations: + date: + operation: aggregation + clim_em: + accumulations: + date: + operation: aggregation "235117": + entrypoint: pproc-ensms + dtype: float64 + outputs: + default: + metadata: + edition: 2 + productDefinitionTemplateNumber: 12 + mean: + metadata: + derivedForecast: 0 + type: taem + std: + metadata: + derivedForecast: 4 + type: taes metadata: - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 0 - msmm/swmm: - entrypoint: pproc-monthly-stats - accumulations: - step: - type: legacywindow - operation: mean + typeOfGeneratingProcess: 4 + typeOfTimeIncrement: 2 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + bitsPerValue: 16 + packingType: "grid_ccsds" + "*": + entrypoint: pproc-ensms + outputs: + mean: + metadata: + type: taem + std: + metadata: + type: taes + dtype: float64 metadata: - type: fcmean - metadata: - bitsPerValue: 16 - fcstdev: - dtype: float64 - filter:stream: - "enfo/waef/eefo/weef/enfh/enwh": - entrypoint: pproc-accumulate + perturbationNumber: 0 + bitsPerValue: 16 + timeRangeIndicator: 3 + stepType: "avg" + efhs/eehs: + entrypoint: pproc-ensms + dtype: float64 accumulations: - step: - type: legacywindow - operation: standard_deviation + step: {} + levelist: {} + hdate: + operation: aggregation metadata: - type: fcstdev + climateDateFrom: "{start_coord}:int" + climateDateTo: "{end_coord}:int" filter:param: - "*": {} - "239117": + "235117": + outputs: + default: + metadata: + edition: 2 + productDefinitionTemplateNumber: 11 + mean: + metadata: + type: taem + std: + metadata: + type: taes metadata: - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 6 - msmm/swmm: - entrypoint: pproc-monthly-stats - accumulations: - step: - type: legacywindow - operation: standard_deviation + perturbationNumber: 0 + numberOfForecastsInEnsemble: "{num_fields}:int" + yearOfEndOfOverallTimeInterval: "{year}:int" + typeOfGeneratingProcess: 4 + typeOfTimeIncrement: 3 + dataDate: "{date}:int" + bitsPerValue: 16 + packingType: "grid_ccsds" + "*": + outputs: + mean: + metadata: + type: taem + std: + metadata: + type: taes metadata: - type: fcstdev - metadata: - bitsPerValue: 16 - fcmin: - dtype: float64 + perturbationNumber: 0 + numberOfForecastsInEnsemble: "{num_fields}:int" + bitsPerValue: 16 + timeRangeIndicator: 3 + stepType: avg + dataDate: "{date}:int" + cd: filter:stream: - "enfo/waef/eefo/weef/enfh/enwh": - entrypoint: pproc-accumulate - accumulations: - step: - type: legacywindow - operation: minimum + efhs/wehs/eehs: + entrypoint: pproc-quantiles + total_fields: 220 + outputs: + quantiles: metadata: - type: fcmin + localDefinitionNumber: 19 + type: cd + metadata: + bitsPerValue: 12 + sampleSizeOfModelClimate: "{num_fields}:int" + versionOfModelClimate: 0 + efiOrder: 0 + numberOfReforecastYearsInModelClimate: 20 filter:param: - "*": {} - "238117": + "140249": + entrypoint: pproc-histogram + outputs: + histogram: + metadata: + localDefinitionNumber: 19 + type: cd + total_fields: 880 + bins: [-22.5, 22.5, 67.5, 112.5, 157.5, 202.5, 247.5, 292.5, 337.5] + mod: 360. + normalise: true + scale_out: 200. metadata: - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 3 - msmm/swmm: - entrypoint: pproc-monthly-stats + numberOfDaysInClimateSamplingWindow: 31 + sampleSizeOfModelClimate: 1980 + accumulations: + date: + operation: "sum" + "*": + filter:param: + "140200": # TODO: Remove after 50r1 + preprocessing: + - operation: mask + select: {param: "229.140"} + mask: [{param: "229.140"}, "<=", 0.1] + "*": {} + accumulations: + date: + operation: "aggregation" + filter:steplength: + "*": + metadata: + numberOfDaysInClimateSamplingWindow: 31 + "168": + metadata: + numberOfDaysInClimateSamplingWindow: 7 + pfc: + entrypoint: pproc-quantiles + outputs: + quantiles: + metadata: + edition: 2 + productDefinitionTemplateNumber: 90 + type: pfc + typeOfGeneratingProcess: 13 + typeOfPostProcessing: 206 + filter:class: + od: + outputs: + quantiles: + metadata: + typeOfProcessedData: 5 accumulations: - step: - type: legacywindow - operation: minimum + step: {} + number: + operation: aggregation + ea: + outputs: + quantiles: metadata: - type: fcmin + typeOfProcessedData: 1 + total_fields: 100 + gwt: + metadata_from_output: ["param", "date"] + entrypoint: pproc-ecpoint + outputs: + default: metadata: - bitsPerValue: 16 - fcmax: - dtype: float64 - filter:stream: - "enfo/waef/eefo/weef/enfh/enwh": - entrypoint: pproc-accumulate - accumulations: - step: - type: legacywindow - operation: maximum + edition: 2 + bitsPerValue: 24 + generatingProcessIdentifier: 3 + bias_corrected: + metadata: + type: gbf + weather_types: + metadata: + type: gwt + filter:class: + od: + outputs: + bias_corrected: metadata: - type: fcmax + numberOfForecastsInEnsemble: 51 # TODO: Remove in 50r2 when oper/fc encodes this correctly + weather_types: + metadata: + numberOfForecastsInEnsemble: 51 + members: + metadata: + grib2LocalSectionNumber: 1 + type: fcmean + filter:stream: + oper: + outputs: + members: + metadata: + stream: enfo + enfo: {} filter:param: - "*": {} - "237117": + "228": + predictant: tp + min_predictant: 0.04 + scale_outputs: 0.001 + interp_keys: + legendre-loader: "shmem" + matrix-loader: "file-io" + interpolation: grid-box-average + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + type: legacywindow + operation: difference + name: + type: default + length: "{steplength}:int" + metadata: + stepType: accum + filter:steplength: + "6": + num_inputs: 7 + predictors: ["cp_ratio", "tp", "mxcape6", "2t", "local_solar_time", "ws", "cdir"] + dependencies: + wind: + vod2uv: true + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + cp: + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + operation: difference + cdir: + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + operation: difference + cape: + accumulations: + step: + type: legacywindow + operation: maximum + 2t: + preprocessing: + - operation: expression + expr: t2_k - d2_k + expr_data: + t2_k: + param: '167' + d2_k: + param: '168' + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + "12": + num_inputs: 7 + predictors: ["cp_ratio", "tp", "mxcape6", "2t", "ws", "cdir"] + dependencies: + wind: + vod2uv: true + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + cp: + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + operation: difference + cdir: + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + operation: difference + cape: + accumulations: + step: + type: legacywindow + operation: maximum + 2t: + preprocessing: + - operation: expression + expr: t2_k - d2_k + expr_data: + t2_k: + param: '167' + d2_k: + param: '168' + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + "24": + num_inputs: 7 + predictors: ["cp_ratio", "tp", "mxcape6", "2t", "ws", "cdir"] + dependencies: + wind: + vod2uv: true + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + cp: + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + operation: difference + cdir: + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + operation: difference + cape: + accumulations: + step: + type: legacywindow + operation: maximum + 2t: + preprocessing: + - operation: expression + expr: t2_k - d2_k + expr_data: + t2_k: + param: '167' + d2_k: + param: '168' + accumulations: + step: + operation: weighted_mean + weights: [0.125, 0.25, 0.25, 0.25, 0.125] + ea: + outputs: + default: metadata: - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 2 - msmm/swmm: - entrypoint: pproc-monthly-stats - accumulations: - step: - type: legacywindow - operation: maximum + productionStatusOfProcessedData: 3 + typeOfTimeIncrement: 1 + bias_corrected: metadata: - type: fcmax - metadata: - bitsPerValue: 16 - pb: - entrypoint: pproc-quantiles + productDefinitionTemplateNumber: 72 + weather_types: + metadata: + productDefinitionTemplateNumber: 72 + filter:param: + "228": + predictant: tp + min_predictant: 0.04 + scale_outputs: 0.001 + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + type: legacywindow + operation: sum + name: + type: default + length: "{steplength}:int" + metadata: + stepType: accum + filter:steplength: + "12/24": + num_inputs: 8 + predictors: ["cp_ratio", "lsm", "sdfor", "tp", "ws", "cape", "cdir", "2r"] + dependencies: + wind: + preprocessing: + actions: + - operation: norm + output: + paramId: 10 + accumulations: + step: + type: legacywindow + operation: mean + cp: + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + type: legacywindow + operation: sum + cdir: + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + type: legacywindow + operation: sum + cape: + accumulations: + step: + type: legacywindow + operation: maximum + r2: + preprocessing: + actions: + - operation: expression + expr: (100 * (((112 - (0.1 * (t2_k - 273.17)) + ( d2_k - 273.15)) / (112 + (0.9 * (t2_k - 273.17)))) ** 8)) + 0.5 + expr_data: + t2_k: + param: '167.128' + d2_k: + param: '168.128' + dtype: "int64" + output: + edition: 2 + paramId: 260242 + accumulations: + step: + type: legacywindow + operation: maximum + sdfor: + accumulations: null + lsm: + accumulations: null + "201": + predictant: mx2t + min_predictant: null + scale_outputs: null + accumulations: + step: + type: legacywindow + operation: maximum + name: + type: default + length: "{steplength}:int" + metadata: + stepType: max + filter:steplength: + "24": + num_inputs: 11 + predictors: + - lsm + - sdfor + - vegdiff + - cdir + - mx2t + - tp + - {expr: "((sd * 1000)/rsn)*100", expr_data: {sd: {param: sd}, rsn: {param: rsn}}} + - rsn + - {expr: "swv * 1000", expr_data: {swv: {param: swvl1}}} + - 100si + dependencies: + tp: + accumulations: + step: + type: legacywindow + operation: filter + filter_op: max + filter_index: -1 + preprocessing: + actions: + - operation: scale + value: 1000 + - operation: reshape + shape: 1 + filtered: + accumulations: + step: + operation: filter + filter_op: max + filter_index: -1 + neighbours: [-1] + neighbours_op: mean + preprocessing: + actions: + - operation: reshape + shape: 1 + cdir: + preprocessing: + actions: + - operation: scale + value: 1.157407e-05 + accumulations: + step: + type: legacywindow + operation: sum + sdfor: + accumulations: null + lsm: + accumulations: null + urbanfrac: + accumulations: null + "202": + predictant: mn2t + min_predictant: null + scale_outputs: null + accumulations: + step: + type: legacywindow + operation: minimum + name: + type: default + length: "{steplength}:int" + metadata: + stepType: min + filter:steplength: + "24": + num_inputs: 15 + predictors: + - lsm + - sdfor + - vegdiff + - mn2t + - {expr: "((sd * 1000)/rsn)*100", expr_data: {sd: {param: sd}, rsn: {param: rsn}}} + - lai + - {expr: "t2m - skt", expr_data: {t2m: {param: 2t}, skt: {param: skt}}} + - 100si + - lcc + dependencies: + filtered: + accumulations: + step: + operation: filter + filter_op: min + filter_index: -1 + neighbours: [-1] + neighbours_op: mean + preprocessing: + actions: + - operation: reshape + shape: 1 + sdfor: + accumulations: null + lsm: + accumulations: null + urbanfrac: + accumulations: null + lai: + preprocessing: + actions: + - operation: reshape + shape: 1 + accumulations: null + cm/cr: + entrypoint: pproc-clustereps + step_del: 12 + bbox: + lat_n: 75.0 + lat_s: 30.0 + lon_w: 340.0 + lon_e: 40.0 + max_anom: 10000. + num_components: 50 + var_th: 80.0 + ncl_max: 6 + init: sector + npass: 100 + nrsamples: 500 + max_sig: 95.0 + med_sig: 90.0 + min_sig: 55.0 + sig_tol: 3.0 + ncl_clim: 4 + clim_means: "{season}_means.grd" + clim_pcs: "{season}_pcs.gts" + clim_sdv: "{season}_sdv.gts" + clim_eof: "{season}_eof.grd" + clim_cluster_index: "era_clind_{season}.gts" + clim_cluster_centroids_eof: "era_clcen_eof_{season}.gts" + seasons: + - [5, 9] + - [10, 4] + generate_dummy: true + deterministic_is_control: true + compute_spread: true windows: defs: width6: @@ -673,52 +1902,50 @@ windows: interval: 6 start: 144 filter:stream: - oper: - in_steps: - - from: 0 - to: 90 - by: 1 - - from: 90 - to: 144 - by: 3 - - from: 144 - to: 360 - by: 6 + oper/wave: + filter:time: + "0000/1200": &mr_steps + in_steps: + - from: 0 + to: 90 + by: 1 + - from: 90 + to: 144 + by: 3 + - from: 144 + to: 360 + by: 6 + "0600/1800": &bc_steps + in_steps: + - from: 0 + to: 90 + by: 1 + - from: 90 + to: 144 + by: 3 enfo/waef: - in_steps: - - from: 0 - to: 90 - by: 1 - - from: 90 - to: 144 - by: 3 - - from: 144 - to: 360 - by: 6 - eefo/weef: + filter:time: + "0000/1200": *mr_steps + "0600/1800": *bc_steps + eefo/weef/eefh/weeh/eehs: in_steps: - from: 0 to: 1104 by: 6 - msmm/swmm: + msmm/swmm: in_steps: - from: 0 to: 5160 by: 6 - efhs/wehs: + enfh/enwh/efhs/wehs: in_steps: - from: 0 to: 360 by: 6 - eehs: - in_steps: - - from: 0 - to: 1104 - by: 6 filter:type: em/es/pb: filter:stream: - enfo: + enfo/waef: filter:param: "*": out_steps: @@ -735,12 +1962,12 @@ windows: out_steps: type: instantaneous interval: 3 - eefo: + eefo/weef: type: instantaneous - efhs/wehs: + efhs/wehs/eehs: out_steps: type: instantaneous - interval: 12 + interval: 6 fc/cf/pf: filter:stream: "*": @@ -754,25 +1981,94 @@ windows: deaccumulate: true fcmean/fcstdev/fcmax/fcmin: filter:stream: - "enfo/eefo/oper": + "enfo/eefo/oper/eefh/weef": out_steps: type: range - interval: 24 + interval: 24 width: 168 + "enfh/enwh": + out_steps: + filter:param: + "*": + out_steps: + - type: range + width: 24 + interval: 24 + - type: range + width: 72 + end: 240 + interval: 24 + end: 216 + - type: range + width: 120 + end: 240 + interval: 24 + - "0-240" + - "0-360" + - "240-360" + 121/122/123/140229/59/228044/140249/164: + out_steps: + type: range + end: 168 + width: 24 + interval: 24 + "eefh/weeh": + filter:param: + "*": + out_steps: + type: range + interval: 24 + width: 168 "msmm": out_steps: type: monthly date: "{date}" + taem/taes: + filter:stream: + "enfo/eefo/oper/efhs/eehs": + out_steps: + type: range + interval: 24 + width: 168 ep: filter:stream: - enfo: + enfo: filter:param: 131060/131061/131062/131063/131098/131099/131085/131070/131071/131072/131100: out_steps: type: range width: 24 interval: 12 - 131064/131065/131066/131067/131070/131071/131072/131100/131074/131075/131076/131077/131078/131079/131080/131081/131020/131021/131073: + 131064/131065/131066/131067/131070/131071/131072/131100/131020/131021/131073: + out_steps: + - type: range + width: 120 + start: 120 + interval: 120 + - "120-168" + - "168-240" + 131068/131069/131073/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + out_steps: + type: instantaneous + start: 12 + interval: 12 + "260290": + out_steps: + - type: instantaneous + start: 0 + end: 90 + interval: 1 + - type: instantaneous + start: 91 + end: 144 + interval: 3 + - type: instantaneous + start: 150 + end: 360 + interval: 6 + waef: + filter:param: + 131074/131075/131076/131077/131078/131079/131080/131081: out_steps: - type: range width: 120 @@ -780,23 +2076,23 @@ windows: interval: 120 - "120-168" - "168-240" - 131068/131069/131074/131075/131076/131077/131078/131079/131080/131081/131073/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + 131074/131075/131076/131077/131078/131079/131080/131081: out_steps: type: instantaneous start: 12 interval: 12 efi/efic/sot: filter:stream: - "eefo": + "eefo/weef": out_steps: type: range - interval: 24 + interval: 24 width: 168 - "enfo": + "enfo/waef": filter:param: "*": - time: - "12": + filter:time: + "1200": out_steps: - type: range start: 12 @@ -821,7 +2117,7 @@ windows: - "0-240" - "0-360" - "240-360" - "00": + "0000": out_steps: - type: range width: 24 @@ -838,21 +2134,33 @@ windows: - "0-240" - "0-360" - "240-360" - 121/122/123/140229/228035/228036: - time: - "12": + "0600/1800": + out_steps: + - type: range + width: 24 + end: 144 + interval: 12 + 132201/132202/132049/132144/132216/132059/132044: + filter:time: + "1200": out_steps: type: range start: 12 end: 180 width: 24 interval: 24 - "00": + "0000": out_steps: type: range end: 168 width: 24 - interval: 24 + interval: 24 + "0600/1800": + out_steps: + - type: range + width: 24 + end: 144 + interval: 12 cd: filter:stream: efhs/wehs: @@ -898,121 +2206,243 @@ windows: out_steps: type: range width: 24 - interval: 12 + interval: 12 eehs: out_steps: type: range width: 168 - interval: 24 + interval: 24 + gwt/pfc: + filter:param: + "228/201/202": + out_steps: + type: range + width: 12 + interval: 6 + cm/cr: + filter:stream: + enfo: + in_steps: + - from: 0 + to: 360 + by: 12 + out_steps: + - "72-96" + - "120-168" + - "192-240" + - "240-360" inputs: filter:stream: - oper: + oper: filter:type: - fc/fcmean/fcstdev/fcmin/fcmax: + fc/fcmean/fcstdev/fcmin/fcmax/pfc/gwt: forecast: inputs: - request: + request: &oper_fc stream: oper type: fc + wave: + filter:type: + fc/fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: &wave_fc + stream: wave + type: fc enfo: filter:type: - "em/es/pb/fcmean/fcstdev/fcmin/fcmax/efi/sot": + "em/pb/efi/sot/ep": forecast: inputs: - - request: - stream: enfo - type: "cf" - - request: + - request: *oper_fc + - request: &enfo_pf stream: enfo type: "pf" - members: + members: &enfo_members start: 1 end: 50 - "cf/efic": + "es": + filter:selection: + "*": + forecast: + inputs: + - request: *oper_fc + - request: *enfo_pf + members: *enfo_members + "clust-warmup-50r1-bc": + filter:time: + "0600/1800": + from_inputs: false + forecast: + inputs: + - request: + stream: scda + type: fc + - request: *enfo_pf + members: *enfo_members + cm/cr: forecast: inputs: - request: - stream: enfo - type: "cf" - "pf/ep": + - request: + <<: *oper_fc + domain: "g" + target_grid: 1.5/1.5 + derive_step: + type: default + include_start: true + - request: + <<: *enfo_pf + domain: "g" + target_grid: 1.5/1.5 + derive_step: + type: default + include_start: true + members: *enfo_members + climatology: + inputs: + - request: + domain: "g" + stream: enfo + type: "es" + "efic": forecast: inputs: - request: - stream: enfo - type: "pf" - members: - start: 1 - end: 50 - climatology: - inputs: - request: - stream: "efhs" - time: "00" - scheme: ecmwf-4days - waef: - filter:type: - em/es/pb/fcmean/fcstdev/fcmin/fcmax/efi/sot: + request: *oper_fc + "pf/gwt": forecast: inputs: - - request: - stream: waef - type: "cf" - - request: + request: *enfo_pf + members: *enfo_members + fcmean/fcstdev/fcmin/fcmax: + filter:members: + only_zero: + forecast: + inputs: + request: *oper_fc + no_zero: + forecast: + inputs: + request: *enfo_pf + members: *enfo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *oper_fc + - request: *enfo_pf + members: *enfo_members + pfc: + forecast: + inputs: + request: + stream: enfo + type: fcmean + members: + start: 0 + end: 50 + climatology: + inputs: + request: + stream: "efhs" + time: "0000" + scheme: ecmwf-4days + waef: + filter:type: + em/es/pb/efi/sot/ep: + forecast: + inputs: + - request: *wave_fc + - request: &waef_pf stream: waef type: "pf" - members: - start: 1 - end: 50 - "cf/efic": + members: *enfo_members + "efic": forecast: inputs: - request: - stream: waef - type: "cf" - "pf/ep": + request: *wave_fc + "pf": forecast: inputs: - request: - stream: waef - type: "pf" - members: - start: 1 - end: 50 - climatology: + request: *waef_pf + members: *enfo_members + fcmean/fcstdev/fcmin/fcmax: + filter:members: + only_zero: + forecast: + inputs: + request: *wave_fc + no_zero: + forecast: + inputs: + request: *waef_pf + members: *enfo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *wave_fc + - request: *waef_pf + members: *enfo_members + climatology: inputs: request: stream: "wehs" - time: "00" + time: "0000" scheme: ecmwf-4days eefo: filter:type: - "em/es/pb/fcmean/fcstdev/fcmin/fcmax": + "em/es/pb": forecast: inputs: - - request: + - request: &eefo_cf stream: eefo type: "cf" - - request: + - request: &eefo_pf stream: eefo type: "pf" - members: + members: &eefo_members start: 1 end: 100 "cf": forecast: inputs: - request: - stream: eefo - type: "cf" + request: *eefo_cf "pf": forecast: inputs: - request: - stream: eefo - type: "pf" - members: - start: 1 - end: 100 + request: *eefo_pf + members: *eefo_members + fcmean/fcstdev/fcmin/fcmax: + filter:param: + "*": + filter:members: + only_zero: + forecast: + inputs: + request: *eefo_cf + no_zero: + forecast: + inputs: + request: *eefo_pf + members: *eefo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *eefo_cf + - request: *eefo_pf + members: *eefo_members + 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: + filter:type: + fcmean: + forecast: + inputs: + request: + stream: eefo + type: fcmean + members: + start: 0 + end: 100 "efi/sot/taem/taes": forecast: inputs: @@ -1022,44 +2452,53 @@ inputs: members: start: 0 end: 100 - derive_step: - type: default - precomputed: true - climatology: + derive_step: + type: precomputed + climatology: inputs: request: - stream: "eehs" - time: "00" + stream: "eehs" + time: "0000" scheme: ecmwf-2days weef: filter:type: - "em/es/pb/fcmean/fcstdev/fcmin/fcmax": + "em/es/pb": forecast: inputs: - - request: + - request: &weef_cf stream: weef type: "cf" - - request: + - request: &weef_pf stream: weef type: "pf" - members: - start: 1 - end: 100 + members: *eefo_members "cf": forecast: inputs: - request: - stream: weef - type: "cf" + request: *weef_cf "pf": forecast: inputs: - request: - stream: weef - type: "pf" - members: - start: 1 - end: 100 + request: *weef_pf + members: *eefo_members + fcmean/fcstdev/fcmin/fcmax: + filter:members: + only_zero: + forecast: + inputs: + request: *weef_cf + no_zero: + forecast: + inputs: + request: *weef_pf + members: *eefo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *weef_cf + - request: *weef_pf + members: *eefo_members "efi/efic/sot/taem/taes": forecast: inputs: @@ -1069,16 +2508,15 @@ inputs: members: start: 0 end: 100 - derive_step: - type: default - precomputed: true - climatology: + derive_step: + type: precomputed + climatology: inputs: request: - stream: "wees" - time: "00" + stream: "wees" + time: "0000" scheme: ecmwf-2days - msmm: + msmm: filter:type: "fcmean/fcstdev/fcmin/fcmax": forecast: @@ -1089,7 +2527,7 @@ inputs: members: start: 0 end: 50 - swmm: + swmm: filter:type: "fcmean/fcstdev/fcmin/fcmax": forecast: @@ -1100,37 +2538,260 @@ inputs: members: start: 0 end: 50 + enfh: + filter:type: + "fcmean/fcstdev/fcmax/fcmin": + filter:members: + only_zero: + forecast: + inputs: + request: &enfh_cf + stream: enfh + type: "cf" + time: "0000" + scheme: &enfh_scheme ecmwf-4days + no_zero: + forecast: + inputs: + request: &enfh_pf + stream: enfh + type: "pf" + time: "0000" + members: &enfh_members + start: 1 + end: 10 + scheme: *enfh_scheme + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *enfh_cf + - request: *enfh_pf + members: *enfh_members + scheme: *enfh_scheme + enwh: + filter:type: + "fcmean/fcstdev/fcmax/fcmin": + filter:members: + only_zero: + forecast: + inputs: + request: &enwh_cf + stream: enwh + type: "cf" + time: "0000" + scheme: *enfh_scheme + no_zero: + forecast: + inputs: + request: &enwh_pf + stream: enwh + type: "pf" + time: "0000" + members: *enfh_members + scheme: *enfh_scheme + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *enwh_cf + - request: *enwh_pf + members: *enfh_members + scheme: *enfh_scheme + eefh: + filter:type: + "fcmean/fcstdev/fcmax/fcmin": + filter:members: + only_zero: + forecast: + inputs: + request: &eefh_cf + stream: eefh + type: "cf" + time: "0000" + scheme: &eefh_scheme ecmwf-2days + no_zero: + forecast: + inputs: + request: &eefh_pf + stream: eefh + type: "pf" + time: "0000" + members: &eefh_members + start: 1 + end: 10 + scheme: *eefh_scheme + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *eefh_cf + - request: *eefh_pf + members: *eefh_members + scheme: *eefh_scheme + weeh: + filter:type: + "fcmean/fcstdev/fcmax/fcmin": + filter:members: + only_zero: + forecast: + inputs: + request: &weeh_cf + stream: weeh + type: "cf" + time: "0000" + scheme: *eefh_scheme + no_zero: + forecast: + inputs: + request: &weeh_pf + stream: weeh + type: "pf" + time: "0000" + members: *eefh_members + scheme: *eefh_scheme + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *weeh_cf + - request: *weeh_pf + members: *eefh_members + scheme: *eefh_scheme + efhs: + forecast: + inputs: + - request: + stream: enfh + type: "cf" + time: "0000" + - request: + stream: enfh + type: "pf" + time: "0000" + members: &efhs_members + start: 1 + end: 10 + scheme: *enfh_scheme + wehs: + forecast: + inputs: + - request: + stream: enwh + type: "cf" + time: "0000" + - request: + stream: enwh + type: "pf" + time: "0000" + members: *efhs_members + scheme: *enfh_scheme + eehs: + forecast: + inputs: + - request: + stream: eefh + type: cf + time: "0000" + - request: + stream: eefh + type: pf + time: "0000" + members: + start: 1 + end: 10 + scheme: *eefh_scheme filter:param: - "*": + "*": filter:type: - "em/es/pb/fcmean/fcstdev/fcmin/fcmax": + "fc/cf/pf": + from_inputs: False + filter:levtype: + "fl": + forecast: + inputs: + - request: + levtype: ml + levelist: [58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137] + param: "{param}" + - request: + levtype: ml + levelist: 1 + param: 152 + "*": + forecast: + inputs: + request: + param: "{param}" + "em/es/pb/cd/fcmean/fcstdev/fcmin/fcmax/taem/taes/cm/cr": forecast: inputs: - request: + request: param: "{param}" - "10": + "ep": + filter:selection: + eccharts: + from_inputs: false + forecast: + inputs: + request: + param: "{param}" + "10": filter:type: - fc/cf/pf/em/es/pb: + fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: forecast: inputs: request: param: ["138", "155"] - "121/122": + "131/132": filter:type: - em/es/pb: + fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: + filter:levtype: + pl: + forecast: + inputs: + request: + param: ["138", "155"] + taem/taes: forecast: inputs: - request: + request: param: "{param}" + "121/122/123": + forecast: + inputs: + request: + param: "{param}" + filter:type: + em/es/pb: + forecast: + inputs: derive_step: type: default by: 6 + "*": + from_inputs: false + "228": + filter:type: + "pfc/gwt": + from_inputs: false + "fc/cf/pf/fcmean": + from_inputs: False + forecast: + inputs: + request: + param: "{param}" + "em/es/pb/cd": + forecast: + inputs: + request: + param: "{param}" "228026/228027": filter:type: em/es/pb: forecast: inputs: - request: + request: param: "{param}" derive_step: type: default @@ -1138,39 +2799,42 @@ inputs: 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: filter:type: ep: - forecast: - inputs: - - request: - param: "130" - type: "cf" - derive_step: - type: default - by: 12 - members: null - - request: - param: "130" - type: "pf" - derive_step: - type: default - by: 12 + filter:param: + 131020/131021: + forecast: + inputs: + request: + param: "130" + derive_step: + type: default + include_start: true + by: 6 + "*": + forecast: + inputs: + request: + param: "130" + derive_step: + type: default + by: 6 climatology: required: true inputs: - request: param: "130" type: "em" - derive_date: + derive_date: option: previous strict: False - derive_step: + derive_step: type: instantaneous - request: param: "130" type: "es" - derive_date: + derive_date: option: previous strict: False - derive_step: + derive_step: type: instantaneous 131060/131061/131062/131063/131064/131065/131066/131067/131098/131099/131085: filter:type: @@ -1179,15 +2843,14 @@ inputs: inputs: request: param: "228" - derive_step: - type: default - deaccumulation: true + derive_step: + type: deaccumulate "131068/131069": filter:type: ep: forecast: inputs: - request: + request: param: ["165", "166"] 131070/131071/131072/131100: filter:type: @@ -1213,370 +2876,937 @@ inputs: inputs: request: param: "122" - 131074/131075/131076/131077: + derive_step: + type: default + by: 6 + 131074/131075/131076/131077: + filter:type: + ep: + forecast: + inputs: + request: + param: "140229" + 131078/131079/131080/131081: filter:type: ep: - forecast: + forecast: + inputs: + request: + param: "140232" + "132044": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: ["228036", "228035"] + climatology: + inputs: + request: + param: "228044" + "132045": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: ["162071", "162072"] + climatology: + inputs: + request: + param: "162045" + "132049": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "123" + climatology: + inputs: + request: + param: "49" + "132059": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "228035" + climatology: + inputs: + request: + param: "59" + "132144": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "144" + climatology: + inputs: + request: + param: "144" + "132165": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "207" + climatology: + inputs: + request: + param: "228005" + "132167": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "167" + climatology: + inputs: + request: + param: "228004" + "132201": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "121" + climatology: + inputs: + request: + param: "201" + "132202": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "122" + climatology: + inputs: + request: + param: "202" + "132216": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "140229" + climatology: + inputs: + request: + param: "140200" + "132228": + filter:type: + efi/efic/sot: + filter:stream: + eefo: + forecast: + inputs: + request: + param: "172228" + climatology: + inputs: + request: + param: "228" + enfo: + forecast: + inputs: + request: + param: "228" + climatology: + inputs: + request: + param: "228" + "171001": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "1" + climatology: + inputs: + request: + param: "1" + "171002": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "2" + climatology: + inputs: + request: + param: "2" + "171006": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "228246" + climatology: + inputs: + request: + param: "228246" + "171007": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "228247" + climatology: + inputs: + request: + param: "228247" + "171033": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "33" + climatology: + inputs: + request: + param: "33" + "171034": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "34" + climatology: + inputs: + request: + param: "34" + "171078": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "78" + climatology: + inputs: + request: + param: "78" + "171079": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "79" + climatology: + inputs: + request: + param: "79" + "171121": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "121" + climatology: + inputs: + request: + param: "121" + "171122": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "122" + climatology: + inputs: + request: + param: "122" + "171129": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "129" + climatology: + inputs: + request: + param: "129" + "171130": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "130" + climatology: + inputs: + request: + param: "130" + "171131": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "131" + climatology: + inputs: + request: + param: "131" + "171132": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "132" + climatology: + inputs: + request: + param: "132" + "171133": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "133" + climatology: + inputs: + request: + param: "133" + "171136": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "136" + climatology: + inputs: + request: + param: "136" + "171137": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "137" + climatology: + inputs: + request: + param: "137" + "171139": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "139" + climatology: + inputs: + request: + param: "139" + "171141": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "141" + climatology: + inputs: + request: + param: "141" + "171151": + filter:type: + taem/fcmean: + forecast: inputs: - request: - param: "140229" - 131078/131079/131080/131081: + request: + param: "151" + climatology: + inputs: + request: + param: "151" + "171164": filter:type: - ep: + taem/fcmean: forecast: inputs: request: - param: "140232" - "132044": + param: "164" + climatology: + inputs: + request: + param: "164" + "171165": filter:type: - efi/efic/sot: + taem/fcmean: forecast: inputs: request: - param: ["228035", "228036"] + param: "165" climatology: inputs: request: - param: "228004" - "132045": + param: "165" + "171166": filter:type: - efi/efic/sot: + taem/fcmean: forecast: inputs: request: - param: ["162071", "162072"] + param: "166" climatology: inputs: request: - param: "162045" - "132049": + param: "166" + "171167": filter:type: - efi/efic/sot: + taem/fcmean: forecast: inputs: request: - param: "123" + param: "167" climatology: inputs: request: - param: "49" - "132059": + param: "167" + "171168": filter:type: - efi/efic/sot: + taem/fcmean: forecast: inputs: request: - param: "228035" + param: "168" climatology: inputs: request: - param: "59" - "132144": + param: "168" + "171201": filter:type: - efi/efic/sot: + taem/fcmean: forecast: inputs: request: - param: "144" + param: "201" climatology: inputs: request: - param: "144" - "132165": + param: "201" + "171202": filter:type: - efi/efic/sot: + taem/fcmean: forecast: inputs: request: - param: "207" + param: "202" climatology: inputs: request: - param: "228005" - "132167": + param: "202" + "173142": filter:type: - efi/efic/sot: + taem/fcmean: forecast: inputs: request: - param: "167" + param: "172142" climatology: inputs: request: - param: "228004" - "132201": + param: "172142" + "173143": filter:type: - efi/efic/sot: + taem/fcmean: forecast: inputs: request: - param: "121" + param: "172143" climatology: inputs: request: - param: "201" - "132202": + param: "172143" + "173144": filter:type: - efi/efic/sot: + taem/fcmean: forecast: inputs: request: - param: "122" + param: "172144" climatology: inputs: request: - param: "202" - "132216": + param: "172144" + "173189": filter:type: - efi/efic/sot: + taem/fcmean: forecast: inputs: request: - param: "140229" + param: "172189" climatology: inputs: request: - param: "140200" - "132228": + param: "172189" + "173228": filter:type: - efi/efic/sot: - filter:stream: - eefo: - forecast: - inputs: - request: - param: "172228" - climatology: - inputs: - request: - param: "228" - enfo: - forecast: - inputs: - request: - param: "228" - climatology: - inputs: - request: - param: "228" + taem/fcmean: + forecast: + inputs: + request: + param: "172228" + climatology: + inputs: + request: + param: "172228" "172008": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "8" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172009": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "9" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172142": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "142" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172143": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "143" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172144": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "144" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172146": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "146" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172147": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "147" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172169": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "169" - "172175": + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172175": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "175" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172176": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "176" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172177": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "177" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172178": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "178" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172179": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "179" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172180": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "180" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172181": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "181" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172182": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "182" "172189": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "189" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172205": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "205" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172212": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "212" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "172228": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "228" + taem/taes: + forecast: + inputs: + request: + param: "{param}" "200142": from_inputs: false forecast: inputs: - request: + request: param: "142" + derive_step: + type: deaccumulate "200143": from_inputs: false forecast: inputs: - request: + request: param: "143" + derive_step: + type: deaccumulate "200144": from_inputs: false forecast: inputs: - request: + request: param: "144" + derive_step: + type: deaccumulate "200189": from_inputs: false forecast: inputs: - request: + request: param: "189" + derive_step: + type: deaccumulate "200228": from_inputs: false forecast: inputs: - request: + request: param: "228" derive_step: - type: default - deaccumulation: true + type: deaccumulate + "228216": + from_inputs: false + forecast: + inputs: + request: + param: "228216" + derive_step: + type: deaccumulate "201": filter:type: - fcmean/fcstdev/fcmin/fcmax: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "121" + cd/em/es: # This case is handled below + filter:stream: + efhs/eehs: {} + pfc/gwt: + from_inputs: false + taem/taes: + filter:stream: + efhs/eehs/eefo: + forecast: + inputs: + request: + param: "{param}" + "202": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "122" + pfc/gwt: + from_inputs: false + cd/em/es: + filter:stream: + efhs/eehs: {} + taem/taes: + filter:stream: + efhs/eehs/eefo: + forecast: + inputs: + request: + param: "{param}" + "140249": + from_inputs: false + filter:type: + fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: ["165", "166"] + cd: {} + "207": + filter:stream: + msmm: + forecast: + inputs: + request: + param: ["165", "166"] + "*": + forecast: + inputs: + request: + param: "{param}" + "234167": + filter:type: + taem: + forecast: + inputs: + request: + param: "171167" + climatology: + inputs: + request: + param: "167.128" + "234139": + filter:type: + taem: + forecast: + inputs: + request: + param: "171139" + climatology: + inputs: + request: + param: "139.128" + "234151": + filter:type: + taem: + forecast: + inputs: + request: + param: "171151" + climatology: + inputs: + request: + param: "151.128" + "234228": + filter:type: + taem: + forecast: + inputs: + request: + param: "173228" + climatology: + inputs: + request: + param: "228.172" + "235117": + filter:type: + fcmean: forecast: inputs: - request: - param: "121" - "202": + request: + param: "228235" + taem/taes: + forecast: + inputs: + request: + param: "235117" + "237117": filter:type: - fcmean/fcstdev/fcmin/fcmax: + fcmax: forecast: inputs: - request: - param: "122" - "207": + request: + param: "228235" + "238117": filter:type: - fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: + fcmin: forecast: inputs: - request: - param: ["165", "166"] - "228249": - from_inputs: false - forecast: - inputs: - request: - param: ["228246", "228247"] - "235117": + request: + param: "228235" + "239117": filter:type: - fcmean/fcstdev/fcmin/fcmax: + fcstdev: forecast: inputs: - request: - param: "59" - "260033": + request: + param: "228235" + "260033": from_inputs: false forecast: inputs: - request: + request: param: ["228220", "228218"] "260053": from_inputs: false forecast: inputs: - request: + request: param: ["228220", "228221"] "261001": filter:type: @@ -1586,14 +3816,13 @@ inputs: - request: param: ["169", "175", "176", "177", "228021", "47"] derive_step: - type: default - deaccumulation: true + type: deaccumulate - request: param: ["165", "166", "167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261001" "261014": filter:type: @@ -1603,14 +3832,13 @@ inputs: - request: param: ["169", "175", "176", "177", "228021", "47"] derive_step: - type: default - deaccumulation: true + type: deaccumulate - request: param: ["165", "166", "167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261014" "261015": filter:type: @@ -1620,88 +3848,87 @@ inputs: - request: param: ["169", "175", "176", "177", "228021", "47"] derive_step: - type: default - deaccumulation: true + type: deaccumulate - request: param: ["165", "166", "167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261015" - "260004": + "260004": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "260004" - "260242": + "260242": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "260242" - "261016": + "261016": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261016" - "260005": + "260005": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["165", "166", "167"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "260005" - "260255": + "260255": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["165", "166", "167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "260255" - "261018": + "261018": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["165", "166", "167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261018" - "261002": + "261002": filter:type: cf/pf/fc: forecast: @@ -1709,49 +3936,185 @@ inputs: - request: param: ["47", "228021", "169", "175", "176", "177"] derive_step: - type: default - deaccumulation: true + type: deaccumulate - request: param: "167" # Required for metadata of cossza - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261002" + "261023": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261023" filter:type: - fcmean/fcstdev/fcmax: + fcmean: filter:stream: - "*": + enfo/waef/eefo/weef: filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151145/151148/151163/151164/151175/159/164/165/166/167/168//202/207/228246/228247/235117/237117/238117/239117": + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": + forecast: + inputs: + derive_step: + type: default + 40/41/42/170/140229/140231/140232/140233/140245: forecast: inputs: - derive_step: + derive_step: type: default - 40/41/42/170/140229/140231/140232/140233/140245/172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: + by: 24 + 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: forecast: inputs: derive_step: type: default + include_start: true by: 24 - 1/2/3/60/129/130/131/132/133/138/155: + 1/2/3/54/60/129/130/131/132/133/138/155/203: forecast: inputs: derive_step: type: default by: 12 + 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: + forecast: + inputs: + derive_step: + type: precomputed + climatology: + inputs: + request: + type: taem + derive_date: + - option: nearest + - option: bracket + num: 2 + strict: False + derive_step: + type: range + required: true + enfh/enwh/eefh/weeh: + filter:selection: + mclimate: + from_inputs: false + forecast: + inputs: + derive_step: + type: default + filter:type: + fcmean: + filter:param: + "162071": + forecast: + inputs: + request: + param: ["162071", "162072"] + "207": + forecast: + inputs: + request: + param: ["165", "166"] + "59": + forecast: + inputs: + request: + param: "228035" + "228044": + forecast: + inputs: + request: + param: ["228036", "228035"] + "167/228/144": + filter:steplength: + "*": + filter:param: + "228/144": + forecast: + inputs: + derive_step: + type: deaccumulate + "*": {} + "168": + forecast: + inputs: + - request: + type: fcmean + members: + start: 0 + end: 0 + derive_step: + type: precomputed + - request: + type: fcmean + derive_step: + type: precomputed + filter:param: + "228": + forecast: + inputs: + request: + param: "172228" + "167": + forecast: + inputs: + request: + param: "167" + "*": {} + "*": + filter:param: + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": + forecast: + inputs: + derive_step: + type: default + 40/41/42/170/140229/140231/140232/140233/140245: + forecast: + inputs: + derive_step: + type: default + by: 24 + 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: + forecast: + inputs: + derive_step: + type: default + include_start: true + by: 24 + 1/2/3/54/60/129/130/131/132/133/138/155/203: + forecast: + inputs: + derive_step: + type: default + by: 12 msmm/swmm: filter:param: - "34/139/151/164/165/166/167/168/168/207/229/230": + "34/139/151/164/165/166/167/168/168/207/229/230": forecast: inputs: - derive_step: + derive_step: + type: monthly + 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: + forecast: + inputs: + derive_step: type: monthly - 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228/228008/228014: + by: 24 + 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: forecast: inputs: derive_step: type: monthly + include_start: true + allow_missing_zero: true by: 24 129/130/133/138/155/203: forecast: @@ -1759,24 +4122,41 @@ inputs: derive_step: type: monthly by: 12 - fcmin: + fcstdev/fcmax/fcmin: filter:stream: - "*": + enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151145/151148/151163/151164/151175/159/164/165/166/167/168//202/207/228246/228247/235117/237117/238117/239117": + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": + forecast: + inputs: + derive_step: + type: default + 40/41/42/170/140229/140231/140232/140233/140245: + forecast: + inputs: + derive_step: + type: default + by: 24 + 172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212: forecast: inputs: - derive_step: + derive_step: type: default + include_start: true + by: 24 172142/172143/172144/172228: - from_inputs: false - 40/41/42/170/140229/140231/140232/140233/140245/172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212: + filter:type: + fcmin: + from_inputs: false + "*": {} forecast: inputs: derive_step: type: default + include_start: true by: 24 - 1/2/3/60/129/130/131/132/133/138/155: + 1/2/3/54/60/129/130/131/132/133/138/155/203: + from_inputs: false forecast: inputs: derive_step: @@ -1784,51 +4164,689 @@ inputs: by: 12 msmm/swmm: filter:param: - "34/139/151/164/165/166/167/168/168/207/229/230": + "34/139/151/164/165/166/167/168/168/207/229/230": + forecast: + inputs: + derive_step: + type: monthly + 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: + forecast: + inputs: + derive_step: + type: monthly + by: 24 + 172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212: forecast: inputs: - derive_step: + derive_step: type: monthly + include_start: true + allow_missing_zero: true + by: 24 172142/172143/172144/172228: - from_inputs: false - 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/228008/228014: + filter:type: + fcmin: + from_inputs: false + "*": {} forecast: inputs: derive_step: type: monthly + include_start: true + allow_missing_zero: true by: 24 - 129/130/133/138/155/203: + 133/203: + forecast: + inputs: + derive_step: + type: monthly + by: 12 + 129/130/138/155: + from_inputs: false forecast: inputs: derive_step: type: monthly by: 12 efi/efic/sot: - climatology: - required: true - inputs: - request: - type: cd - derive_date: - option: nearest - derive_step: - type: range filter:stream: - "eefo/weef": + "eefo/weef": filter:param: - 132044/132059/132144/132045/132165/132167/132201/132202/132216/132228: {} - "*": + 132044/132049/132059/132144/132045/132165/132167/132201/132202/132216/132228: + climatology: + required: true + inputs: + request: + type: cd + derive_date: + option: nearest + derive_step: + type: range + "enfo/waef": + climatology: + required: true + inputs: + request: + type: cd + derive_date: + - option: next + sequence: + type: daily + - option: previous + strict: false + derive_step: + type: range filter:param: - "132044/132059/132045/132165/132167/132201/132202/132216": + "132044/132049/132059/132045/132165/132167/132201/132202/132216": forecast: inputs: - derive_step: + derive_step: type: default by: 6 132228/132144: forecast: inputs: - derive_step: - type: default - deaccumulation: true - fc/cf/pf/em/es/taem/taes/ep/pb/cd: {} \ No newline at end of file + derive_step: + type: deaccumulate + taem/taes: + filter:stream: + eefo: + filter:param: + "*": {} + 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: + forecast: + inputs: + derive_step: + type: precomputed + climatology: + inputs: + request: + type: taem + derive_date: + - option: nearest + - option: bracket + num: 2 + strict: False + derive_step: + type: range + required: true + 234167/234139/234151/234228: + forecast: + inputs: + derive_step: + type: precomputed + climatology: + inputs: + - request: + stream: eefh + type: fcmean + members: + start: 0 + end: 10 + derive_date: + - option: nearest + - option: bracket + num: 1 + strict: False + derive_step: + type: range + - request: + type: taem + derive_date: + - option: nearest + - option: bracket + num: 1 + strict: False + derive_step: + type: range + required: true + efhs/wehs/eehs: + forecast: + inputs: + - request: + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + derive_hdate: + rstart: -20 + rend: 0 + recurrence: "yearly" + include_endpoint: false + - request: + type: "fcmean" + derive_step: + type: precomputed + derive_hdate: + rstart: -20 + rend: 0 + recurrence: "yearly" + include_endpoint: false + cd: + filter:stream: + efhs/eehs: + from_inputs: false + forecast: + inputs: + - request: + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + - request: + type: "fcmean" + derive_step: + type: precomputed + filter:steplength: + "*": + filter:stream: + efhs: + forecast: + inputs: + derive_date: + - option: bracket + num: 4 + strict: False + "168": + forecast: + inputs: + derive_date: + - option: bracket + num: 2 + strict: False + filter:param: + "228004": + forecast: + inputs: + request: + param: "167.128" + "49": + forecast: + inputs: + request: + param: "123.128" + "228005": + forecast: + inputs: + request: + param: "207.128" + "201": + forecast: + inputs: + request: + param: "121.128" + "202": + forecast: + inputs: + request: + param: "122.128" + "162045": + forecast: + inputs: + request: + param: "71.162" + "228006": + forecast: + inputs: + request: + param: "164.128" + "228": + forecast: + inputs: + request: + param: "228.128" + "144": + forecast: + inputs: + request: + param: "144.128" + "59": + forecast: + inputs: + request: + param: "59.128" + "228044": + forecast: + inputs: + request: + param: "44.228" + "140249": + forecast: + inputs: + request: + param: "249.140" + members: null + "wehs": + from_inputs: false + forecast: + inputs: + - request: + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + - request: + type: "fcmean" + derive_step: + type: precomputed + filter:steplength: + "*": + forecast: + inputs: + derive_date: + - option: bracket + num: 4 + strict: False + "168": + forecast: + inputs: + derive_date: + - option: bracket + num: 2 + strict: False + filter:param: + "140200": + forecast: + inputs: + request: + param: "229.140" + em/es: + filter:stream: + enfo/waef: {} + eefo/weef: + filter:steplength: + "168": + forecast: + inputs: + - request: + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + - request: + type: "fcmean" + derive_step: + type: precomputed + "*": {} + efhs/eehs: + filter:steptype: + range: + from_inputs: false + forecast: + inputs: + - request: + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + - request: + type: "fcmean" + derive_step: + type: precomputed + filter:steplength: + "*": + filter:stream: + efhs: + forecast: + inputs: + derive_date: + - option: bracket + num: 4 + strict: False + "168": + forecast: + inputs: + derive_date: + - option: bracket + num: 2 + strict: False + filter:param: + "228004": + forecast: + inputs: + request: + param: "167.128" + "49": + forecast: + inputs: + request: + param: "123.128" + "228005": + forecast: + inputs: + request: + param: "207.128" + "201": + forecast: + inputs: + request: + param: "121.128" + "202": + forecast: + inputs: + request: + param: "122.128" + "162045": + forecast: + inputs: + request: + param: "71.162" + "228006": + forecast: + inputs: + request: + param: "164.128" + "228": + forecast: + inputs: + request: + param: "228.128" + "144": + forecast: + inputs: + request: + param: "144.128" + "59": + forecast: + inputs: + request: + param: "59.128" + "228044": + forecast: + inputs: + request: + param: "44.228" + instantaneous: + forecast: + inputs: + derive_hdate: + rstart: -20 + rend: 0 + recurrence: "yearly" + include_endpoint: false + "wehs": + filter:steptype: + range: + from_inputs: false + filter:param: + "140200": + forecast: + inputs: + - request: + param: "229.140" + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + derive_date: + - option: bracket + num: 4 + strict: False + - request: + param: "229.140" + type: "fcmean" + derive_step: + type: precomputed + derive_date: + - option: bracket + num: 4 + strict: False + instantaneous: + forecast: + inputs: + derive_hdate: + rstart: -20 + rend: 0 + recurrence: "yearly" + include_endpoint: false + gwt: + filter:param: + "228": + filter:class: + od: + filter:steplength: + "6": + forecast: + update_request_method: product + inputs: + - request: + param: "228" + derive_step: + type: deaccumulate + - request: + param: ["138", "155"] + levtype: pl + levelist: 700 + derive_step: + type: default + include_start: true + by: 3 + - request: + param: "143" + derive_step: + type: deaccumulate + - request: + param: "228022" + derive_step: + type: deaccumulate + by: 24 + - request: + param: "228035" + derive_step: + type: default + by: 6 + - request: + param: [167, 168] + derive_step: + type: default + by: 3 + include_start: true + "12": + forecast: + update_request_method: product + inputs: + - request: + param: "228" + derive_step: + type: deaccumulate + - request: + param: ["138", "155"] + levtype: pl + levelist: 700 + derive_step: + type: default + include_start: true + by: 6 + - request: + param: "143" + derive_step: + type: deaccumulate + - request: + param: "228022" + derive_step: + type: deaccumulate + by: 24 + - request: + param: "228035" + derive_step: + type: default + by: 6 + - request: + param: [167, 168] + derive_step: + type: default + by: 6 + include_start: true + "24": + forecast: + update_request_method: product + inputs: + - request: + param: "228" + derive_step: + type: deaccumulate + - request: + param: ["138", "155"] + levtype: pl + levelist: 700 + derive_step: + type: default + include_start: true + by: 12 + - request: + param: "143" + derive_step: + type: deaccumulate + - request: + param: "228022" + derive_step: + type: deaccumulate + by: 24 + - request: + param: "228035" + derive_step: + type: default + by: 6 + - request: + param: [167, 168] + derive_step: + type: default + by: 6 + include_start: true + ea: + filter:steplength: + "12/24": + forecast: + update_request_method: product + inputs: + - request: + param: "228.128" + - request: + param: ["131.128", "132.128"] + levtype: pl + levelist: 700 + - request: + param: "143.128" + - request: + param: "22.228" + - request: + param: "59.128" + - request: + param: ["167.128", "168.128"] + - request: + type: an + param: "74.128" + time: "0000" + derive_step: + type: static + values: 0 + - request: + type: an + param: "172.128" + time: "0000" + derive_step: + type: static + values: 0 + "201": + filter:class: + ea: + filter:steplength: + "24": + forecast: + update_request_method: product + inputs: + - request: + param: "201.128" + - request: + param: ['228.128', '201.128'] + - request: + param: ['141.128', '33.128', '246.228', '247.228', '39.128', '201.128'] + derive_step: + type: default + include_start: true + - request: + param: "22.228" + - request: + type: an + param: "74.128" + time: "0000" + derive_step: + type: static + values: 0 + - request: + type: an + param: "172.128" + time: "0000" + derive_step: + type: static + values: 0 + - request: + class: od + type: an + param: "200199" + derive_step: + type: static + values: 0 + "202": + filter:class: + ea: + filter:steplength: + "24": + forecast: + update_request_method: product + inputs: + - request: + param: "202.128" + - request: + param: ['141.128', '33.128', '167.128', '235.128', '246.228', '247.228', '186.128', '202.128'] + derive_step: + type: default + include_start: true + - request: + type: an + param: "74.128" + time: "0000" + derive_step: + type: static + values: 0 + - request: + type: an + param: "172.128" + time: "0000" + derive_step: + type: static + values: 0 + - request: + class: od + type: an + param: "200199" + derive_step: + type: static + values: 0 + - request: + type: an + param: ['27.128', '28.128', '66.128', '67.128'] + time: "1200" + derive_step: + type: static + values: 0 + pfc: + forecast: + inputs: + request: + param: "{param}" + derive_step: + type: precomputed + fc/cf/pf/ep/pb/cm/cr: {} diff --git a/pproc-core/tests/schema/schema.yaml b/pproc-core/tests/schema/schema.yaml deleted file mode 100644 index cce4b3a4..00000000 --- a/pproc-core/tests/schema/schema.yaml +++ /dev/null @@ -1,4462 +0,0 @@ -config: - interp_keys: - intgrid: "none" - legendre-loader: "shmem" - matrix-loader: "file-io" - metadata_from_output: ["param", "stream", "date"] - - filter:param: - "*": {} - "10": - preprocessing: - - operation: reshape - shape: 2 - - operation: norm - vod2uv: true - "131/132": - filter:type: - taem/taes: {} - cf/pf/fc/fcmean/fcstdev/fcmax/fcmin: - metadata_from_output: ["stream", "date"] - vod2uv: true - "121/122/228026/228027": - filter:type: - em/es/pb: - metadata: - timeRangeIndicator: 2 - accumulations: - step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - "*": {} - "131068/131069": - filter:type: - ep: - preprocessing: - - operation: norm - "132044": - filter:type: - efi/efic/sot: - preprocessing: - - operation: mask - select: {param: "228036"} - mask: [{param: "228035"}, "<=", 10] - "132059": - filter:type: - efi/efic/sot: - preprocessing: - - operation: mask - select: {param: "228035"} - mask: [{param: "228035"}, "<=", 10] - "132045": - filter:type: - efi/efic/sot: - preprocessing: - - operation: norm - "207/228249": - preprocessing: - - operation: norm - "140249": - filter:type: - fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: - preprocessing: - - operation: "direction" - cd: {} - "172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - filter:param: - 172142/172143/172144/172228: - vmin: 0. - "172189": - vmin: 0. - vmax: 1. - "*": {} - preprocessing: - - operation: scale - value: 0.00001157407 - filter:stream: - enfh/enwh/eefh/weeh: - accumulations: - hdate: {} - "*": {} - accumulations: - step: - deaccumulate: true - taem/taes: {} - "260033/260053": - preprocessing: - - operation: sum - metadata: - shortName: tprate - edition: 2 - "200189/200142/200143/200144/228216/200228": - accumulations: - step: - type: legacywindow - operation: difference - name: - type: default - length: "{steplength}:int" - metadata: - timeRangeIndicator: 5 - stepType: diff - "234167": - metadata: - bitsPerValue: 24 - "234228": - preprocessing: - - operation: scale - value: 604800000 - filter:type: - pf/cf/fc: - filter:param: - "261016/260242/260004/260005/261018/260255/261023": - entrypoint: pproc-thermal-indices - outputs: - indices: - metadata: - edition: 2 - bitsPerValue: 16 - packingType: "grid_ccsds" - typeOfGeneratingProcess: 2 - "261001/261002/261014/261015": - entrypoint: pproc-thermal-indices - outputs: - indices: - metadata: - edition: 2 - bitsPerValue: 16 - packingType: "grid_ccsds" - typeOfGeneratingProcess: 2 - accumulations: - step: - operation: difference - "*": - entrypoint: pproc-accumulate - filter:stream: - "enfh/enwh/eefh/weeh": - accumulations: - hdate: {} - "*": {} - em/es: - entrypoint: pproc-ensms - filter:stream: - enfo/waef/eefo/weef: - dtype: float64 - metadata: - perturbationNumber: 0 - bitsPerValue: 16 - numberOfForecastsInEnsemble: "{num_fields}:int" - filter:param: - "10": - metadata: - bitsPerValue: 24 - "*": {} - efhs/wehs/eehs: - filter:steptype: - range: - total_fields: 220 - outputs: - default: - metadata: - localDefinitionNumber: 19 - metadata: - bitsPerValue: 12 - sampleSizeOfModelClimate: "{num_fields}:int" - versionOfModelClimate: 0 - efiOrder: 0 - numberOfReforecastYearsInModelClimate: 20 - accumulations: - date: - operation: "aggregation" - filter:steplength: - "*": - metadata: - numberOfDaysInClimateSamplingWindow: 31 - "168": - metadata: - numberOfDaysInClimateSamplingWindow: 7 - instantaneous: - dtype: float64 - metadata: - perturbationNumber: 0 - numberOfForecastsInEnsemble: "{num_fields}:int" - bitsPerValue: 16 - dataDate: "{date}:int" - accumulations: - step: {} - hdate: - operation: aggregation - metadata: - legBaseDate: "{end_coord}:int" - climateDateFrom: "{start_coord}:int" - climateDateTo: "{end_coord}:int" - filter:param: - "129": - metadata: - bitsPerValue: 24 - "*": {} - efi/sot/efic: - entrypoint: pproc-extreme - dtype: float64 - accumulations: - step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - filter:param: - 132044/132059: - eps: 1e-4 - accumulations: - step: - operation: maximum - metadata: - typeOfStatisticalProcessing: 1 - edition: 1 - bitsPerValue: 12 - indicatorOfTypeOfLevel: 1 - localDefinitionNumber: 19 - 132045/132165/132167: - eps: -1e-4 - accumulations: - step: - operation: mean - metadata: - edition: 1 - localDefinitionNumber: 19 - bitsPerValue: 12 - timeRangeIndicator: 3 - stepType: avg - 132049/132201/132216: - eps: -1e-4 - accumulations: - step: - operation: maximum - metadata: - edition: 1 - localDefinitionNumber: 19 - bitsPerValue: 12 - "132144": - eps: 1e-4 - accumulations: - step: - operation: difference - metadata: - edition: 1 - localDefinitionNumber: 19 - bitsPerValue: 12 - timeRangeIndicator: 5 - stepType: diff - "132202": - eps: -1e-4 - accumulations: - step: - operation: minimum - metadata: - edition: 1 - localDefinitionNumber: 19 - bitsPerValue: 12 - "132228": - eps: 1e-4 - accumulations: - step: - operation: difference - metadata: - edition: 1 - localDefinitionNumber: 19 - bitsPerValue: 12 - timeRangeIndicator: 5 - stepType: diff - filter:stream: - "*": {} - "eefo": - preprocessing: - - operation: scale - value: 604800000 - ep: - entrypoint: pproc-probabilities - dtype: float64 - accumulations: - step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - filter:param: - "131060": - accumulations: - step: - operation: difference - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - timeRangeIndicator: 5 - stepType: diff - threshold: - comparison: ">=" - value: 0.001 - local_scale_factor: 3 - "131061": - accumulations: - step: - operation: difference - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - timeRangeIndicator: 5 - stepType: diff - threshold: - comparison: ">=" - value: 0.005 - local_scale_factor: 3 - "131062": - accumulations: - step: - operation: difference - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - timeRangeIndicator: 5 - stepType: diff - threshold: - comparison: ">=" - value: 0.01 - local_scale_factor: 3 - "131063": - accumulations: - step: - operation: difference - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - timeRangeIndicator: 5 - stepType: diff - threshold: - comparison: ">=" - value: 0.02 - local_scale_factor: 3 - "131098": - accumulations: - step: - operation: difference - metadata: - localDefinitionNumber: 5 - stepType: "accum" - stepRange: "0-0" - edition: 2 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 12 - packingType: "grid_ccsds" - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 0.025 - local_scale_factor: 3 - metadata: - scaleFactorOfLowerLimit: 0 - "131099": - accumulations: - step: - operation: difference - metadata: - localDefinitionNumber: 5 - stepType: "accum" - stepRange: "0-0" - edition: 2 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 12 - packingType: "grid_ccsds" - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 0.05 - local_scale_factor: 3 - metadata: - scaleFactorOfLowerLimit: 0 - "131085": - accumulations: - step: - operation: difference - metadata: - localDefinitionNumber: 5 - stepType: "accum" - stepRange: "0-0" - edition: 2 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 12 - packingType: "grid_ccsds" - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 0.1 - local_scale_factor: 3 - metadata: - scaleFactorOfLowerLimit: 0 - "131064": - accumulations: - step: - operation: difference - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - timeRangeIndicator: 5 - stepType: diff - threshold: - comparison: '<' - value: 0.0001 - local_scale_factor: 4 - "131065": - accumulations: - step: - operation: difference_rate - factor: 0.041666666666666664 - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - timeRangeIndicator: 5 - stepType: diff - threshold: - comparison: '<' - value: 0.001 - local_scale_factor: 4 - "131066": - accumulations: - step: - operation: difference_rate - factor: 0.041666666666666664 - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - timeRangeIndicator: 5 - stepType: diff - threshold: - comparison: '>=' - value: 0.003 - local_scale_factor: 4 - "131067": - accumulations: - step: - operation: difference_rate - factor: 0.041666666666666664 - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - timeRangeIndicator: 5 - stepType: diff - threshold: - comparison: '>=' - value: 0.005 - local_scale_factor: 4 - "131068": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 10 - "131069": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 15 - "131070": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 15 - "131071": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 20 - "131072": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 25 - "131100": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - edition: 2 - productDefinitionTemplateNumber: 9 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 12 - typeOfTimeIncrement: 2 - packingType: "grid_ccsds" - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 10 - "131074": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 2 - "131075": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 4 - "131076": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 6 - "131077": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 8 - "131078": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 8 - "131079": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 10 - "131080": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 12 - "131081": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: ">=" - value: 15 - "131073": - accumulations: - step: - operation: minimum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - threshold: - comparison: "<=" - value: 273.15 - local_scale_factor: 2 - "131020": - accumulations: - step: - operation: "mean" - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 - threshold: - comparison: "<" - value: -2 - "131021": - accumulations: - step: - operation: "mean" - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 - threshold: - comparison: ">=" - value: 2 - "131022": - accumulations: - step: - operation: minimum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 - threshold: - comparison: "<" - value: -8 - "131023": - accumulations: - step: - operation: minimum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 - threshold: - comparison: "<" - value: -4 - "131024": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 - threshold: - comparison: ">" - value: 4 - "131025": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 - threshold: - comparison: ">" - value: 8 - "133093": - accumulations: - step: - operation: maximum - std_anomaly: true - metadata: - localDefinitionNumber: 30 - edition: 2 - productDefinitionTemplateNumber: 9 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: "grid_ccsds" - bitsPerValue: 24 - threshold: - comparison: '>' - value: 1 - "133094": - accumulations: - step: - operation: maximum - std_anomaly: true - metadata: - localDefinitionNumber: 30 - edition: 2 - productDefinitionTemplateNumber: 9 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: "grid_ccsds" - bitsPerValue: 24 - threshold: - comparison: '>' - value: 1.5 - local_scale_factor: 1 - metadata: - scaleFactorOfLowerLimit: 1 - "133095": - accumulations: - step: - operation: maximum - std_anomaly: true - metadata: - localDefinitionNumber: 30 - edition: 2 - productDefinitionTemplateNumber: 9 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: "grid_ccsds" - bitsPerValue: 24 - threshold: - comparison: '>' - value: 2 - "133096": - accumulations: - step: - operation: minimum - std_anomaly: true - metadata: - localDefinitionNumber: 30 - edition: 2 - productDefinitionTemplateNumber: 9 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: "grid_ccsds" - bitsPerValue: 24 - threshold: - comparison: '<' - value: -1 - limit_type: lower - "133097": - accumulations: - step: - operation: minimum - std_anomaly: true - metadata: - localDefinitionNumber: 30 - edition: 2 - productDefinitionTemplateNumber: 9 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: "grid_ccsds" - bitsPerValue: 24 - threshold: - comparison: '<' - value: -1.5 - local_scale_factor: 1 - limit_type: lower - metadata: - scaleFactorOfLowerLimit: 1 - "133098": - accumulations: - step: - operation: minimum - std_anomaly: true - metadata: - localDefinitionNumber: 30 - edition: 2 - productDefinitionTemplateNumber: 9 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: "grid_ccsds" - bitsPerValue: 24 - threshold: - comparison: '<' - value: -2 - limit_type: lower - fcmean: - filter:param: - 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: - filter:stream: - eefo: - entrypoint: pproc-anomaly - dtype: float64 - metadata: - bitsPerValue: 24 - accumulations: - step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - metadata: - timeRangeIndicator: 3 - stepType: avg - clim: - accumulations: - date: - operation: mean - "*": - dtype: float64 - filter:stream: - enfo/waef/eefo/weef: - entrypoint: pproc-accumulate - accumulations: - step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - operation: mean - metadata: - type: fcmean - filter:param: - "*": {} - "201": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 201 - "202": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 202 - "235117": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - edition: 2 - paramId: 235117 - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 0 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 - "enfh/enwh/eefh/weeh": - entrypoint: pproc-accumulate - filter:selection: - mclimate: - dtype: float32 - accumulations: - step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - hdate: {} - filter:param: - "123/140229": - vmin: 0. - accumulations: - step: - metadata: - bitsPerValue: 12 - type: fcmean - timeRangeIndicator: 2 - stepType: max - "140249": - vmin: 0. - vmax: 360. - accumulations: - step: - metadata: - bitsPerValue: 12 - type: fcmean - "162071": - preprocessing: - - operation: norm - accumulations: - step: - metadata: - edition: 1 - bitsPerValue: 12 - type: fcmean - timeRangeIndicator: 3 - stepType: avg - "164": - vmin: 0. - vmax: 1. - accumulations: - step: - metadata: - bitsPerValue: 12 - type: fcmean - timeRangeIndicator: 3 - stepType: avg - "167": - accumulations: - step: - metadata: - bitsPerValue: 12 - type: fcmean - timeRangeIndicator: 3 - stepType: avg - "228/144": - vmin: 0. - accumulations: - step: - metadata: - bitsPerValue: 12 - type: fcmean - timeRangeIndicator: 5 - stepType: diff - "121": - accumulations: - step: - metadata: - bitsPerValue: 12 - type: fcmean - timeRangeIndicator: 2 - stepType: max - "122": - accumulations: - step: - metadata: - bitsPerValue: 12 - type: fcmean - timeRangeIndicator: 2 - "207": - vmin: 0. - preprocessing: - - operation: norm - accumulations: - step: - metadata: - bitsPerValue: 12 - type: fcmean - timeRangeIndicator: 3 - stepType: avg - "228044": - vmin: 0 - preprocessing: - - operation: mask - select: {param: "228036"} - mask: [{param: "228035"}, "<=", 10] - accumulations: - step: - metadata: - typeOfStatisticalProcessing: 1 - edition: 1 - bitsPerValue: 12 - indicatorOfTypeOfLevel: 1 - type: fcmean - timeRangeIndicator: 2 - stepType: max - "59": - vmin: 0 - preprocessing: - - operation: mask - select: {param: "228035"} - mask: [{param: "228035"}, "<=", 10] - accumulations: - step: - metadata: - typeOfStatisticalProcessing: 1 - edition: 1 - bitsPerValue: 12 - indicatorOfTypeOfLevel: 1 - type: fcmean - timeRangeIndicator: 2 - stepType: max - filter:steplength: - "*": - filter:param: - "228/144": - accumulations: - step: - operation: difference - metadata: - numberIncludedInAverage: "{num_coords}:int" - "123/140229/121/228044/59": - accumulations: - step: - operation: maximum - metadata: - numberIncludedInAverage: "{num_coords}:int" - "122": - accumulations: - step: - operation: minimum - metadata: - numberIncludedInAverage: "{num_coords}:int" - "164/167/162071/207": - accumulations: - step: - operation: mean - metadata: - numberIncludedInAverage: "{num_coords}:int" - "140249": - accumulations: - step: - operation: aggregation - metadata: - numberIncludedInAverage: "{num_coords}:int" - "168": - accumulations: - step: - operation: aggregation - filter:param: - "228": - metadata_from_output: ["stream", "date"] - preprocessing: - - operation: scale - value: 604800000 - "167": {} - "*": - accumulations: - hdate: {} - step: - type: legacywindow - operation: mean - name: - type: default - length: "{steplength}:int" - metadata: - type: fcmean - filter:param: - "*": - accumulations: - step: - metadata: - timeRangeIndicator: 3 - numberIncludedInAverage: "{num_coords}:int" - "201": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 201 - timeRangeIndicator: 3 - numberIncludedInAverage: "{num_coords}:int" - "202": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 202 - timeRangeIndicator: 3 - numberIncludedInAverage: "{num_coords}:int" - "235117": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - edition: 2 - paramId: 235117 - stepType: avg - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 0 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 - msmm/swmm: - entrypoint: pproc-monthly-stats - accumulations: - step: - type: legacywindow - operation: mean - name: - type: monthly - date: "{date}:str" - metadata: - type: fcmean - bitsPerValue: 16 - fcstdev: - dtype: float64 - filter:stream: - oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: - entrypoint: pproc-accumulate - filter:stream: - enfh/enwh/eefh/weeh: - accumulations: - hdate: {} - "*": {} - accumulations: - step: - type: legacywindow - operation: standard_deviation - name: - type: default - length: "{steplength}:int" - metadata: - type: fcstdev - filter:param: - "*": {} - "201": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 201 - "202": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 202 - "239117": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - edition: 2 - paramId: 239117 - stepType: sd - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 6 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 - msmm/swmm: - entrypoint: pproc-monthly-stats - accumulations: - step: - type: legacywindow - operation: standard_deviation - name: - type: monthly - date: "{date}:str" - metadata: - type: fcstdev - bitsPerValue: 16 - fcmin: - dtype: float64 - filter:stream: - oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: - entrypoint: pproc-accumulate - filter:stream: - enfh/enwh/eefh/weeh: - accumulations: - hdate: {} - "*": {} - accumulations: - step: - type: legacywindow - operation: minimum - name: - type: default - length: "{steplength}:int" - metadata: - type: fcmin - filter:param: - "*": {} - "201": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 201 - "202": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 202 - "238117": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - edition: 2 - paramId: 238117 - stepType: min - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 3 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 - msmm/swmm: - entrypoint: pproc-monthly-stats - accumulations: - step: - type: legacywindow - operation: minimum - name: - type: monthly - date: "{date}:str" - metadata: - type: fcmin - bitsPerValue: 16 - fcmax: - dtype: float64 - filter:stream: - oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: - entrypoint: pproc-accumulate - filter:stream: - enfh/enwh/eefh/weeh: - accumulations: - hdate: {} - "*": {} - accumulations: - step: - type: legacywindow - operation: maximum - name: - type: default - length: "{steplength}:int" - metadata: - type: fcmax - filter:param: - "*": {} - "201": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 201 - "202": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 202 - "237117": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - edition: 2 - paramId: 237117 - stepType: max - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 2 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 - msmm/swmm: - entrypoint: pproc-monthly-stats - accumulations: - step: - type: legacywindow - operation: maximum - name: - type: monthly - date: "{date}:str" - metadata: - type: fcmax - bitsPerValue: 16 - pb: - entrypoint: pproc-quantiles - filter:stream: - enfo/waef: - metadata: - localDefinitionNumber: 30 - "*": {} - taem/taes: - filter:stream: - eefo: - filter:param: - 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: - entrypoint: pproc-anomaly - dtype: float64 - metadata: - bitsPerValue: 24 - accumulations: - step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - metadata: - timeRangeIndicator: 3 - stepType: avg - clim: - accumulations: - date: - operation: mean - 234167/234139/234151/234228: - entrypoint: pproc-significance - epsilon: 1e-10 - use_clim_anomaly: true - accumulations: - step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - metadata: - timeRangeIndicator: 3 - stepType: avg - clim: - total_fields: 220 - accumulations: - date: - operation: aggregation - clim_em: - accumulations: - date: - operation: aggregation - "235117": - entrypoint: pproc-ensms - dtype: float64 - outputs: - mean: - metadata: - edition: 2 - productDefinitionTemplateNumber: 12 - derivedForecast: 0 - type: taem - std: - metadata: - edition: 2 - productDefinitionTemplateNumber: 12 - derivedForecast: 4 - type: taes - metadata: - typeOfGeneratingProcess: 4 - typeOfTimeIncrement: 2 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 - bitsPerValue: 16 - packingType: "grid_ccsds" - "*": - entrypoint: pproc-ensms - outputs: - mean: - metadata: - type: taem - std: - metadata: - type: taes - dtype: float64 - metadata: - perturbationNumber: 0 - bitsPerValue: 16 - timeRangeIndicator: 3 - stepType: "avg" - efhs/eehs: - entrypoint: pproc-ensms - dtype: float64 - accumulations: - step: {} - hdate: - operation: aggregation - metadata: - climateDateFrom: "{start_coord}:int" - climateDateTo: "{end_coord}:int" - filter:param: - "235117": - outputs: - mean: - metadata: - edition: 2 - productDefinitionTemplateNumber: 11 - type: taem - std: - metadata: - edition: 2 - productDefinitionTemplateNumber: 11 - type: taes - metadata: - perturbationNumber: 0 - numberOfForecastsInEnsemble: "{num_fields}:int" - yearOfEndOfOverallTimeInterval: "{year}:int" - typeOfGeneratingProcess: 4 - typeOfTimeIncrement: 3 - dataDate: "{date}:int" - bitsPerValue: 16 - packingType: "grid_ccsds" - "*": - outputs: - mean: - metadata: - type: taem - std: - metadata: - type: taes - metadata: - perturbationNumber: 0 - numberOfForecastsInEnsemble: "{num_fields}:int" - bitsPerValue: 16 - timeRangeIndicator: 3 - stepType: avg - dataDate: "{date}:int" - cd: - filter:stream: - efhs/wehs/eehs: - entrypoint: pproc-quantiles - total_fields: 220 - outputs: - default: - metadata: - localDefinitionNumber: 19 - type: cd - metadata: - bitsPerValue: 12 - sampleSizeOfModelClimate: "{num_fields}:int" - versionOfModelClimate: 0 - efiOrder: 0 - numberOfReforecastYearsInModelClimate: 20 - filter:param: - "140249": - entrypoint: pproc-histogram - total_fields: 880 - bins: [-22.5, 22.5, 67.5, 112.5, 157.5, 202.5, 247.5, 292.5, 337.5] - mod: 360. - normalise: true - scale_out: 200. - metadata: - numberOfDaysInClimateSamplingWindow: 31 - sampleSizeOfModelClimate: 1980 - accumulations: - date: - operation: "sum" - "*": - accumulations: - date: - operation: "aggregation" - filter:steplength: - "*": - metadata: - numberOfDaysInClimateSamplingWindow: 31 - "168": - metadata: - numberOfDaysInClimateSamplingWindow: 7 - pfc: - entrypoint: pproc-ecpoint - outputs: - default: - metadata: - edition: 2 - bitsPerValue: 24 - generatingProcessIdentifier: 3 - bs: - metadata: - type: gbf - wt: - metadata: - type: gwt - perc: - metadata: - type: pfc - quantiles: [0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6, 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99] - predictant: tp - min_predictant: 0.04 - scale_outputs: 0.001 - interp_keys: - interpolation: grid-box-average - outputs: - default: - metadata: - paramId: 228 - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - type: legacywindow - operation: difference - name: - type: default - length: "{steplength}:int" - metadata: - stepType: accum - filter:steplength: - "6": - num_inputs: 7 - predictors: ["cp_ratio", "tp", "cdir", "local_solar_time", "sdfor", "ws", "mucape"] - dependencies: - wind: - vod2uv: true - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - cp: - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - operation: difference - cdir: - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - operation: difference - cape: - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - sdfor: - accumulations: - step: {} - "12/24": - num_inputs: 6 - predictors: ["cp_ratio", "tp", "ws", "mxcape6", "cdir"] - dependencies: - wind: - vod2uv: true - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - cp: - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - operation: difference - cdir: - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - operation: difference - cape: - accumulations: - step: - type: legacywindow - operation: maximum -windows: - defs: - width6: - - type: range - width: 6 - interval: 3 - end: 144 - - type: range - width: 6 - interval: 6 - start: 144 - width12: - - type: range - width: 12 - interval: 3 - end: 144 - - type: range - width: 12 - interval: 6 - start: 144 - width24: - - type: range - width: 24 - interval: 3 - end: 144 - - type: range - width: 24 - interval: 6 - start: 144 - filter:stream: - oper/wave: - filter:time: - "0000/1200": &mr_steps - in_steps: - - from: 0 - to: 90 - by: 1 - - from: 90 - to: 144 - by: 3 - - from: 144 - to: 360 - by: 6 - "0600/1800": &bc_steps - in_steps: - - from: 0 - to: 90 - by: 1 - - from: 90 - to: 144 - by: 3 - scda/scwv: - filter:time: - "0600/1800": *bc_steps - enfo/waef: - filter:time: - "0000/1200": *mr_steps - "0600/1800": *bc_steps - eefo/weef/eefh/weeh/eehs: - in_steps: - - from: 0 - to: 1104 - by: 6 - msmm/swmm: - in_steps: - - from: 0 - to: 5160 - by: 6 - enfh/enwh/efhs/wehs: - in_steps: - - from: 0 - to: 360 - by: 6 - filter:type: - em/es/pb: - filter:stream: - enfo/waef: - filter:param: - "*": - out_steps: - - type: instantaneous - end: 90 - interval: 3 - - type: instantaneous - start: 90 - 121/122: - out_steps: - type: instantaneous - interval: 6 - 228026/228027: - out_steps: - type: instantaneous - interval: 3 - eefo/weef: - type: instantaneous - efhs/wehs/eehs: - out_steps: - type: instantaneous - interval: 12 - fc/cf/pf: - filter:stream: - "*": - filter:param: - "*": - out_steps: - type: instantaneous - 261001/261014/261015/261002: - out_steps: - type: instantaneous - deaccumulate: true - fcmean/fcstdev/fcmax/fcmin: - filter:stream: - "enfo/eefo/oper/eefh/weef": - out_steps: - type: range - interval: 24 - width: 168 - "enfh/enwh": - out_steps: - filter:param: - "*": - out_steps: - - type: range - width: 24 - interval: 24 - - type: range - width: 72 - end: 240 - interval: 24 - end: 216 - - type: range - width: 120 - end: 240 - interval: 24 - - "0-240" - - "0-360" - - "240-360" - 121/122/123/140229/59/228044/140249/164: - out_steps: - type: range - end: 168 - width: 24 - interval: 24 - "eefh/weeh": - filter:param: - "*": - out_steps: - type: range - interval: 24 - width: 168 - "msmm": - out_steps: - type: monthly - date: "{date}" - taem/taes: - filter:stream: - "enfo/eefo/oper/efhs/eehs": - out_steps: - type: range - interval: 24 - width: 168 - ep: - filter:stream: - enfo: - filter:param: - 131060/131061/131062/131063/131098/131099/131085/131070/131071/131072/131100: - out_steps: - type: range - width: 24 - interval: 12 - 131064/131065/131066/131067/131070/131071/131072/131100/131020/131021/131073: - out_steps: - - type: range - width: 120 - start: 120 - interval: 120 - - "120-168" - - "168-240" - 131068/131069/131073/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: - out_steps: - type: instantaneous - start: 12 - interval: 12 - waef: - filter:param: - 131074/131075/131076/131077/131078/131079/131080/131081: - out_steps: - - type: range - width: 120 - start: 120 - interval: 120 - - "120-168" - - "168-240" - 131074/131075/131076/131077/131078/131079/131080/131081: - out_steps: - type: instantaneous - start: 12 - interval: 12 - efi/efic/sot: - filter:stream: - "eefo/weef": - out_steps: - type: range - interval: 24 - width: 168 - "enfo/waef": - filter:param: - "*": - filter:time: - "1200": - out_steps: - - type: range - start: 12 - end: 240 - width: 24 - interval: 24 - - type: range - start: 12 - end: 240 - width: 72 - interval: 24 - end: 216 - - type: range - start: 12 - end: 240 - width: 120 - interval: 24 - - type: range - start: 240 - width: 24 - interval: 24 - - "0-240" - - "0-360" - - "240-360" - "0000": - out_steps: - - type: range - width: 24 - interval: 24 - - type: range - width: 72 - end: 240 - interval: 24 - end: 216 - - type: range - width: 120 - end: 240 - interval: 24 - - "0-240" - - "0-360" - - "240-360" - "0600/1800": - out_steps: - - type: range - width: 24 - end: 144 - interval: 12 - 132201/132202/132049/132144/132216/132059/132044: - filter:time: - "1200": - out_steps: - type: range - start: 12 - end: 180 - width: 24 - interval: 24 - "0000": - out_steps: - type: range - end: 168 - width: 24 - interval: 24 - "0600/1800": - out_steps: - - type: range - width: 24 - end: 144 - interval: 12 - cd: - filter:stream: - efhs/wehs: - filter:param: - "*": - out_steps: - - type: range - width: 24 - interval: 12 - - type: range - width: 72 - end: 240 - interval: 12 - end: 216 - - type: range - width: 120 - end: 240 - interval: 12 - - "0-240" - - "0-360" - - "240-360" - "228004/228": - out_steps: - - type: range - width: 24 - interval: 12 - - type: range - width: 72 - end: 240 - interval: 12 - end: 216 - - type: range - width: 120 - end: 240 - interval: 12 - - type: range - width: 168 - interval: 24 - - "0-240" - - "0-360" - - "240-360" - "202/201/49/140200/59/228044/140249/228006": - out_steps: - type: range - width: 24 - interval: 12 - eehs: - out_steps: - type: range - width: 168 - interval: 24 - pfc: - filter:param: - "228/201/202": - out_steps: - type: range - width: 12 - interval: 6 -inputs: - filter:stream: - oper: - filter:type: - fc/fcmean/fcstdev/fcmin/fcmax/pfc: - forecast: - inputs: - request: &oper_fc - stream: oper - type: fc - wave: - filter:type: - fc/fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: &wave_fc - stream: wave - type: fc - scda: - filter:time: - 0600/1800: - filter:type: - fc/fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: &scda_fc - stream: scda - time: "{time}" - type: fc - scwv: - filter:time: - 0600/1800: - filter:type: - fc/fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: &scwv_fc - stream: scwv - time: "{time}" - type: fc - enfo: - filter:time: - "0000/1200": - filter:type: - "em/es/pb/efi/sot/pfc": - forecast: - inputs: - - request: &enfo_cf - stream: enfo - type: "cf" - time: "{time}" - - request: &enfo_pf - stream: enfo - type: "pf" - time: "{time}" - members: &enfo_members - start: 1 - end: 50 - "cf/efic": - forecast: - inputs: - request: *enfo_cf - "pf": - forecast: - inputs: - request: *enfo_pf - members: *enfo_members - "ep": - filter:param: - 131060/131061/131062/131063/131064/131065/131066/131067/131068/131069/131070/131071/131072/131073/131074/131075/131076/131077131078/131079/131080/131081//131098/131099/131100/131085: - forecast: - inputs: - request: *enfo_pf - members: *enfo_members - 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: - forecast: - inputs: - - request: *enfo_cf - - request: *enfo_pf - members: *enfo_members - fcmean/fcstdev/fcmin/fcmax: - filter:members: - only_zero: - forecast: - inputs: - request: *enfo_cf - members: null - no_zero: - forecast: - inputs: - request: *enfo_pf - members: *enfo_members - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *enfo_cf - - request: *enfo_pf - members: *enfo_members - "0600/1800": - filter:type: - "em/es/pb/efi/sot/pfc": - forecast: - inputs: - - request: *scda_fc - - request: *enfo_pf - members: *enfo_members - "efic": - forecast: - inputs: - request: *scda_fc - "pf": - forecast: - inputs: - request: *enfo_pf - members: *enfo_members - "ep": - filter:param: - 131060/131061/131062/131063/131064/131065/131066/131067/131068/131069/131070/131071/131072/131073/131074/131075/131076/131077131078/131079/131080/131081//131098/131099/131100/131085: - forecast: - inputs: - request: *enfo_pf - members: *enfo_members - 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: - forecast: - inputs: - - request: *scda_fc - - request: *enfo_pf - members: *enfo_members - fcmean/fcstdev/fcmin/fcmax: - filter:members: - only_zero: - forecast: - inputs: - request: *scda_fc - no_zero: - forecast: - inputs: - request: *enfo_pf - members: *enfo_members - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *scda_fc - - request: *enfo_pf - members: *enfo_members - climatology: - inputs: - request: - stream: "efhs" - time: "0000" - scheme: ecmwf-4days - waef: - filter:time: - "0000/1200": - filter:type: - em/es/pb/efi/sot: - forecast: - inputs: - - request: &waef_cf - stream: waef - type: "cf" - time: "{time}" - - request: &waef_pf - stream: waef - type: "pf" - time: "{time}" - members: *enfo_members - "cf/efic": - forecast: - inputs: - request: *waef_cf - "pf/ep": - forecast: - inputs: - request: *waef_pf - members: *enfo_members - fcmean/fcstdev/fcmin/fcmax: - filter:members: - only_zero: - forecast: - inputs: - request: *waef_cf - no_zero: - forecast: - inputs: - request: *waef_pf - members: *enfo_members - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *waef_cf - - request: *waef_pf - members: *enfo_members - "0600/1800": - filter:type: - em/es/pb/efi/sot: - forecast: - inputs: - - request: *scwv_fc - - request: *waef_pf - members: *enfo_members - "efic": - forecast: - inputs: - request: *scwv_fc - "pf/ep": - forecast: - inputs: - request: *waef_pf - members: *enfo_members - fcmean/fcstdev/fcmin/fcmax: - filter:members: - only_zero: - forecast: - inputs: - request: *scwv_fc - no_zero: - forecast: - inputs: - request: *waef_pf - members: *enfo_members - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *scwv_fc - - request: *waef_pf - members: *enfo_members - climatology: - inputs: - request: - stream: "wehs" - time: "0000" - scheme: ecmwf-4days - eefo: - filter:type: - "em/es/pb": - forecast: - inputs: - - request: &eefo_cf - stream: eefo - type: "cf" - - request: &eefo_pf - stream: eefo - type: "pf" - members: &eefo_members - start: 1 - end: 100 - "cf": - forecast: - inputs: - request: *eefo_cf - "pf": - forecast: - inputs: - request: *eefo_pf - members: *eefo_members - fcmean/fcstdev/fcmin/fcmax: - filter:param: - "*": - filter:members: - only_zero: - forecast: - inputs: - request: *eefo_cf - no_zero: - forecast: - inputs: - request: *eefo_pf - members: *eefo_members - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *eefo_cf - - request: *eefo_pf - members: *eefo_members - 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: - filter:type: - fcmean: - forecast: - inputs: - request: - stream: eefo - type: fcmean - members: - start: 0 - end: 100 - "efi/sot/taem/taes": - forecast: - inputs: - - request: - stream: eefo - type: fcmean - members: - start: 0 - end: 100 - derive_step: - type: precomputed - climatology: - inputs: - request: - stream: "eehs" - time: "0000" - scheme: ecmwf-2days - weef: - filter:type: - "em/es/pb": - forecast: - inputs: - - request: &weef_cf - stream: weef - type: "cf" - - request: &weef_pf - stream: weef - type: "pf" - members: *eefo_members - "cf": - forecast: - inputs: - request: *weef_cf - "pf": - forecast: - inputs: - request: *weef_pf - members: *eefo_members - fcmean/fcstdev/fcmin/fcmax: - filter:members: - only_zero: - forecast: - inputs: - request: *weef_cf - no_zero: - forecast: - inputs: - request: *weef_pf - members: *eefo_members - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *weef_cf - - request: *weef_pf - members: *eefo_members - "efi/efic/sot/taem/taes": - forecast: - inputs: - - request: - stream: weef - type: fcmean - members: - start: 0 - end: 100 - derive_step: - type: precomputed - climatology: - inputs: - request: - stream: "wees" - time: "0000" - scheme: ecmwf-2days - msmm: - filter:type: - "fcmean/fcstdev/fcmin/fcmax": - forecast: - inputs: - request: - stream: mmsf - type: "fc" - members: - start: 0 - end: 50 - swmm: - filter:type: - "fcmean/fcstdev/fcmin/fcmax": - forecast: - inputs: - request: - stream: wasf - type: "fc" - members: - start: 0 - end: 50 - enfh: - filter:type: - "fcmean/fcstdev/fcmax/fcmin": - filter:members: - only_zero: - forecast: - inputs: - request: &enfh_cf - stream: enfh - type: "cf" - time: "0000" - scheme: &enfh_scheme ecmwf-4days - no_zero: - forecast: - inputs: - request: &enfh_pf - stream: enfh - type: "pf" - time: "0000" - members: &enfh_members - start: 1 - end: 10 - scheme: *enfh_scheme - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *enfh_cf - - request: *enfh_pf - members: *enfh_members - scheme: *enfh_scheme - enwh: - filter:type: - "fcmean/fcstdev/fcmax/fcmin": - filter:members: - only_zero: - forecast: - inputs: - request: &enwh_cf - stream: enwh - type: "cf" - time: "0000" - scheme: *enfh_scheme - no_zero: - forecast: - inputs: - request: &enwh_pf - stream: enwh - type: "pf" - time: "0000" - members: *enfh_members - scheme: *enfh_scheme - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *enwh_cf - - request: *enwh_pf - members: *enfh_members - scheme: *enfh_scheme - eefh: - filter:type: - "fcmean/fcstdev/fcmax/fcmin": - filter:members: - only_zero: - forecast: - inputs: - request: &eefh_cf - stream: eefh - type: "cf" - time: "0000" - scheme: &eefh_scheme ecmwf-2days - no_zero: - forecast: - inputs: - request: &eefh_pf - stream: eefh - type: "pf" - time: "0000" - members: &eefh_members - start: 1 - end: 10 - scheme: *eefh_scheme - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *eefh_cf - - request: *eefh_pf - members: *eefh_members - scheme: *eefh_scheme - weeh: - filter:type: - "fcmean/fcstdev/fcmax/fcmin": - filter:members: - only_zero: - forecast: - inputs: - request: &weeh_cf - stream: weeh - type: "cf" - time: "0000" - scheme: *eefh_scheme - no_zero: - forecast: - inputs: - request: &weeh_pf - stream: weeh - type: "pf" - time: "0000" - members: *eefh_members - scheme: *eefh_scheme - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *weeh_cf - - request: *weeh_pf - members: *eefh_members - scheme: *eefh_scheme - efhs: - forecast: - inputs: - - request: - stream: enfh - type: "cf" - time: "0000" - - request: - stream: enfh - type: "pf" - time: "0000" - members: &efhs_members - start: 1 - end: 10 - scheme: *enfh_scheme - wehs: - forecast: - inputs: - - request: - stream: enwh - type: "cf" - time: "0000" - - request: - stream: enwh - type: "pf" - time: "0000" - members: *efhs_members - scheme: *enfh_scheme - eehs: - forecast: - inputs: - - request: - stream: eefh - type: cf - time: "0000" - - request: - stream: eefh - type: pf - time: "0000" - members: - start: 1 - end: 10 - scheme: *eefh_scheme - filter:param: - "*": - filter:type: - "fc/cf/pf": - from_inputs: False - forecast: - inputs: - request: - param: "{param}" - "em/es/pb/cd/fcmean/fcstdev/fcmin/fcmax/taem/taes": - forecast: - inputs: - request: - param: "{param}" - "10": - filter:type: - fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: ["138", "155"] - "131/132": - filter:type: - fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: ["138", "155"] - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "121/122": - forecast: - inputs: - request: - param: "{param}" - filter:type: - em/es/pb: - forecast: - inputs: - derive_step: - type: default - by: 6 - "*": - from_inputs: false - "228": - filter:type: - "pfc": - from_inputs: false - "fc/cf/pf/fcmean": - from_inputs: False - forecast: - inputs: - request: - param: "{param}" - "em/es/pb/cd": - forecast: - inputs: - request: - param: "{param}" - "228026/228027": - filter:type: - em/es/pb: - forecast: - inputs: - request: - param: "{param}" - derive_step: - type: default - by: 3 - 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: - filter:type: - ep: - filter:param: - 131020/131021: - forecast: - inputs: - - request: - param: "130" - derive_step: - type: default - include_start: true - by: 12 - members: null - - request: - param: "130" - derive_step: - type: default - include_start: true - by: 12 - "*": - forecast: - inputs: - - request: - param: "130" - derive_step: - type: default - by: 12 - members: null - - request: - param: "130" - derive_step: - type: default - by: 12 - climatology: - required: true - inputs: - - request: - param: "130" - type: "em" - derive_date: - option: previous - strict: False - derive_step: - type: instantaneous - - request: - param: "130" - type: "es" - derive_date: - option: previous - strict: False - derive_step: - type: instantaneous - 131060/131061/131062/131063/131064/131065/131066/131067/131098/131099/131085: - filter:type: - ep: - forecast: - inputs: - request: - param: "228" - derive_step: - type: deaccumulate - "131068/131069": - filter:type: - ep: - forecast: - inputs: - request: - param: ["165", "166"] - 131070/131071/131072/131100: - filter:type: - ep: - forecast: - inputs: - request: - param: "123" - derive_step: - type: default - by: 6 - "131073": - filter:type: - ep: - filter:steptype: - instantaneous: - forecast: - inputs: - request: - param: "167" - range: - forecast: - inputs: - request: - param: "122" - derive_step: - type: default - by: 6 - 131074/131075/131076/131077: - filter:type: - ep: - forecast: - inputs: - request: - param: "140229" - 131078/131079/131080/131081: - filter:type: - ep: - forecast: - inputs: - request: - param: "140232" - "132044": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: ["228035", "228036"] - climatology: - inputs: - request: - param: "228044" - "132045": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: ["162071", "162072"] - climatology: - inputs: - request: - param: "162045" - "132049": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "123" - climatology: - inputs: - request: - param: "49" - "132059": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "228035" - climatology: - inputs: - request: - param: "59" - "132144": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "144" - climatology: - inputs: - request: - param: "144" - "132165": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "207" - climatology: - inputs: - request: - param: "228005" - "132167": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "167" - climatology: - inputs: - request: - param: "228004" - "132201": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "121" - climatology: - inputs: - request: - param: "201" - "132202": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "122" - climatology: - inputs: - request: - param: "202" - "132216": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "140229" - climatology: - inputs: - request: - param: "140200" - "132228": - filter:type: - efi/efic/sot: - filter:stream: - eefo: - forecast: - inputs: - request: - param: "172228" - climatology: - inputs: - request: - param: "228" - enfo: - forecast: - inputs: - request: - param: "228" - climatology: - inputs: - request: - param: "228" - "171001": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "1" - climatology: - inputs: - request: - param: "1" - "171002": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "2" - climatology: - inputs: - request: - param: "2" - "171006": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "228246" - climatology: - inputs: - request: - param: "228246" - "171007": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "228247" - climatology: - inputs: - request: - param: "228247" - "171033": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "33" - climatology: - inputs: - request: - param: "33" - "171034": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "34" - climatology: - inputs: - request: - param: "34" - "171078": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "78" - climatology: - inputs: - request: - param: "78" - "171079": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "79" - climatology: - inputs: - request: - param: "79" - "171121": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "121" - climatology: - inputs: - request: - param: "121" - "171122": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "122" - climatology: - inputs: - request: - param: "122" - "171129": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "129" - climatology: - inputs: - request: - param: "129" - "171130": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "130" - climatology: - inputs: - request: - param: "130" - "171131": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "131" - climatology: - inputs: - request: - param: "131" - "171132": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "132" - climatology: - inputs: - request: - param: "132" - "171133": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "133" - climatology: - inputs: - request: - param: "133" - "171136": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "136" - climatology: - inputs: - request: - param: "136" - "171137": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "137" - climatology: - inputs: - request: - param: "137" - "171139": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "139" - climatology: - inputs: - request: - param: "139" - "171141": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "141" - climatology: - inputs: - request: - param: "141" - "171151": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "151" - climatology: - inputs: - request: - param: "151" - "171164": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "164" - climatology: - inputs: - request: - param: "164" - "171165": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "165" - climatology: - inputs: - request: - param: "165" - "171166": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "166" - climatology: - inputs: - request: - param: "166" - "171167": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "167" - climatology: - inputs: - request: - param: "167" - "171168": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "168" - climatology: - inputs: - request: - param: "168" - "171201": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "201" - climatology: - inputs: - request: - param: "201" - "171202": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "202" - climatology: - inputs: - request: - param: "202" - "173142": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "172142" - climatology: - inputs: - request: - param: "172142" - "173143": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "172143" - climatology: - inputs: - request: - param: "172143" - "173144": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "172144" - climatology: - inputs: - request: - param: "172144" - "173189": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "172189" - climatology: - inputs: - request: - param: "172189" - "173228": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "172228" - climatology: - inputs: - request: - param: "172228" - "172008": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "8" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172009": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "9" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172142": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "142" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172143": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "143" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172144": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "144" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172146": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "146" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172147": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "147" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172169": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "169" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172175": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "175" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172176": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "176" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172177": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "177" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172178": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "178" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172179": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "179" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172180": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "180" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172181": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "181" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172182": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "182" - "172189": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "189" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172205": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "205" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172212": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "212" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172228": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "228" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "200142": - from_inputs: false - forecast: - inputs: - request: - param: "142" - derive_step: - type: deaccumulate - "200143": - from_inputs: false - forecast: - inputs: - request: - param: "143" - derive_step: - type: deaccumulate - "200144": - from_inputs: false - forecast: - inputs: - request: - param: "144" - derive_step: - type: deaccumulate - "200189": - from_inputs: false - forecast: - inputs: - request: - param: "189" - derive_step: - type: deaccumulate - "200228": - from_inputs: false - forecast: - inputs: - request: - param: "228" - derive_step: - type: deaccumulate - "228216": - from_inputs: false - forecast: - inputs: - request: - param: "228216" - derive_step: - type: deaccumulate - "201": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "121" - cd/em/es: # This case is handled below - filter:stream: - efhs/eehs: {} - pfc: - from_inputs: false - taem/taes: - filter:stream: - efhs/eehs/eefo: - forecast: - inputs: - request: - param: "{param}" - "202": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "122" - pfc: - from_inputs: false - cd/em/es: - filter:stream: - efhs/eehs: {} - taem/taes: - filter:stream: - efhs/eehs/eefo: - forecast: - inputs: - request: - param: "{param}" - "207": - filter:type: - fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: ["165", "166"] - "140249": - from_inputs: false - filter:type: - fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: ["165", "166"] - cd: {} - "228249": - from_inputs: false - forecast: - inputs: - request: - param: ["228246", "228247"] - "234167": - filter:type: - taem: - forecast: - inputs: - request: - param: "171167" - climatology: - inputs: - request: - param: "167.128" - "234139": - filter:type: - taem: - forecast: - inputs: - request: - param: "171139" - climatology: - inputs: - request: - param: "139.128" - "234151": - filter:type: - taem: - forecast: - inputs: - request: - param: "171151" - climatology: - inputs: - request: - param: "151.128" - "234228": - filter:type: - taem: - forecast: - inputs: - request: - param: "173228" - climatology: - inputs: - request: - param: "228.172" - "235117": - filter:type: - fcmean: - forecast: - inputs: - request: - param: "228235" - taem/taes: - forecast: - inputs: - request: - param: "235117" - "237117": - filter:type: - fcmax: - forecast: - inputs: - request: - param: "228235" - "238117": - filter:type: - fcmin: - forecast: - inputs: - request: - param: "228235" - "239117": - filter:type: - fcstdev: - forecast: - inputs: - request: - param: "228235" - "260033": - from_inputs: false - forecast: - inputs: - request: - param: ["228220", "228218"] - "260053": - from_inputs: false - forecast: - inputs: - request: - param: ["228220", "228221"] - "261001": - filter:type: - cf/pf/fc: - forecast: - inputs: - - request: - param: ["169", "175", "176", "177", "228021", "47"] - derive_step: - type: deaccumulate - - request: - param: ["165", "166", "167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261001" - "261014": - filter:type: - cf/pf/fc: - forecast: - inputs: - - request: - param: ["169", "175", "176", "177", "228021", "47"] - derive_step: - type: deaccumulate - - request: - param: ["165", "166", "167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261014" - "261015": - filter:type: - cf/pf/fc: - forecast: - inputs: - - request: - param: ["169", "175", "176", "177", "228021", "47"] - derive_step: - type: deaccumulate - - request: - param: ["165", "166", "167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261015" - "260004": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "260004" - "260242": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "260242" - "261016": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261016" - "260005": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["165", "166", "167"] - "em/es/pb": - forecast: - inputs: - request: - param: "260005" - "260255": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["165", "166", "167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "260255" - "261018": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["165", "166", "167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261018" - "261002": - filter:type: - cf/pf/fc: - forecast: - inputs: - - request: - param: ["47", "228021", "169", "175", "176", "177"] - derive_step: - type: deaccumulate - - request: - param: "167" # Required for metadata of cossza - "em/es/pb": - forecast: - inputs: - request: - param: "261002" - "261023": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261023" - filter:type: - fcmean/fcstdev/fcmax: - filter:stream: - enfo/waef/eefo/weef: - filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": - forecast: - inputs: - derive_step: - type: default - 40/41/42/170/140229/140231/140232/140233/140245: - forecast: - inputs: - derive_step: - type: default - by: 24 - 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: - forecast: - inputs: - derive_step: - type: default - include_start: true - by: 24 - 1/2/3/60/129/130/131/132/133/138/155: - forecast: - inputs: - derive_step: - type: default - by: 12 - 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: - forecast: - inputs: - derive_step: - type: precomputed - climatology: - inputs: - request: - type: taem - derive_date: - - option: nearest - - option: bracket - num: 2 - strict: False - derive_step: - type: range - required: true - enfh/enwh/eefh/weeh: - filter:selection: - mclimate: - from_inputs: false - forecast: - inputs: - derive_step: - type: default - filter:type: - fcmean: - filter:param: - "162071": - forecast: - inputs: - request: - param: ["162071", "162072"] - "207": - forecast: - inputs: - request: - param: ["165", "166"] - "59": - forecast: - inputs: - request: - param: "228035" - "228044": - forecast: - inputs: - request: - param: ["228035", "228036"] - "167/228/144": - filter:steplength: - "*": - filter:param: - "228/144": - forecast: - inputs: - derive_step: - type: deaccumulate - "*": {} - "168": - forecast: - inputs: - - request: - type: fcmean - members: - start: 0 - end: 0 - derive_step: - type: precomputed - - request: - type: fcmean - derive_step: - type: precomputed - filter:param: - "228": - forecast: - inputs: - request: - param: "172228" - "167": - forecast: - inputs: - request: - param: "167" - "*": {} - "*": - filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": - forecast: - inputs: - derive_step: - type: default - 40/41/42/170/140229/140231/140232/140233/140245: - forecast: - inputs: - derive_step: - type: default - by: 24 - 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: - forecast: - inputs: - derive_step: - type: default - include_start: true - by: 24 - 1/2/3/60/129/130/131/132/133/138/155: - forecast: - inputs: - derive_step: - type: default - by: 12 - msmm/swmm: - filter:param: - "34/139/151/164/165/166/167/168/168/207/229/230": - forecast: - inputs: - derive_step: - type: monthly - 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: - forecast: - inputs: - derive_step: - type: monthly - by: 24 - 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: - forecast: - inputs: - derive_step: - type: monthly - include_start: true - allow_missing_zero: true - by: 24 - 129/130/133/138/155/203: - forecast: - inputs: - derive_step: - type: monthly - by: 12 - fcmin: - filter:stream: - enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: - filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": - forecast: - inputs: - derive_step: - type: default - 172142/172143/172144/172228: - from_inputs: false - 40/41/42/170/140229/140231/140232/140233/140245: - forecast: - inputs: - derive_step: - type: default - by: 24 - 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: - forecast: - inputs: - derive_step: - type: default - include_start: true - by: 24 - 1/2/3/60/129/130/131/132/133/138/155: - forecast: - inputs: - derive_step: - type: default - by: 12 - msmm/swmm: - filter:param: - "34/139/151/164/165/166/167/168/168/207/229/230": - forecast: - inputs: - derive_step: - type: monthly - 172142/172143/172144/172228: - from_inputs: false - 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: - forecast: - inputs: - derive_step: - type: monthly - by: 24 - 172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212: - forecast: - inputs: - derive_step: - type: monthly - include_start: true - allow_missing_zero: true - by: 24 - 129/130/133/138/155/203: - forecast: - inputs: - derive_step: - type: monthly - by: 12 - efi/efic/sot: - filter:stream: - "eefo/weef": - filter:param: - 132044/132049/132059/132144/132045/132165/132167/132201/132202/132216/132228: - climatology: - required: true - inputs: - request: - type: cd - derive_date: - option: nearest - derive_step: - type: range - "enfo/waef": - climatology: - required: true - inputs: - request: - type: cd - derive_date: - - option: next - sequence: - type: daily - - option: previous - strict: false - derive_step: - type: range - filter:param: - "132044/132049/132059/132045/132165/132167/132201/132202/132216": - forecast: - inputs: - derive_step: - type: default - by: 6 - 132228/132144: - forecast: - inputs: - derive_step: - type: deaccumulate - taem/taes: - filter:stream: - eefo: - filter:param: - "*": {} - 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: - forecast: - inputs: - derive_step: - type: precomputed - climatology: - inputs: - request: - type: taem - derive_date: - - option: nearest - - option: bracket - num: 2 - strict: False - derive_step: - type: range - required: true - 234167/234139/234151/234228: - forecast: - inputs: - derive_step: - type: precomputed - climatology: - inputs: - - request: - stream: eefh - type: fcmean - members: - start: 0 - end: 10 - derive_date: - - option: nearest - - option: bracket - num: 1 - strict: False - derive_step: - type: range - - request: - type: taem - derive_date: - - option: nearest - - option: bracket - num: 1 - strict: False - derive_step: - type: range - required: true - efhs/wehs/eehs: - forecast: - inputs: - - request: - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - derive_hdate: - rstart: -20 - rend: 0 - recurrence: "yearly" - include_endpoint: false - - request: - type: "fcmean" - derive_step: - type: precomputed - derive_hdate: - rstart: -20 - rend: 0 - recurrence: "yearly" - include_endpoint: false - cd: - filter:stream: - efhs/eehs: - from_inputs: false - forecast: - inputs: - - request: - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - - request: - type: "fcmean" - derive_step: - type: precomputed - filter:steplength: - "*": - filter:stream: - efhs: - forecast: - inputs: - derive_date: - - option: bracket - num: 4 - strict: False - "168": - forecast: - inputs: - derive_date: - - option: bracket - num: 2 - strict: False - filter:param: - "228004": - forecast: - inputs: - request: - param: "167.128" - "49": - forecast: - inputs: - request: - param: "123.128" - "228005": - forecast: - inputs: - request: - param: "207.128" - "201": - forecast: - inputs: - request: - param: "121.128" - "202": - forecast: - inputs: - request: - param: "122.128" - "162045": - forecast: - inputs: - request: - param: "71.162" - "228006": - forecast: - inputs: - request: - param: "164.128" - "228": - filter:steplength: - "*": - forecast: - inputs: - request: - param: "228.128" - "168": - forecast: - inputs: - request: - param: "228.172" - "144": - forecast: - inputs: - request: - param: "144.128" - "59": - forecast: - inputs: - request: - param: "59.128" - "228044": - forecast: - inputs: - request: - param: "44.228" - "140249": - forecast: - inputs: - request: - param: "249.140" - members: null - "wehs": - from_inputs: false - forecast: - inputs: - - request: - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - - request: - type: "fcmean" - derive_step: - type: precomputed - filter:steplength: - "*": - forecast: - inputs: - derive_date: - - option: bracket - num: 4 - strict: False - "168": - forecast: - inputs: - derive_date: - - option: bracket - num: 2 - strict: False - filter:param: - "140200": - forecast: - inputs: - request: - param: "229.140" - em/es: - filter:stream: - enfo/waef: {} - eefo/weef: - filter:steplength: - "168": - forecast: - inputs: - - request: - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - - request: - type: "fcmean" - derive_step: - type: precomputed - "*": {} - efhs/eehs: - filter:steptype: - range: - from_inputs: false - forecast: - inputs: - - request: - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - - request: - type: "fcmean" - derive_step: - type: precomputed - filter:steplength: - "*": - filter:stream: - efhs: - forecast: - inputs: - derive_date: - - option: bracket - num: 4 - strict: False - "168": - forecast: - inputs: - derive_date: - - option: bracket - num: 2 - strict: False - filter:param: - "228004": - forecast: - inputs: - request: - param: "167.128" - "49": - forecast: - inputs: - request: - param: "123.128" - "228005": - forecast: - inputs: - request: - param: "207.128" - "201": - forecast: - inputs: - request: - param: "121.128" - "202": - forecast: - inputs: - request: - param: "122.128" - "162045": - forecast: - inputs: - request: - param: "71.162" - "228006": - forecast: - inputs: - request: - param: "164.128" - "228": - filter:steplength: - "*": - forecast: - inputs: - request: - param: "228.128" - "168": - forecast: - inputs: - request: - param: "228.172" - "144": - forecast: - inputs: - request: - param: "144.128" - "59": - forecast: - inputs: - request: - param: "59.128" - "228044": - forecast: - inputs: - request: - param: "44.228" - instantaneous: - forecast: - inputs: - derive_hdate: - rstart: -20 - rend: 0 - recurrence: "yearly" - include_endpoint: false - "wehs": - filter:steptype: - range: - from_inputs: false - filter:param: - "140200": - forecast: - inputs: - - request: - param: "229.140" - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - derive_date: - - option: bracket - num: 4 - strict: False - - request: - param: "229.140" - type: "fcmean" - derive_step: - type: precomputed - derive_date: - - option: bracket - num: 4 - strict: False - instantaneous: - forecast: - inputs: - derive_hdate: - rstart: -20 - rend: 0 - recurrence: "yearly" - include_endpoint: false - pfc: - filter:param: - "228": - filter:steplength: - "6": - filter:time: - "0000/1200": - forecast: - update_request_method: product - inputs: - - request: - param: "228" - derive_step: - type: deaccumulate - - request: - param: ["138", "155"] - levtype: pl - levelist: 700 - derive_step: - type: default - by: 3 - - request: - param: "143" - derive_step: - type: deaccumulate - - request: - param: "228022" - derive_step: - type: deaccumulate - by: 24 - - request: - param: "228235" - derive_step: - type: default - by: 3 - - request: - param: "74" - stream: oper - type: fc - members: null - derive_step: - type: select - index: -1 - "0600/1800": - forecast: - update_request_method: product - inputs: - - request: - param: "228" - derive_step: - type: deaccumulate - - request: - param: ["138", "155"] - levtype: pl - levelist: 700 - derive_step: - type: default - by: 3 - - request: - param: "143" - derive_step: - type: deaccumulate - - request: - param: "228022" - derive_step: - type: deaccumulate - by: 24 - - request: - param: "228235" - derive_step: - type: default - by: 3 - - request: - param: "74" - stream: scda - type: fc - members: null - derive_step: - type: select - index: -1 - "12": - forecast: - update_request_method: product - inputs: - - request: - param: "228" - derive_step: - type: deaccumulate - - request: - param: ["138", "155"] - levtype: pl - levelist: 700 - derive_step: - type: default - by: 6 - - request: - param: "143" - derive_step: - type: deaccumulate - - request: - param: "228022" - derive_step: - type: deaccumulate - by: 24 - - request: - param: "228035" - derive_step: - type: default - by: 6 - "24": - forecast: - update_request_method: product - inputs: - - request: - param: "228" - derive_step: - type: deaccumulate - - request: - param: ["138", "155"] - levtype: pl - levelist: 700 - derive_step: - type: default - by: 12 - - request: - param: "143" - derive_step: - type: deaccumulate - - request: - param: "228022" - derive_step: - type: deaccumulate - by: 24 - - request: - param: "228035" - derive_step: - type: default - by: 12 - fc/cf/pf/ep/pb: {} diff --git a/pproc-core/tests/templates/ensms.yaml b/pproc-core/tests/workflows/templates/ensms.yaml similarity index 99% rename from pproc-core/tests/templates/ensms.yaml rename to pproc-core/tests/workflows/templates/ensms.yaml index ecf1b6f8..e8fbcd67 100644 --- a/pproc-core/tests/templates/ensms.yaml +++ b/pproc-core/tests/workflows/templates/ensms.yaml @@ -103,4 +103,4 @@ date: "20230914" time: 12 expver: "0001" - step: 6-12 \ No newline at end of file + step: 6-12 diff --git a/pproc-core/tests/templates/extreme.yaml b/pproc-core/tests/workflows/templates/extreme.yaml similarity index 99% rename from pproc-core/tests/templates/extreme.yaml rename to pproc-core/tests/workflows/templates/extreme.yaml index eef8e0c5..198038f0 100644 --- a/pproc-core/tests/templates/extreme.yaml +++ b/pproc-core/tests/workflows/templates/extreme.yaml @@ -121,4 +121,4 @@ date: "20230914" time: 12 expver: "0001" - step: 12-36 \ No newline at end of file + step: 12-36 diff --git a/pproc-core/tests/templates/prob.yaml b/pproc-core/tests/workflows/templates/prob.yaml similarity index 99% rename from pproc-core/tests/templates/prob.yaml rename to pproc-core/tests/workflows/templates/prob.yaml index c4ea174f..d242ab84 100644 --- a/pproc-core/tests/templates/prob.yaml +++ b/pproc-core/tests/workflows/templates/prob.yaml @@ -137,4 +137,4 @@ date: 20230914 time: 12 expver: "0001" - step: 126 \ No newline at end of file + step: 126 diff --git a/pproc-core/tests/templates/quantiles.yaml b/pproc-core/tests/workflows/templates/quantiles.yaml similarity index 100% rename from pproc-core/tests/templates/quantiles.yaml rename to pproc-core/tests/workflows/templates/quantiles.yaml diff --git a/pproc-core/tests/templates/t850.yaml b/pproc-core/tests/workflows/templates/t850.yaml similarity index 99% rename from pproc-core/tests/templates/t850.yaml rename to pproc-core/tests/workflows/templates/t850.yaml index 3165a572..263433e2 100644 --- a/pproc-core/tests/templates/t850.yaml +++ b/pproc-core/tests/workflows/templates/t850.yaml @@ -117,4 +117,4 @@ date: "20230914" time: 12 expver: "0001" - step: 168 \ No newline at end of file + step: 168 diff --git a/pproc-core/tests/templates/wind.yaml b/pproc-core/tests/workflows/templates/wind.yaml similarity index 99% rename from pproc-core/tests/templates/wind.yaml rename to pproc-core/tests/workflows/templates/wind.yaml index 276e1a2c..5245f7e5 100644 --- a/pproc-core/tests/templates/wind.yaml +++ b/pproc-core/tests/workflows/templates/wind.yaml @@ -120,4 +120,4 @@ date: "20230914" time: 12 expver: "0001" - step: 6 \ No newline at end of file + step: 6 diff --git a/pproc-core/tests/test_fluent.py b/pproc-core/tests/workflows/test_fluent.py similarity index 71% rename from pproc-core/tests/test_fluent.py rename to pproc-core/tests/workflows/test_fluent.py index a2131bad..ca795f59 100644 --- a/pproc-core/tests/test_fluent.py +++ b/pproc-core/tests/workflows/test_fluent.py @@ -8,13 +8,17 @@ # nor does it submit to any jurisdiction. import os +import tempfile + import pytest import xarray as xr -from earthkit.workflows.fluent import Node, Payload +from earthkit.workflows.fluent import Node +from earthkit.workflows.fluent import Payload +from earthkit.workflows.graph import Graph +from earthkit.workflows.graph import deduplicate_nodes +from earthkit.workflows.nodetree import nodetree_from_dict -from earthkit.workflows import Graph, deduplicate_nodes from earthkit.workflows.plugins.pproc.fluent import Action -import tempfile @pytest.mark.parametrize( @@ -27,12 +31,17 @@ ) def test_thermal(inputs, nnodes): action = Action( - xr.DataArray( - data=[ - Node(Payload(print, [x]), name=str(x)) for x in range(len(inputs[0])) - ], - dims=["param"], - coords={"param": inputs[0]}, + nodetree_from_dict( + { + "/": xr.DataArray( + data=[ + Node(Payload(print, [x]), name=str(x)) + for x in range(len(inputs[0])) + ], + dims=["param"], + coords={"param": inputs[0]}, + ) + } ) ) graph = Graph([]) diff --git a/pproc-core/tests/test_products.py b/pproc-core/tests/workflows/test_products.py similarity index 54% rename from pproc-core/tests/test_products.py rename to pproc-core/tests/workflows/test_products.py index 5dd59817..8ab4036d 100644 --- a/pproc-core/tests/test_products.py +++ b/pproc-core/tests/workflows/test_products.py @@ -8,6 +8,7 @@ # nor does it submit to any jurisdiction. import os +from pathlib import Path import pytest import yaml @@ -18,18 +19,18 @@ @pytest.mark.parametrize( - "product, requests, expected_num_nodes", + "product, requests", [ - ["ensemble", f"{ROOT_DIR}/templates/prob.yaml", 96], - ["ensemble_anomaly", f"{ROOT_DIR}/templates/t850.yaml", 80], - ["ensemble", f"{ROOT_DIR}/templates/ensms.yaml", 82], - ["extreme", f"{ROOT_DIR}/templates/extreme.yaml", 80], - ["ensemble", f"{ROOT_DIR}/templates/quantiles.yaml", 73], + ["ensemble", os.path.join(ROOT_DIR, "templates", "prob.yaml")], + ["anomaly", os.path.join(ROOT_DIR, "templates", "t850.yaml")], + ["ensemble", os.path.join(ROOT_DIR, "templates", "ensms.yaml")], + ["extreme", os.path.join(ROOT_DIR, "templates", "extreme.yaml")], + ["ensemble", os.path.join(ROOT_DIR, "templates", "quantiles.yaml")], ], ids=["prob", "t850", "ensms", "extreme", "quantiles"], ) -def test_graph_construction(product, requests, expected_num_nodes): +def test_graph_construction(product, requests): with open(requests, "r") as f: output_requests = yaml.safe_load(f) - graph = getattr(products, product)(output_requests, f"{ROOT_DIR}/schema.yaml") - assert len([x for x in graph.nodes()]) == expected_num_nodes + schema_path = os.path.join(Path(ROOT_DIR).parent, "schema.yaml") + getattr(products, product)(output_requests, schema_path) diff --git a/pproc-core/tests/test_templates.py b/pproc-core/tests/workflows/test_templates.py similarity index 64% rename from pproc-core/tests/test_templates.py rename to pproc-core/tests/workflows/test_templates.py index 9dbd11ed..47fe02a6 100644 --- a/pproc-core/tests/test_templates.py +++ b/pproc-core/tests/workflows/test_templates.py @@ -8,15 +8,20 @@ # nor does it submit to any jurisdiction. import os +from pathlib import Path import pytest import yaml -from earthkit.workflows.graph import Graph, deduplicate_nodes -from pproc.config.utils import expand, squeeze +from earthkit.workflows.graph import Graph +from earthkit.workflows.graph import deduplicate_nodes from earthkit.workflows.plugins.pproc.fluent import from_source -from earthkit.workflows.plugins.pproc.templates import derive_template, from_request +from earthkit.workflows.plugins.pproc.templates import derive_template +from earthkit.workflows.plugins.pproc.templates import from_request from earthkit.workflows.plugins.pproc.utils.request import Request +from ppcore.utils.requests import expand +from ppcore.utils.requests import squeeze + ROOT_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__))) @@ -46,24 +51,25 @@ @pytest.mark.parametrize( - "requests, expected_num_nodes", + "requests", [ - [f"{ROOT_DIR}/templates/prob.yaml", 96], - [f"{ROOT_DIR}/templates/ensms.yaml", 82], - [f"{ROOT_DIR}/templates/quantiles.yaml", 73], + os.path.join(ROOT_DIR, "templates", "prob.yaml"), + os.path.join(ROOT_DIR, "templates", "ensms.yaml"), + os.path.join(ROOT_DIR, "templates", "quantiles.yaml"), ], ids=["prob", "ensms", "quantiles"], ) -def test_from_request(requests, expected_num_nodes): +def test_from_request(requests): with open(requests, "r") as f: output_requests = yaml.safe_load(f) + schema_path = os.path.join(Path(ROOT_DIR).parent, "schema.yaml") graph = Graph([]) for req in output_requests: - config = derive_template(req, f"{ROOT_DIR}/schema.yaml") + config = derive_template(req, schema_path) source = from_source( [ - Request(x, no_expand=("number")) + Request(x, no_expand=("number",)) for x in squeeze( sum([list(expand(x)) for x in config.inputs], []), ["step", "number", "param", "levelist"], @@ -71,18 +77,15 @@ def test_from_request(requests, expected_num_nodes): ], join_key="type", backend_kwargs={"stream": True}, - ).concatenate(dim="type", keep_dim=True) - graph += ( - from_request( - req, - f"{ROOT_DIR}/schema.yaml", - ensemble_dim="type", - forecast=source, - metadata={"edition": 2}, - ) - .write("null:") - .graph() ) + new_action = from_request( + req, + schema_path, + ensemble_dim="type", + forecast=source, + metadata={"edition": 2}, + ).write({"name": "null"}) + print("GRAPH", new_action.nodes) + graph += new_action.graph() graph = deduplicate_nodes(graph) - assert len([x for x in graph.nodes()]) == expected_num_nodes diff --git a/pproc-core/uv.lock b/pproc-core/uv.lock new file mode 100644 index 00000000..55c5ec4c --- /dev/null +++ b/pproc-core/uv.lock @@ -0,0 +1,2926 @@ +version = 1 +requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, +] + +[[package]] +name = "array-api-compat" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/89/e5/9a12dd1c2b0ad61f3c3ad0fc14b888c65fd735dd9d26805f77317303cbe5/array_api_compat-1.14.0.tar.gz", hash = "sha256:c819ba707f5c507800cb545f7e6348ff1ecc46538381d9ad9b371ffc9cd6d784", size = 106369 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/d3/54cd560804a8c2b898824778e86c13c2a14600bc83532a9c4f69f2f469c3/array_api_compat-1.14.0-py3-none-any.whl", hash = "sha256:ed5af1f9b6595a199c942505f281ec994892556b6efc24679a0501e87a7d6279", size = 60124 }, +] + +[[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 = "certifi" +version = "2026.5.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134 }, +] + +[[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/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283 }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504 }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811 }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402 }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217 }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079 }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475 }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829 }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211 }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036 }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184 }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790 }, + { 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/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, +] + +[[package]] +name = "cfgrib" +version = "0.9.15.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "click" }, + { name = "eccodes" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123 }, +] + +[[package]] +name = "cftime" +version = "1.6.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/45/dcc38d7b293107d3e33b3d94b2619687eb414a4f16880e2e841cdb6ac49a/cftime-1.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ad81e8cb0eb873b33c3d1e22c6168163fdc64daa8f7aeb4da8092f272575f4d", size = 510221 }, + { url = "https://files.pythonhosted.org/packages/68/63/2875341516fcfe80f1a16f86b420aec9441223ab5381d554441c9fdae56e/cftime-1.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12d95c6af852114a13301c5a61e41afdbd1542e72939c1083796f8418b9b8b0e", size = 490684 }, + { url = "https://files.pythonhosted.org/packages/80/7f/85f2c4c7ae8300b7871af7d7d144ad06f71dc0dd6258f0d18fd966067d1b/cftime-1.6.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2659b7df700e27d9e3671f686ce474dfb5fc274966961edf996acc148dfa094a", size = 1592268 }, + { url = "https://files.pythonhosted.org/packages/6c/9a/72dbd72498e958edf41a770bbd05e68141774325a945092059f4eb9c653d/cftime-1.6.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:94cebdfcda6a985b8e69aed22d00d6b8aa1f421495adbdcff1d59b3e896d81e2", size = 1624716 }, + { url = "https://files.pythonhosted.org/packages/bc/9e/2c4c720ad8bbe87994ca62a0e3c09d3786b984af664a91a6f3a668aa0b13/cftime-1.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:179681b023349a2fe277ceccc89d4fc52c0dd105cb59b7187b5bc5d442875133", size = 1705927 }, + { url = "https://files.pythonhosted.org/packages/da/77/66484061dee5fbcb2fdcfa6a491d4efb880725117f4a339d20a5323105df/cftime-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:d8b9fdecb466879cfe8ca4472b229b6f8d0bb65e4ffd44266ae17484bac2cf38", size = 472435 }, + { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733 }, + { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946 }, + { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856 }, + { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573 }, + { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563 }, + { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631 }, + { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383 }, + { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175 }, + { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980 }, + { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166 }, + { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614 }, + { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090 }, + { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840 }, + { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534 }, + { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453 }, + { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541 }, + { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014 }, + { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625 }, + { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269 }, + { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364 }, + { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468 }, + { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725 }, + { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445 }, + { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434 }, + { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812 }, + { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768 }, + { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818 }, + { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862 }, + { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781 }, + { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218 }, + { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932 }, + { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894 }, + { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027 }, + { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065 }, +] + +[[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/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182 }, + { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329 }, + { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230 }, + { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890 }, + { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930 }, + { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109 }, + { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684 }, + { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785 }, + { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055 }, + { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502 }, + { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295 }, + { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145 }, + { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884 }, + { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343 }, + { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174 }, + { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805 }, + { 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/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328 }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061 }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031 }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239 }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589 }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733 }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652 }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229 }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552 }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806 }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316 }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274 }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468 }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460 }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330 }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828 }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627 }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008 }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303 }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282 }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595 }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986 }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711 }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036 }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998 }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056 }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537 }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176 }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723 }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085 }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819 }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915 }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234 }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042 }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706 }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727 }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882 }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860 }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564 }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276 }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238 }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189 }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352 }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024 }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869 }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541 }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634 }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384 }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133 }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257 }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851 }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393 }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251 }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609 }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014 }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979 }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238 }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110 }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824 }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103 }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194 }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827 }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168 }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018 }, + { 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.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639 }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228 }, +] + +[[package]] +name = "code-meters" +version = "0.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801 }, +] + +[[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 = "dask" +version = "2026.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "cloudpickle" }, + { name = "fsspec" }, + { name = "importlib-metadata", marker = "python_full_version < '3.12'" }, + { name = "packaging" }, + { name = "partd" }, + { name = "pyyaml" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/2a/5d8cc1579590af86576dde890254440e478c7174b93a02095ecfc2e6ba38/dask-2026.3.0.tar.gz", hash = "sha256:f7d96c8274e8a900d217c1ff6ea8d1bbf0b4c2c21e74a409644498d925eb8f85", size = 11000710 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630 }, +] + +[package.optional-dependencies] +distributed = [ + { name = "distributed", marker = "python_full_version >= '3.11'" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365 }, +] + +[[package]] +name = "deprecation" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, +] + +[[package]] +name = "dill" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019 }, +] + +[[package]] +name = "distributed" +version = "2026.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "python_full_version >= '3.11'" }, + { name = "cloudpickle", marker = "python_full_version >= '3.11'" }, + { name = "dask", marker = "python_full_version >= '3.11'" }, + { name = "jinja2", marker = "python_full_version >= '3.11'" }, + { name = "locket", marker = "python_full_version >= '3.11'" }, + { name = "msgpack", marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "psutil", marker = "python_full_version >= '3.11'" }, + { name = "pyyaml", marker = "python_full_version >= '3.11'" }, + { name = "sortedcontainers", marker = "python_full_version >= '3.11'" }, + { name = "tblib", marker = "python_full_version >= '3.11'" }, + { name = "toolz", marker = "python_full_version >= '3.11'" }, + { name = "tornado", marker = "python_full_version >= '3.11'" }, + { name = "urllib3", marker = "python_full_version >= '3.11'" }, + { name = "zict", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/84/3e98a2d61493d201f253743091cbd4f099f502f957a9a33bb9ce5b8d5416/distributed-2026.3.0.tar.gz", hash = "sha256:4a8fc6102fededfbaae45288501276da2297a054d74eb6589f01b087c7f95c26", size = 2103970 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/77/2ff7aefc09cf1306a81cd7a46af34f80ebefef81a2e8329b94b58ad813ae/distributed-2026.3.0-py3-none-any.whl", hash = "sha256:52518f4b3e6795e87b442e8f57788ba1ddc750c62d0835669c85927280d38f07", size = 1009769 }, +] + +[[package]] +name = "earthkit-data" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgrib" }, + { name = "dask" }, + { name = "deprecation" }, + { name = "earthkit-utils" }, + { name = "eccodes" }, + { name = "entrypoints" }, + { name = "filelock" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "lru-dict" }, + { name = "markdown" }, + { name = "multiurl" }, + { name = "netcdf4", version = "1.7.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, + { name = "netcdf4", version = "1.7.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pdbufr" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/d3/a00aeee76005909eaa1f7fcb1e1f2333d9f4b53866666e1bb7f9e9e15148/earthkit_data-0.20.0-py3-none-any.whl", hash = "sha256:e1df4d93354bb5bd30b967ad17d52454b4df4d6a37511fc91f950aebba592056", size = 398525 }, +] + +[[package]] +name = "earthkit-time" +version = "0.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/fa/37a9a90303908685fba892402248789de689071f6ad4c1373dfd195ac34e/earthkit_time-0.1.8.tar.gz", hash = "sha256:d211f1647c169b34cf79177aed17ac4f472cb8bd3096f98b08d7f77293dfcd81", size = 32560 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/96/614cc95e2bd7f2075b8b4f4b85b37df655c3cc3028f949b799224f4546d4/earthkit_time-0.1.8-py3-none-any.whl", hash = "sha256:a09de208a3696f497e2d9495e535a9e2fc805f0148d4e2555abefd0da759216d", size = 28772 }, +] + +[[package]] +name = "earthkit-utils" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "array-api-compat" }, + { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/cb/0c9f59b0ca2a5ed941b65c52a4a005a7e16511f52fc3965eb45c53565b76/earthkit_utils-0.3.0-py3-none-any.whl", hash = "sha256:167e0385e062800d6c9f2d25a2a3075d7d91b67c3a02af52d772175b2313aa89", size = 35650 }, +] + +[[package]] +name = "earthkit-workflows" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "array-api-compat", marker = "python_full_version < '3.11'" }, + { name = "cloudpickle", marker = "python_full_version < '3.11'" }, + { name = "dill", marker = "python_full_version < '3.11'" }, + { name = "earthkit-data", marker = "python_full_version < '3.11'" }, + { name = "fire", marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "orjson", marker = "python_full_version < '3.11'" }, + { name = "pydantic", marker = "python_full_version < '3.11'" }, + { name = "pyrsistent", marker = "python_full_version < '3.11'" }, + { name = "pyvis", marker = "python_full_version < '3.11'" }, + { name = "pyzmq", marker = "python_full_version < '3.11'" }, + { name = "sortedcontainers", marker = "python_full_version < '3.11'" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/24/3f/4fae32362bbb8ff27ecfec64f10fad1ae86e546fb4fb42005e1435ef89fc/earthkit_workflows-0.6.2.tar.gz", hash = "sha256:5f05c670dc2f1b4895d799d0af0f7102f90c65b7026713aa4cba0d168c374353", size = 10682030 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/3d/a399bc384c6bdfadfd052820b4233ce949a3c4496c2cc5a811f165d2381c/earthkit_workflows-0.6.2-py3-none-any.whl", hash = "sha256:772c94b4ff62d9a42b6c4918c410ec082c6870d605f81e08015820121ded7235", size = 175629 }, +] + +[[package]] +name = "earthkit-workflows" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "array-api-compat", marker = "python_full_version >= '3.11'" }, + { name = "cloudpickle", marker = "python_full_version >= '3.11'" }, + { name = "dask", extra = ["distributed"], marker = "python_full_version >= '3.11'" }, + { name = "dill", marker = "python_full_version >= '3.11'" }, + { name = "earthkit-data", marker = "python_full_version >= '3.11'" }, + { name = "fire", marker = "python_full_version >= '3.11'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "orjson", marker = "python_full_version >= '3.11'" }, + { name = "pydantic", marker = "python_full_version >= '3.11'" }, + { name = "pyrsistent", marker = "python_full_version >= '3.11'" }, + { name = "pyvis", marker = "python_full_version >= '3.11'" }, + { name = "pyzmq", marker = "python_full_version >= '3.11'" }, + { name = "qubed", marker = "python_full_version >= '3.11'" }, + { name = "sortedcontainers", marker = "python_full_version >= '3.11'" }, + { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/24/7b/37021d7c54faa71415a15ab7592ba8e34efb8989150036e59dd6417e26bd/earthkit_workflows-0.14.0.tar.gz", hash = "sha256:98b30f32a52baaef2b1027f5edeaebad1c6686292586b7dded242c0d2989dcf6", size = 10849635 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/e4/dfcb6cc2b7601cb5a105fca08e22c7106cdbd8fc839f6308ad5306de72f2/earthkit_workflows-0.14.0-py3-none-any.whl", hash = "sha256:69fdd46e82506f84ba000d4a10a2aee623a4e6968f0c9b7f92417c71a06ce2e0", size = 203583 }, +] + +[[package]] +name = "eccodes" +version = "2.47.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "cffi" }, + { name = "findlibs" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/fe/63f915171413efeaaa9d1ba613aeabdc3f8cdba603f72842a7fcb1b011ee/eccodes-2.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:3a7438b259188821a5b05e5dd814f83924936ff9fe0897f6a157506fcaea9baf", size = 7435926 }, + { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928 }, + { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009 }, + { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001 }, + { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567 }, +] + +[[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 = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, +] + +[[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 = "filelock" +version = "3.29.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812 }, +] + +[[package]] +name = "findlibs" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/ef/345b0f88b8e9d9e12051142a9cdcf590bf70206d20d81c3f773ade8d9e32/findlibs-0.1.2.tar.gz", hash = "sha256:1f56d220c69686392ebdc4c65b32ee344818bca633643a8c97592957d1728122", size = 11302 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/ff/76dd547e129206899e4e26446c3ca7aeaff948c31b05250e9b8690e76883/findlibs-0.1.2-py3-none-any.whl", hash = "sha256:5348bbc7055d2a505962576c2e285b6c0aae6d749f82ba71296e7d41336e66e8", size = 10707 }, +] + +[[package]] +name = "fire" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "termcolor" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/00/f8d10588d2019d6d6452653def1ee807353b21983db48550318424b5ff18/fire-0.7.1.tar.gz", hash = "sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf", size = 88720 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/4c/93d0f85318da65923e4b91c1c2ff03d8a458cbefebe3bc612a6693c7906d/fire-0.7.1-py3-none-any.whl", hash = "sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882", size = 115945 }, +] + +[[package]] +name = "flexcache" +version = "0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263 }, +] + +[[package]] +name = "flexparser" +version = "0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625 }, +] + +[[package]] +name = "frozendict" +version = "2.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/bd/920b1c5ff1df427a5fc3fd4c2f13b0b0e720c3d57fafd80557094c1fefe0/frozendict-2.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bd37c087a538944652363cfd77fb7abe8100cc1f48afea0b88b38bf0f469c3d2", size = 59848 }, + { url = "https://files.pythonhosted.org/packages/a6/9c/e3e186925b1d84f816d458be4e2ea785bbeba15fd2e9e85c5ae7e7a90421/frozendict-2.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2b96f224a5431889f04b2bc99c0e9abe285679464273ead83d7d7f2a15907d35", size = 38164 }, + { url = "https://files.pythonhosted.org/packages/10/4c/af931d88c51ee2fcbf8c817557dcb975133a188f1b44bfa82caa940beeab/frozendict-2.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5c1781f28c4bbb177644b3cb6d5cf7da59be374b02d91cdde68d1d5ef32e046b", size = 38341 }, + { url = "https://files.pythonhosted.org/packages/ba/7a/c1fd4f736758cf93939cc3b7c8399fe1db0c121881431d41fcdbae344343/frozendict-2.4.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8a06f6c3d3b8d487226fdde93f621e04a54faecc5bf5d9b16497b8f9ead0ac3e", size = 112882 }, + { url = "https://files.pythonhosted.org/packages/bd/b0/304294f7cd099582a98d63e7a9cec34a9905d07f7628b42fc3f9c9a9bc94/frozendict-2.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b809d1c861436a75b2b015dbfd94f6154fa4e7cb0a70e389df1d5f6246b21d1e", size = 120482 }, + { url = "https://files.pythonhosted.org/packages/7e/61/689212ea4124fcbd097c0ac02c2c6a4e345ccc132d9104d054ff6b43ab64/frozendict-2.4.7-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75eefdf257a84ea73d553eb80d0abbff0af4c9df62529e4600fd3f96ff17eeb3", size = 113527 }, + { url = "https://files.pythonhosted.org/packages/5c/9b/38a762f4e76903efd4340454cac2820f583929457822111ef6a00ff1a3f4/frozendict-2.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a4d2b27d8156922c9739dd2ff4f3934716e17cfd1cf6fb61aa17af7d378555e9", size = 130068 }, + { url = "https://files.pythonhosted.org/packages/cf/41/9751e9ec1a2e810e8f961aea4f8958953157478daff6b868277ab7c5ef8c/frozendict-2.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ebd953c41408acfb8041ff9e6c3519c09988fb7e007df7ab6b56e229029d788", size = 126184 }, + { url = "https://files.pythonhosted.org/packages/71/be/b179b5f200cb0f52debeccc63b786cabcc408c4542f47c4245f978ad36e3/frozendict-2.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c64d34b802912ee6d107936e970b90750385a1fdfd38d310098b2918ba4cbf2", size = 120168 }, + { url = "https://files.pythonhosted.org/packages/25/c2/1536bc363dbce414e6b632f496aa8219c0db459a99eeafa02eba380e4cfa/frozendict-2.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:294a7d7d51dd979021a8691b46aedf9bd4a594ce3ed33a4bdf0a712d6929d712", size = 114997 }, + { url = "https://files.pythonhosted.org/packages/29/63/3e9efb490c00a0bf3c7bbf72fc73c90c4a6ebe30595e0fc44f59182b2ae7/frozendict-2.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f65d1b90e9ddc791ea82ef91a9ae0ab27ef6c0cfa88fadfa0e5ca5a22f8fa22f", size = 117292 }, + { url = "https://files.pythonhosted.org/packages/5e/66/d25b1e94f9b0e64025d5cadc77b9b857737ebffd8963ee91de7c5a06415a/frozendict-2.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:82d5272d08451bcef6fb6235a0a04cf1816b6b6815cec76be5ace1de17e0c1a4", size = 110656 }, + { url = "https://files.pythonhosted.org/packages/a3/5d/0e7e3294e18bf41d38dbc9ee82539be607c8d26e763ae12d9e41f03f2dae/frozendict-2.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5943c3f683d3f32036f6ca975e920e383d85add1857eee547742de9c1f283716", size = 113225 }, + { url = "https://files.pythonhosted.org/packages/e0/fb/b72c9b261ac7a7803528aa63bba776face8ad8d39cc4ca4825ddaa7777a9/frozendict-2.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:88c6bea948da03087035bb9ca9625305d70e084aa33f11e17048cb7dda4ca293", size = 126713 }, + { url = "https://files.pythonhosted.org/packages/c7/d9/e13af40bd9ef27b5c9ba10b0e31b03acac9468236b878dab030c75102a47/frozendict-2.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ffd1a9f9babec9119712e76a39397d8aa0d72ef8c4ccad917c6175d7e7f81b74", size = 114166 }, + { url = "https://files.pythonhosted.org/packages/40/2b/435583b11f5332cd3eb479d0a67a87bc9247c8b094169b07bd8f0777fc48/frozendict-2.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0ff6f57854cc8aa8b30947ec005f9246d96e795a78b21441614e85d39b708822", size = 121542 }, + { url = "https://files.pythonhosted.org/packages/38/25/097f3c0dc916d7c76f782cb65544e683ff3940a0ed997fc32efdb0989c45/frozendict-2.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d774df483c12d6cba896eb9a1337bbc5ad3f564eb18cfaaee3e95fb4402f2a86", size = 118610 }, + { url = "https://files.pythonhosted.org/packages/61/d1/6964158524484d7f3410386ff27cbc8f33ef06f8d9ee0e188348efb9a139/frozendict-2.4.7-cp310-cp310-win32.whl", hash = "sha256:a10d38fa300f6bef230fae1fdb4bc98706b78c8a3a2f3140fde748469ef3cfe8", size = 34547 }, + { url = "https://files.pythonhosted.org/packages/94/27/c22d614332c61ace4406542787edafaf7df533c6f02d1de8979d35492587/frozendict-2.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:dd518f300e5eb6a8827bee380f2e1a31c01dc0af069b13abdecd4e5769bd8a97", size = 37693 }, + { url = "https://files.pythonhosted.org/packages/bc/d8/9d6604357b1816586612e0e89bab6d8a9c029e95e199862dc99ce8ae2ed5/frozendict-2.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:3842cfc2d69df5b9978f2e881b7678a282dbdd6846b11b5159f910bc633cbe4f", size = 35563 }, + { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264 }, +] + +[[package]] +name = "fsspec" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402 }, +] + +[[package]] +name = "humanize" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/66/a3921783d54be8a6870ac4ccffcd15c4dc0dd7fcce51c6d63b8c63935276/humanize-4.15.0.tar.gz", hash = "sha256:1dd098483eb1c7ee8e32eb2e99ad1910baefa4b75c3aff3a82f4d78688993b10", size = 83599 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203 }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455 }, +] + +[[package]] +name = "importlib-metadata" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp", marker = "python_full_version < '3.14'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789 }, +] + +[[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 = "ipython" +version = "8.39.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version < '3.11'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "jedi", marker = "python_full_version < '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, + { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "stack-data", marker = "python_full_version < '3.11'" }, + { name = "traitlets", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849 }, +] + +[[package]] +name = "ipython" +version = "9.14.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version >= '3.11'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, + { name = "jedi", marker = "python_full_version >= '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, + { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, + { name = "psutil", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten'" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "stack-data", marker = "python_full_version >= '3.11'" }, + { name = "traitlets", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/21/c2/c0064cf15d026501a1ef70e42efd9c3f818663089399aacc5e37a82901c1/ipython-9.14.0.tar.gz", hash = "sha256:6f27ff0f1d9ea050e0551f71568bc4b34d8aba579e8f111c5b4175f44ac6b4aa", size = 4432601 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/a3/9e59340f02c1dc8f8c0a05b09244712b8609eb5439f9996e887e2b82f452/ipython-9.14.0-py3-none-any.whl", hash = "sha256:8fd984a3372c14b12790b084ba6b5cff5678c0cb063244a0034f06a51f20d6c2", size = 627457 }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments", marker = "python_full_version >= '3.11'" }, +] +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 = "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 = "jsonpickle" +version = "4.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/c0/dde9b4b42cc415b9579573f967f12efbb034e427a2a37e93ad5139891d87/jsonpickle-4.1.2.tar.gz", hash = "sha256:8afed18aa189fd81e2e833b426bb4af485594921f0b1d36c2001fc5637a2f210", size = 319120 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/7b/fd3c7a09649aea9da1d3587aea624d8f9b29963dfd84a1bdb2aa93b36dac/jsonpickle-4.1.2-py3-none-any.whl", hash = "sha256:7ffe34426bc797684dbf1dc84185558bd864cd25b1ff5fb01b7405e392d0a937", size = 47203 }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +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]] +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 = "locket" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398 }, +] + +[[package]] +name = "lru-dict" +version = "1.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/6c/396716746ca46fd2ac52a7a6cbd7b4cf848e5d430f431dacd209290dfa71/lru_dict-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3766e397aa6de1ca3442729bc1fa75834ab7b0a6b017e6e197d3a66b61abde59", size = 16757 }, + { url = "https://files.pythonhosted.org/packages/2d/93/c163ffb71beb18f18459461658fd16c8b8c86aed858f2dc7c7e636318f61/lru_dict-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658e152d3a4ad0e1d75e6f53b1fa353779539920b38be99f4ea33d3bad41efdb", size = 11243 }, + { url = "https://files.pythonhosted.org/packages/44/e3/fa96d54032531c67eeacf0ab6f56e10e05f25d382a29f6a381ac8ecf3814/lru_dict-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:98af7044b5c3d85a649e1afb8891829ff5210caf9143acc741b3e98ab1b66ff6", size = 11726 }, + { url = "https://files.pythonhosted.org/packages/7a/23/bae4f32fb014fd2dc5512e9267a3b1ec34c3b55d16a2202a1193d9ae635d/lru_dict-1.4.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:906d99705b79a00b5668bdb8782ad823ccc8d26e1fc6b56327ae469a8d12e9b4", size = 29823 }, + { url = "https://files.pythonhosted.org/packages/9f/3b/8c3d1e6a188ce65e0161b86dbd18f2290950baf1e9e28e4948fc123d9a67/lru_dict-1.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:885643fd968336d8652fddb0778184e2eeff7b7aebced6de268af6d6caef42d5", size = 30812 }, + { url = "https://files.pythonhosted.org/packages/ed/11/7f061507eda944150ed959e99a3700ce6358c1241c7f697b2f1ade48646b/lru_dict-1.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:24c779334bed82f1a7eb2d1ebcba2b7aa9a1555d40a3b53e05eb6b9dfcb0609c", size = 32480 }, + { url = "https://files.pythonhosted.org/packages/75/e7/94ac30d33c6f8a8eca5d7e81c0ce26fb7b79b18ea65accdcb2a652b19abc/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6099e2ecb118dfeae4a197bfcc702ea5841bfd86f19d1b340e932d0f5c47c10", size = 30199 }, + { url = "https://files.pythonhosted.org/packages/4a/81/c93ee7365db67dfb497e6218aa0395b9ec878c07c732d348bfbd651bcc95/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e0db4f3105108598749550e639b283b07df0bb91cac3b47e86ffebcab721cc7", size = 31489 }, + { url = "https://files.pythonhosted.org/packages/9f/0b/634e8b4eca2497647f802bbe1ae3f0e1e9a0de1d555cf77c022527b2682f/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e21f67ba374d1945051b547e719d44a8c7880718f67a15a03e7a12e1d12ea96b", size = 29522 }, + { url = "https://files.pythonhosted.org/packages/de/cc/591b959d77cc0e0ac016f11baf26d03d566bb88a53fa9b41e157bc68bc4b/lru_dict-1.4.1-cp310-cp310-win32.whl", hash = "sha256:f309b4018dd41f33bf3bd4cc0f62421da8bcca513ea044dbb22f3cd029935012", size = 13066 }, + { url = "https://files.pythonhosted.org/packages/d9/bc/c14b67fdbdb5a2a81cfb907ea8a8b0c9da5aed899f34921ebf097e22a966/lru_dict-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:e84cd1065955897de01f1fb4cbd6f87cab7706e920283bb98c27341d76dd9a8d", size = 14008 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760 }, + { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249 }, + { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728 }, + { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795 }, + { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807 }, + { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437 }, + { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168 }, + { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454 }, + { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574 }, + { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031 }, + { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007 }, + { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683 }, + { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216 }, + { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687 }, + { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960 }, + { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882 }, + { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268 }, + { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156 }, + { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395 }, + { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591 }, + { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119 }, + { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109 }, + { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248 }, + { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243 }, + { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938 }, + { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261 }, + { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801 }, + { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688 }, + { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214 }, + { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689 }, + { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034 }, + { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919 }, + { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334 }, + { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211 }, + { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461 }, + { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651 }, + { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120 }, + { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112 }, + { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119 }, + { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435 }, + { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988 }, + { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733 }, + { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222 }, + { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733 }, + { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251 }, + { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405 }, + { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135 }, + { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620 }, + { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077 }, + { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905 }, + { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435 }, + { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423 }, + { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184 }, + { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459 }, + { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938 }, + { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389 }, + { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706 }, + { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892 }, + { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254 }, + { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422 }, + { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909 }, + { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816 }, + { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204 }, + { url = "https://files.pythonhosted.org/packages/ec/de/18ac3957e1aa6674a0a828748c819265f79b524ff30cbb0ac7f08ab786c8/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cc9dd191870555624bbf3903c8afa3f01815ca3256ed8b35cb323f0db3ce4f98", size = 10467 }, + { url = "https://files.pythonhosted.org/packages/0c/53/2a0bedaa64950cc56ade72e2f5a292318473585d9a3adc797d13b38082e7/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:afdf92b332632aa6e4b8646e93723f50f41fece2a80a54d2b44e8ac67f913ceb", size = 10871 }, + { url = "https://files.pythonhosted.org/packages/4e/e2/d5ea49d62ea142559fd9cafd8505d4a4f87a1d81953a9c99fa61e7ccbd6b/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6770adafae25663b682420891a10a5894595f02b1e4d87766f7adc8e56e72a", size = 12969 }, + { url = "https://files.pythonhosted.org/packages/a2/67/0672caac9a04dc9011f7a27fc2ec2003f0bfa008070b29940d05b4dae56a/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:018cd3b41224ca81eb83cdf6db024409a920e5c1d3ce4e8b323cb66e24a73132", size = 13959 }, + { url = "https://files.pythonhosted.org/packages/e3/7e/313385214a5011cf9fe8376928f66f70bfedc48d8f7ab424292224ed4907/lru_dict-1.4.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:781dbcf0c83160e525482a4ebcd7c5065851a6c7295f1cda78248a2029f23f39", size = 14084 }, + { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384 }, + { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822 }, + { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968 }, + { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904 }, + { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062 }, +] + +[[package]] +name = "markdown" +version = "3.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180 }, +] + +[[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/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631 }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057 }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050 }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681 }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705 }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524 }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282 }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745 }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571 }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056 }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932 }, + { 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/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615 }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020 }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332 }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947 }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962 }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760 }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529 }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015 }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622 }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374 }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980 }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990 }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784 }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588 }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041 }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658 }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066 }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639 }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569 }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284 }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801 }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769 }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642 }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619 }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408 }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005 }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048 }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821 }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606 }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043 }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661 }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069 }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670 }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598 }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261 }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835 }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733 }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672 }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534 }, +] + +[[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/f5/a2/3b68a9e769db68668b25c6108444a35f9bd163bb848c0650d516761a59c0/msgpack-1.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0051fffef5a37ca2cd16978ae4f0aef92f164df86823871b5162812bebecd8e2", size = 81318 }, + { url = "https://files.pythonhosted.org/packages/5b/e1/2b720cc341325c00be44e1ed59e7cfeae2678329fbf5aa68f5bda57fe728/msgpack-1.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a605409040f2da88676e9c9e5853b3449ba8011973616189ea5ee55ddbc5bc87", size = 83786 }, + { url = "https://files.pythonhosted.org/packages/71/e5/c2241de64bfceac456b140737812a2ab310b10538a7b34a1d393b748e095/msgpack-1.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b696e83c9f1532b4af884045ba7f3aa741a63b2bc22617293a2c6a7c645f251", size = 398240 }, + { url = "https://files.pythonhosted.org/packages/b7/09/2a06956383c0fdebaef5aa9246e2356776f12ea6f2a44bd1368abf0e46c4/msgpack-1.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:365c0bbe981a27d8932da71af63ef86acc59ed5c01ad929e09a0b88c6294e28a", size = 406070 }, + { url = "https://files.pythonhosted.org/packages/0e/74/2957703f0e1ef20637d6aead4fbb314330c26f39aa046b348c7edcf6ca6b/msgpack-1.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:41d1a5d875680166d3ac5c38573896453bbbea7092936d2e107214daf43b1d4f", size = 393403 }, + { url = "https://files.pythonhosted.org/packages/a5/09/3bfc12aa90f77b37322fc33e7a8a7c29ba7c8edeadfa27664451801b9860/msgpack-1.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354e81bcdebaab427c3df4281187edc765d5d76bfb3a7c125af9da7a27e8458f", size = 398947 }, + { url = "https://files.pythonhosted.org/packages/4b/4f/05fcebd3b4977cb3d840f7ef6b77c51f8582086de5e642f3fefee35c86fc/msgpack-1.1.2-cp310-cp310-win32.whl", hash = "sha256:e64c8d2f5e5d5fda7b842f55dec6133260ea8f53c4257d64494c534f306bf7a9", size = 64769 }, + { url = "https://files.pythonhosted.org/packages/d0/3e/b4547e3a34210956382eed1c85935fff7e0f9b98be3106b3745d7dec9c5e/msgpack-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:db6192777d943bdaaafb6ba66d44bf65aa0e9c5616fa1d2da9bb08828c6b39aa", size = 71293 }, + { 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/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa", size = 81939 }, + { url = "https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:446abdd8b94b55c800ac34b102dffd2f6aa0ce643c55dfc017ad89347db3dbdb", size = 85064 }, + { url = "https://files.pythonhosted.org/packages/f2/60/a064b0345fc36c4c3d2c743c82d9100c40388d77f0b48b2f04d6041dbec1/msgpack-1.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c63eea553c69ab05b6747901b97d620bb2a690633c77f23feb0c6a947a8a7b8f", size = 417131 }, + { url = "https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42", size = 427556 }, + { url = "https://files.pythonhosted.org/packages/f5/87/ffe21d1bf7d9991354ad93949286f643b2bb6ddbeab66373922b44c3b8cc/msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9", size = 404920 }, + { url = "https://files.pythonhosted.org/packages/ff/41/8543ed2b8604f7c0d89ce066f42007faac1eaa7d79a81555f206a5cdb889/msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620", size = 415013 }, + { url = "https://files.pythonhosted.org/packages/41/0d/2ddfaa8b7e1cee6c490d46cb0a39742b19e2481600a7a0e96537e9c22f43/msgpack-1.1.2-cp312-cp312-win32.whl", hash = "sha256:1fff3d825d7859ac888b0fbda39a42d59193543920eda9d9bea44d958a878029", size = 65096 }, + { url = "https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1de460f0403172cff81169a30b9a92b260cb809c4cb7e2fc79ae8d0510c78b6b", size = 72708 }, + { url = "https://files.pythonhosted.org/packages/c5/31/5b1a1f70eb0e87d1678e9624908f86317787b536060641d6798e3cf70ace/msgpack-1.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:be5980f3ee0e6bd44f3a9e9dea01054f175b50c3e6cdb692bc9424c0bbb8bf69", size = 64119 }, + { url = "https://files.pythonhosted.org/packages/6b/31/b46518ecc604d7edf3a4f94cb3bf021fc62aa301f0cb849936968164ef23/msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4efd7b5979ccb539c221a4c4e16aac1a533efc97f3b759bb5a5ac9f6d10383bf", size = 81212 }, + { url = "https://files.pythonhosted.org/packages/92/dc/c385f38f2c2433333345a82926c6bfa5ecfff3ef787201614317b58dd8be/msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42eefe2c3e2af97ed470eec850facbe1b5ad1d6eacdbadc42ec98e7dcf68b4b7", size = 84315 }, + { url = "https://files.pythonhosted.org/packages/d3/68/93180dce57f684a61a88a45ed13047558ded2be46f03acb8dec6d7c513af/msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999", size = 412721 }, + { url = "https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e", size = 424657 }, + { url = "https://files.pythonhosted.org/packages/38/f8/4398c46863b093252fe67368b44edc6c13b17f4e6b0e4929dbf0bdb13f23/msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162", size = 402668 }, + { url = "https://files.pythonhosted.org/packages/28/ce/698c1eff75626e4124b4d78e21cca0b4cc90043afb80a507626ea354ab52/msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794", size = 419040 }, + { url = "https://files.pythonhosted.org/packages/67/32/f3cd1667028424fa7001d82e10ee35386eea1408b93d399b09fb0aa7875f/msgpack-1.1.2-cp313-cp313-win32.whl", hash = "sha256:a7787d353595c7c7e145e2331abf8b7ff1e6673a6b974ded96e6d4ec09f00c8c", size = 65037 }, + { url = "https://files.pythonhosted.org/packages/74/07/1ed8277f8653c40ebc65985180b007879f6a836c525b3885dcc6448ae6cb/msgpack-1.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:a465f0dceb8e13a487e54c07d04ae3ba131c7c5b95e2612596eafde1dccf64a9", size = 72631 }, + { url = "https://files.pythonhosted.org/packages/e5/db/0314e4e2db56ebcf450f277904ffd84a7988b9e5da8d0d61ab2d057df2b6/msgpack-1.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:e69b39f8c0aa5ec24b57737ebee40be647035158f14ed4b40e6f150077e21a84", size = 64118 }, + { url = "https://files.pythonhosted.org/packages/22/71/201105712d0a2ff07b7873ed3c220292fb2ea5120603c00c4b634bcdafb3/msgpack-1.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e23ce8d5f7aa6ea6d2a2b326b4ba46c985dbb204523759984430db7114f8aa00", size = 81127 }, + { url = "https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939", size = 84981 }, + { url = "https://files.pythonhosted.org/packages/8e/a9/3536e385167b88c2cc8f4424c49e28d49a6fc35206d4a8060f136e71f94c/msgpack-1.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e2cb7b9031568a2a5c73aa077180f93dd2e95b4f8d3b8e14a73ae94a9e667e", size = 411885 }, + { url = "https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931", size = 419658 }, + { url = "https://files.pythonhosted.org/packages/3b/ef/2b92e286366500a09a67e03496ee8b8ba00562797a52f3c117aa2b29514b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:04fb995247a6e83830b62f0b07bf36540c213f6eac8e851166d8d86d83cbd014", size = 403290 }, + { url = "https://files.pythonhosted.org/packages/78/90/e0ea7990abea5764e4655b8177aa7c63cdfa89945b6e7641055800f6c16b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e22ab046fa7ede9e36eeb4cfad44d46450f37bb05d5ec482b02868f451c95e2", size = 415234 }, + { url = "https://files.pythonhosted.org/packages/72/4e/9390aed5db983a2310818cd7d3ec0aecad45e1f7007e0cda79c79507bb0d/msgpack-1.1.2-cp314-cp314-win32.whl", hash = "sha256:80a0ff7d4abf5fecb995fcf235d4064b9a9a8a40a3ab80999e6ac1e30b702717", size = 66391 }, + { url = "https://files.pythonhosted.org/packages/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b", size = 73787 }, + { url = "https://files.pythonhosted.org/packages/6a/b0/9d9f667ab48b16ad4115c1935d94023b82b3198064cb84a123e97f7466c1/msgpack-1.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:59415c6076b1e30e563eb732e23b994a61c159cec44deaf584e5cc1dd662f2af", size = 66453 }, + { url = "https://files.pythonhosted.org/packages/16/67/93f80545eb1792b61a217fa7f06d5e5cb9e0055bed867f43e2b8e012e137/msgpack-1.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:897c478140877e5307760b0ea66e0932738879e7aa68144d9b78ea4c8302a84a", size = 85264 }, + { url = "https://files.pythonhosted.org/packages/87/1c/33c8a24959cf193966ef11a6f6a2995a65eb066bd681fd085afd519a57ce/msgpack-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a668204fa43e6d02f89dbe79a30b0d67238d9ec4c5bd8a940fc3a004a47b721b", size = 89076 }, + { url = "https://files.pythonhosted.org/packages/fc/6b/62e85ff7193663fbea5c0254ef32f0c77134b4059f8da89b958beb7696f3/msgpack-1.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5559d03930d3aa0f3aacb4c42c776af1a2ace2611871c84a75afe436695e6245", size = 435242 }, + { url = "https://files.pythonhosted.org/packages/c1/47/5c74ecb4cc277cf09f64e913947871682ffa82b3b93c8dad68083112f412/msgpack-1.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70c5a7a9fea7f036b716191c29047374c10721c389c21e9ffafad04df8c52c90", size = 432509 }, + { url = "https://files.pythonhosted.org/packages/24/a4/e98ccdb56dc4e98c929a3f150de1799831c0a800583cde9fa022fa90602d/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2cb069d8b981abc72b41aea1c580ce92d57c673ec61af4c500153a626cb9e20", size = 415957 }, + { url = "https://files.pythonhosted.org/packages/da/28/6951f7fb67bc0a4e184a6b38ab71a92d9ba58080b27a77d3e2fb0be5998f/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d62ce1f483f355f61adb5433ebfd8868c5f078d1a52d042b0a998682b4fa8c27", size = 422910 }, + { url = "https://files.pythonhosted.org/packages/f0/03/42106dcded51f0a0b5284d3ce30a671e7bd3f7318d122b2ead66ad289fed/msgpack-1.1.2-cp314-cp314t-win32.whl", hash = "sha256:1d1418482b1ee984625d88aa9585db570180c286d942da463533b238b98b812b", size = 75197 }, + { url = "https://files.pythonhosted.org/packages/15/86/d0071e94987f8db59d4eeb386ddc64d0bb9b10820a8d82bcd3e53eeb2da6/msgpack-1.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5a46bf7e831d09470ad92dff02b8b1ac92175ca36b087f904a0519857c6be3ff", size = 85772 }, + { url = "https://files.pythonhosted.org/packages/81/f2/08ace4142eb281c12701fc3b93a10795e4d4dc7f753911d836675050f886/msgpack-1.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d99ef64f349d5ec3293688e91486c5fdb925ed03807f64d98d205d2713c60b46", size = 70868 }, +] + +[[package]] +name = "multiurl" +version = "0.3.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "requests" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/ce/a00c9b44f43c4620ca004e4acb4c1e266b1ab48d2f6ad9e402f6bdbe44d4/multiurl-0.3.7.tar.gz", hash = "sha256:4201563fc8989baca7b525fdc69d4cd5a6c0cef4f303559710b9890021aab6d9", size = 18945 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl", hash = "sha256:054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380", size = 21524 }, +] + +[[package]] +name = "netcdf4" +version = "1.7.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", +] +dependencies = [ + { name = "certifi", marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, + { name = "cftime", marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/76/7bc801796dee752c1ce9cd6935564a6ee79d5c9d9ef9192f57b156495a35/netcdf4-1.7.3.tar.gz", hash = "sha256:83f122fc3415e92b1d4904fd6a0898468b5404c09432c34beb6b16c533884673", size = 836095 } + +[[package]] +name = "netcdf4" +version = "1.7.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "certifi", marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, + { name = "cftime", marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/07/dfdd017641e82fadaf4e043d91fa179d34940c7d69175a3034dea877df9c/netcdf4-1.7.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b1c1a7ea3678db76bf33d14f7e202385d634db38c5e70d8cf4895971023eebb9", size = 23499427 }, + { url = "https://files.pythonhosted.org/packages/a7/6c/8cd98d166f30d378488c5235457d6af7df09f9925ab5ad03d6840543f42e/netcdf4-1.7.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d3f9497873454207f9480847d02b1b19a4bc81ad6e9166e1c17d4e2f8f3555d1", size = 22886591 }, + { url = "https://files.pythonhosted.org/packages/08/1c/ab31713a95160ebc6b4ec495cd4f03f38b235188a7e955bf33703c5039ca/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8e18294af803e80f8c0339f791901942e268c334c099bbd5f7ea8325a49801a", size = 10336881 }, + { url = "https://files.pythonhosted.org/packages/26/d7/bb16993af267acda23fe3de4ead2528cbe49043e391f732a1a4a15beec20/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b06c0b93fd0ecc1ec67a582f3ba98b7db9da1fa843c8f83fd75990e3701771e", size = 10182772 }, + { url = "https://files.pythonhosted.org/packages/9b/a6/e6fca338488a896c5e1f661ba3007e83f46700e1a59552b05013d501bc45/netcdf4-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:889ba77f084504aebaba9c6f9a88ac213431fef0e897f887cd35aef351ff7740", size = 21363337 }, + { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499 }, + { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667 }, + { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769 }, + { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122 }, + { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637 }, + { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377 }, + { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821 }, + { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133 }, + { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635 }, + { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725 }, + { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258 }, + { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171 }, + { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579 }, + { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032 }, + { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653 }, + { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682 }, +] + +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504 }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194 }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111 }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159 }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936 }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692 }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164 }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877 }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487 }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945 }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406 }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528 }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119 }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246 }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410 }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240 }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012 }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538 }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706 }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541 }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825 }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687 }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482 }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648 }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902 }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992 }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944 }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392 }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220 }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800 }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600 }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134 }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598 }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272 }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197 }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287 }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763 }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070 }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752 }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024 }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398 }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971 }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532 }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881 }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458 }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559 }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716 }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947 }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197 }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245 }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587 }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226 }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196 }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334 }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678 }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672 }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731 }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805 }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496 }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616 }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145 }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813 }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982 }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908 }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867 }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511 }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064 }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157 }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728 }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374 }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286 }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263 }, +] + +[[package]] +name = "objsize" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/42/2de8994fbea1112d076d71aefaebad888ff01e5b52616895d510b73c3b96/objsize-0.8.0.tar.gz", hash = "sha256:df17998cf6ef4b24d52abee5020484491230e3f4af71a8ff0098c7455ad4d91c", size = 16593 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/53/157f8f4df3f43fdfdc627a56fa46135e4dcf806eb5bc6088811d968f8a21/objsize-0.8.0-py3-none-any.whl", hash = "sha256:afea5e61ba1e3e40c23b546028cdc1df88c5b097d2b0d6c6b8a4bf44fa7a3e1b", size = 11599 }, +] + +[[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 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/5d/b95ca542a001135cc250a49370f282f578c8f4e46cc8617d73775297eea8/orjson-3.11.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:135869ef917b8704ea0a94e01620e0c05021c15c52036e4663baffe75e72f8ce", size = 228986 }, + { url = "https://files.pythonhosted.org/packages/80/01/be33fbff646e22f93398429ea645f20d2097aea1a6cdc1e6628e70125f83/orjson-3.11.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115ab5f5f4a0f203cc2a5f0fb09aee503a3f771aa08392949ab5ca230c4fbdbd", size = 132558 }, + { url = "https://files.pythonhosted.org/packages/4e/61/73d49333bba660a075daccca10970dc6409ce1cf42ae4046646a19468aad/orjson-3.11.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4da3c38a2083ca4aaf9c2a36776cce3e9328e6647b10d118948f3cfb4913ffe4", size = 128213 }, + { url = "https://files.pythonhosted.org/packages/1f/7d/30e844b3dac3f74aed66b1f984daf9db3c98c0328c03d965a9e8dc06449e/orjson-3.11.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53b50b0e14084b8f7e29c5ce84c5af0f1160169b30d8a6914231d97d2fe297d4", size = 135430 }, + { url = "https://files.pythonhosted.org/packages/16/64/bd815f5c610b3facc204f26ba94e87a9eb49b0d83de3d5fc1eee2402d91b/orjson-3.11.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:231742b4a11dad8d5380a435962c57e91b7c37b79be858f4ef1c0df1a259897e", size = 146178 }, + { url = "https://files.pythonhosted.org/packages/c7/35/e744fd36c79b339d27beb06068b5a08a8882ef5418804d0ce545a31f718d/orjson-3.11.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34fd2317602587321faab75ab76c623a0117e80841a6413654f04e47f339a8fb", size = 133068 }, + { url = "https://files.pythonhosted.org/packages/2a/56/d54152b67b63a0b3e556cfc549d6ce84f74d7f425ddeadc6c8a74d913da7/orjson-3.11.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71f3db16e69b667b132e0f305a833d5497da302d801508cbb051ed9a9819da47", size = 134217 }, + { url = "https://files.pythonhosted.org/packages/0b/ee/66154baf69f71c7164a268a5e888908aec5a0819d13c81d5e2755a257758/orjson-3.11.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0b34789fa0da61cf7bef0546b09c738fb195331e017e477096d129e9105ab03d", size = 141917 }, + { url = "https://files.pythonhosted.org/packages/09/d3/c5824260ca8b9d7ba82648d042a3f8f4815d18c15bb98a1f30edd1bb2d83/orjson-3.11.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:87e4d4ab280b0c87424d47695bec2182caf8cfc17879ea78dab76680194abc13", size = 415356 }, + { url = "https://files.pythonhosted.org/packages/64/cb/509c2e816fe4df641d93dc92f6a89adc8df3ada8ebdee2bd44aba3264c3c/orjson-3.11.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ace6c58523302d3b97b6ac5c38a5298a54b473762b6be82726b4265c41029f92", size = 148112 }, + { url = "https://files.pythonhosted.org/packages/db/b5/3ceae56d2e4962979eedb023ba6a46a4bb65f333960379be0ca470686220/orjson-3.11.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:97d0d932803c1b164fde11cb542a9efcb1e0f63b184537cca65887147906ff48", size = 137112 }, + { url = "https://files.pythonhosted.org/packages/d7/7a/81fa3f2c7bef79b04cf2ab7838e5ac74b1f12511ceab979759b0275d6bb4/orjson-3.11.9-cp310-cp310-win32.whl", hash = "sha256:b3afcf569c15577a9fe64627292daa3e6b3a70f4fb77a5df246a87ec21681b94", size = 131706 }, + { url = "https://files.pythonhosted.org/packages/ae/d8/b64600f9083c7f151ad39717a5877fccbeb0ef6d7efcb55f971ce00b6bee/orjson-3.11.9-cp310-cp310-win_amd64.whl", hash = "sha256:8697ab6a080a5c46edaad50e2bc5bd8c7ca5c66442d24104fa44ec74910a8244", size = 127282 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/0d/bd/70b6ab193594d7abb875320c0a7c8335e846f28968c432c31042409c3c8d/orjson-3.11.9-cp311-cp311-win32.whl", hash = "sha256:14ed654580c1ed2bc217352ec82f91b047aef82951aa71c7f64e0dcb03c0e180", size = 131533 }, + { url = "https://files.pythonhosted.org/packages/3f/17/1a1a228183d62d1b77e2c30d210f47dd4768b310ebe1607c63e3c0e3a71e/orjson-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:57ea77fb70a448ce87d18fca050193202a3da5e54598f6501ca5476fb66cfe02", size = 127106 }, + { url = "https://files.pythonhosted.org/packages/b8/95/285de5fa296d09681ee9c546cd4a8aeb773b701cf343dc125994f4d52953/orjson-3.11.9-cp311-cp311-win_arm64.whl", hash = "sha256:19b72ed11572a2ee51a67a903afbe5af504f84ed6f529c0fe44b0ab3fb5cc697", size = 126848 }, + { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515 }, + { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409 }, + { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106 }, + { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864 }, + { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213 }, + { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994 }, + { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744 }, + { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014 }, + { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509 }, + { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127 }, + { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025 }, + { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943 }, + { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606 }, + { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101 }, + { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736 }, + { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458 }, + { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368 }, + { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070 }, + { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892 }, + { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217 }, + { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980 }, + { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738 }, + { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033 }, + { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492 }, + { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087 }, + { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031 }, + { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915 }, + { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613 }, + { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086 }, + { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696 }, + { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465 }, + { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364 }, + { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063 }, + { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356 }, + { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592 }, + { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491 }, + { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309 }, + { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030 }, + { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482 }, + { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178 }, + { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089 }, + { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921 }, + { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638 }, + { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078 }, + { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687 }, +] + +[[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.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "python-dateutil", marker = "python_full_version < '3.11'" }, + { name = "pytz", marker = "python_full_version < '3.11'" }, + { name = "tzdata", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763 }, + { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217 }, + { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791 }, + { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373 }, + { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444 }, + { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459 }, + { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086 }, + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790 }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831 }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267 }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281 }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453 }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361 }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702 }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846 }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618 }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212 }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693 }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002 }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971 }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722 }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671 }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807 }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872 }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371 }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333 }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120 }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991 }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227 }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056 }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189 }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912 }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160 }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233 }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635 }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079 }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049 }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638 }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834 }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925 }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071 }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504 }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702 }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535 }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582 }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963 }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175 }, +] + +[[package]] +name = "pandas" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11'" }, + { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495 }, + { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250 }, + { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558 }, + { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611 }, + { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670 }, + { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708 }, + { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609 }, + { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596 }, + { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846 }, + { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550 }, + { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965 }, + { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600 }, + { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824 }, + { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889 }, + { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463 }, + { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158 }, + { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071 }, + { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690 }, + { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634 }, + { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243 }, + { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659 }, + { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880 }, + { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091 }, + { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282 }, + { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016 }, + { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210 }, + { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126 }, + { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051 }, + { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796 }, + { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741 }, + { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958 }, + { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065 }, + { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101 }, + { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553 }, + { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065 }, + { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188 }, + { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966 }, + { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755 }, + { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658 }, + { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242 }, + { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369 }, + { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306 }, + { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394 }, + { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717 }, + { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897 }, + { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855 }, + { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464 }, +] + +[[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 = "partd" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "locket" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905 }, +] + +[[package]] +name = "pdbufr" +version = "0.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "eccodes" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "(python_full_version < '3.11' and platform_machine != 'ARM64' and sys_platform == 'win32') or (python_full_version < '3.11' and sys_platform == 'emscripten') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +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 = "pint" +version = "0.24.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "flexcache", marker = "python_full_version < '3.11'" }, + { name = "flexparser", marker = "python_full_version < '3.11'" }, + { name = "platformdirs", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029 }, +] + +[[package]] +name = "pint" +version = "0.25.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "flexcache", marker = "python_full_version >= '3.11'" }, + { name = "flexparser", marker = "python_full_version >= '3.11'" }, + { name = "platformdirs", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488 }, +] + +[[package]] +name = "platformdirs" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743 }, +] + +[[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 = "pproc-core" +source = { editable = "." } +dependencies = [ + { name = "code-meters" }, + { name = "earthkit-time" }, + { name = "earthkit-workflows", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "earthkit-workflows", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pydantic" }, +] + +[package.dev-dependencies] +dev = [ + { name = "prek" }, + { name = "pytest" }, + { name = "ty" }, +] + +[package.metadata] +requires-dist = [ + { name = "code-meters" }, + { name = "earthkit-time" }, + { name = "earthkit-workflows" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "pydantic" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "prek", specifier = ">=0.4.4" }, + { name = "pytest", specifier = ">=9.0.3" }, + { name = "ty", specifier = ">=0.0.43" }, +] + +[[package]] +name = "prek" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/13/3d71b3adbf385f7dc7fb6e16d6e25421fd8398b45d8f8410a328bf22bd3f/prek-0.4.4.tar.gz", hash = "sha256:4ec5771153d158a0e4473933b7fd9b51e1b1f57f2df50aeb7560ea6812226dc5", size = 470641 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/9f/68a577888edf7f2647a652b02899508ccd84e57ce1f79c51a44edfd308d7/prek-0.4.4-py3-none-linux_armv6l.whl", hash = "sha256:23cfd96a25de1c93e3c43c746643b80489e3b2fa49ca9c0ffd6022e51535c900", size = 5550271 }, + { url = "https://files.pythonhosted.org/packages/35/b8/5427a0023116343a8d787b446536a7fddfa5db7eec7713dd05618da2bdfe/prek-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a427b792c4436f49732b1f6ebccf221fdcc6390c148474280da9c2c6eaabc9c4", size = 5910136 }, + { url = "https://files.pythonhosted.org/packages/9d/4f/d751e90b7e768e472e054cd41cbe502589436ca9c1a13bfe4fa9513f9cde/prek-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b998038fc92c990e03147eb5b95b0f2c394517f8857ab911aac8e092f1b9b3ab", size = 5470124 }, + { url = "https://files.pythonhosted.org/packages/c6/fe/e73241c5777b6f9b6b95132febbd27f9be9e89912e9e93c0982680593af2/prek-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:9cebca8c15da4f1d6e3a25e6ae0611425c8596e926222050f2588c390e42df8a", size = 5732725 }, + { url = "https://files.pythonhosted.org/packages/ca/a3/329bd910e7e5d9d0eb5e571f3ba48023213744e78411afb81f5ef8356cab/prek-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8742ac26363e74c855df6215a709d5db183204d00ac0f1a722b13aed4da3cd0", size = 5457953 }, + { url = "https://files.pythonhosted.org/packages/3d/f8/d642990513d9707398506bad45d39173d84266231f7d919899f694aefe2c/prek-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2b7c8710546a1e894afa7ab022030cd4e21f1ee7ffb301b4360773d22f1f00f", size = 5860556 }, + { url = "https://files.pythonhosted.org/packages/8d/17/a2e29cb278503a8c18612d8a62a15020648dc768e2e94bc4b4d4c9411e07/prek-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e02bd4d5e05c500e4d9f70f024e30d13aa361dc490724b7f476d2e35542c239f", size = 6652492 }, + { url = "https://files.pythonhosted.org/packages/ab/10/ad3270b18135ee5d1af6f6cf4b0c8601b1cc2cb38d16e835081da820833a/prek-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a25041733de987a47e5a7bace47182a6f0e2ae5f960cb54c1d4630afd2591", size = 6113837 }, + { url = "https://files.pythonhosted.org/packages/59/d9/e8c201b9b41c4561673cea01c630ab604df89d13e952f87dbcb807d32588/prek-0.4.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:0b04a0f36d07474f2a9fc5b1ba1197a1b326b2b211f39cd74cf0d4613545f7f4", size = 5729155 }, + { url = "https://files.pythonhosted.org/packages/e8/cd/227b0494fcbc91e8fe15c2a4db9e6dfff95314ef38db3e40e6ea96db249d/prek-0.4.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f032ccbe2d6edc345f81a6d772c18cc169d63c27b5a8292bfe416b352bdfee57", size = 5590775 }, + { url = "https://files.pythonhosted.org/packages/cc/e0/9d750b9cf21ece884afdc15668d0f005a36588fe1b0bb5ff4a8112ab51cb/prek-0.4.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:bad3586fcea3e913f0edf2e8f132f97889e03976b7ee3d120fd294ad4e89a5eb", size = 5437864 }, + { url = "https://files.pythonhosted.org/packages/3a/48/e2e5c0299590ad18a253c0ac09508b615baa1b382010c511186572f711d3/prek-0.4.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4058638532c6dcbf0076d23b9264cbdd9f0f0e320762e237a6b9e4e4b854a766", size = 5718579 }, + { url = "https://files.pythonhosted.org/packages/54/48/7fb3d4e7f664d1ce8ae35ec553872ffddf9fab4c5081735fdaae610b1e7c/prek-0.4.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:619bab14071670249777deea0cc0b29d904c4a514cf33b20e583900a544f0399", size = 6231622 }, + { url = "https://files.pythonhosted.org/packages/46/c0/a4ddbf38034afe67cfa97c4bd81c86429ada098e7c323218d9f9fd061566/prek-0.4.4-py3-none-win32.whl", hash = "sha256:143154b329c05b2f9fa3230e604d02d9c4297dd43f96135a8ba166772e8ecd60", size = 5240317 }, + { url = "https://files.pythonhosted.org/packages/bc/8c/fe97b5b095187bb2f93bbe406bccf108c879e5e4c83f165809b0d16ce0fb/prek-0.4.4-py3-none-win_amd64.whl", hash = "sha256:c38c5140ae2ea55ebb02e6ca590a416664ea1af287cdd21f54daeec53a81015a", size = 5626104 }, + { url = "https://files.pythonhosted.org/packages/25/63/3586226d536796e65f8e725b531d6104e55caaa18659bdcb512661629586/prek-0.4.4-py3-none-win_arm64.whl", hash = "sha256:3efa28fb37b9ddbafb7759da8d497f0d36cf02a05816e15d6541f5669d5d2114", size = 5470399 }, +] + +[[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 = "protobuf" +version = "7.35.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/fd/5b1491d9e4b586d621c54f4c36b888714164b6875f8d6afa3f9072906a51/protobuf-7.35.0.tar.gz", hash = "sha256:a2efd84605f41e559f1881b0912b44099d0a2ac9bf46b3474823f10fb393b0e6", size = 458677 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/ee/93d06e358a4aa32280b00e722d3ea0a1f25fc3cc5778d80581c9cca2c10e/protobuf-7.35.0-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:66be6c513931c794fa92c080ffee41671390da3d79da219cf9c0c0907f035dda", size = 433225 }, + { url = "https://files.pythonhosted.org/packages/8b/39/1c76c2da93f3c507e958e0aecee2391cc44d4625de6c728bbc555195b5a8/protobuf-7.35.0-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:fcbe42a4ac09d3ec9c987ddfcd956afd0b15f1ff613bd8371bde9405ffd5c8e5", size = 328847 }, + { url = "https://files.pythonhosted.org/packages/91/1a/39f7ce90a238c1a987a4d81ec26379e02ca0aff367de68e4a1fa474215b9/protobuf-7.35.0-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:4cbf5cc286130e06a6c9bbefac442431173906dfcc979712183d4adcc01b37ee", size = 344030 }, + { url = "https://files.pythonhosted.org/packages/70/5b/6baf9008817964454055ff3fe65f1de0b5f1e26c80c82f7fb108b7cd4ea3/protobuf-7.35.0-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:6c0f98f10c8a05ea30f8993dfef2de093d27b490fdae78bb60c8343795d55011", size = 327130 }, + { url = "https://files.pythonhosted.org/packages/8e/e5/e46adb0badc388bfb84877a5f9f026aff63f60e611016cf64dbe77e05446/protobuf-7.35.0-cp310-abi3-win32.whl", hash = "sha256:4c4617b83ade0e279d1d2bfe04025a1adb87f9ed657de038620dc0ff959357f6", size = 428946 }, + { url = "https://files.pythonhosted.org/packages/a7/ab/547fbd9e16d879dd13c167478f8ae0a83a428008ca07a5e06acdc23ad473/protobuf-7.35.0-cp310-abi3-win_amd64.whl", hash = "sha256:f05bcadf9a2a6b8dda047007075135fb7d08c73d9177aabc067e1be46881a201", size = 439996 }, + { url = "https://files.pythonhosted.org/packages/b8/ef/50433d346c56657a70d27f156c7b349ac59a068b01de4eb796e747eecc43/protobuf-7.35.0-py3-none-any.whl", hash = "sha256:c13f325cf242bad135c350629eeb5d54b24228eb472fb3e2e9ebbd4c5dc20ca0", size = 171659 }, +] + +[[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/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595 }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082 }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476 }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062 }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893 }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589 }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664 }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087 }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383 }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210 }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228 }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284 }, + { 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 = "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 = "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 = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262 }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146 }, + { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769 }, + { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958 }, + { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118 }, + { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876 }, + { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703 }, + { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042 }, + { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231 }, + { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388 }, + { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769 }, + { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312 }, + { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817 }, + { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085 }, + { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311 }, + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872 }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255 }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827 }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051 }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314 }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146 }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685 }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420 }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122 }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573 }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139 }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433 }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513 }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114 }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298 }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158 }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724 }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742 }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418 }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274 }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940 }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516 }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854 }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306 }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044 }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133 }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464 }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823 }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919 }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604 }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306 }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906 }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802 }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446 }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757 }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275 }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467 }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417 }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782 }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782 }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334 }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986 }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693 }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819 }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411 }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079 }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179 }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926 }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785 }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733 }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534 }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732 }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627 }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141 }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325 }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990 }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978 }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354 }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238 }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251 }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593 }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226 }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605 }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777 }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641 }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404 }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219 }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594 }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542 }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146 }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309 }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736 }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575 }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624 }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325 }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782 }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146 }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492 }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604 }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828 }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000 }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286 }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071 }, +] + +[[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 = "pyrsistent" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/3a/5031723c09068e9c8c2f0bc25c3a9245f2b1d1aea8396c787a408f2b95ca/pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", size = 103642 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/19/c343b14061907b629b765444b6436b160e2bd4184d17d4804bbe6381f6be/pyrsistent-0.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c3aba3e01235221e5b229a6c05f585f344734bd1ad42a8ac51493d74722bbce", size = 83416 }, + { url = "https://files.pythonhosted.org/packages/9f/4f/8342079ea331031ef9ed57edd312a9ad283bcc8adfaf268931ae356a09a6/pyrsistent-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1beb78af5423b879edaf23c5591ff292cf7c33979734c99aa66d5914ead880f", size = 118021 }, + { url = "https://files.pythonhosted.org/packages/d7/b7/64a125c488243965b7c5118352e47c6f89df95b4ac306d31cee409153d57/pyrsistent-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21cc459636983764e692b9eba7144cdd54fdec23ccdb1e8ba392a63666c60c34", size = 117747 }, + { url = "https://files.pythonhosted.org/packages/fe/a5/43c67bd5f80df9e7583042398d12113263ec57f27c0607abe9d78395d18f/pyrsistent-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5ac696f02b3fc01a710427585c855f65cd9c640e14f52abe52020722bb4906b", size = 114524 }, + { url = "https://files.pythonhosted.org/packages/8a/98/b382a87e89ca839106d874f7bf78d226b3eedb26735eb6f751f1a3375f21/pyrsistent-0.20.0-cp310-cp310-win32.whl", hash = "sha256:0724c506cd8b63c69c7f883cc233aac948c1ea946ea95996ad8b1380c25e1d3f", size = 60780 }, + { url = "https://files.pythonhosted.org/packages/37/8a/23e2193f7adea6901262e3cf39c7fe18ac0c446176c0ff0e19aeb2e9681e/pyrsistent-0.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:8441cf9616d642c475684d6cf2520dd24812e996ba9af15e606df5f6fd9d04a7", size = 63310 }, + { url = "https://files.pythonhosted.org/packages/df/63/7544dc7d0953294882a5c587fb1b10a26e0c23d9b92281a14c2514bac1f7/pyrsistent-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", size = 83481 }, + { url = "https://files.pythonhosted.org/packages/ae/a0/49249bc14d71b1bf2ffe89703acfa86f2017c25cfdabcaea532b8c8a5810/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", size = 120222 }, + { url = "https://files.pythonhosted.org/packages/a1/94/9808e8c9271424120289b9028a657da336ad7e43da0647f62e4f6011d19b/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", size = 120002 }, + { url = "https://files.pythonhosted.org/packages/3f/f6/9ecfb78b2fc8e2540546db0fe19df1fae0f56664a5958c21ff8861b0f8da/pyrsistent-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6288b3fa6622ad8a91e6eb759cfc48ff3089e7c17fb1d4c59a919769314af224", size = 116850 }, + { url = "https://files.pythonhosted.org/packages/83/c8/e6d28bc27a0719f8eaae660357df9757d6e9ca9be2691595721de9e8adfc/pyrsistent-0.20.0-cp311-cp311-win32.whl", hash = "sha256:7d29c23bdf6e5438c755b941cef867ec2a4a172ceb9f50553b6ed70d50dfd656", size = 60775 }, + { url = "https://files.pythonhosted.org/packages/98/87/c6ef52ff30388f357922d08de012abdd3dc61e09311d88967bdae23ab657/pyrsistent-0.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:59a89bccd615551391f3237e00006a26bcf98a4d18623a19909a2c48b8e986ee", size = 63306 }, + { url = "https://files.pythonhosted.org/packages/15/ee/ff2ed52032ac1ce2e7ba19e79bd5b05d152ebfb77956cf08fcd6e8d760ea/pyrsistent-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e", size = 83537 }, + { url = "https://files.pythonhosted.org/packages/80/f1/338d0050b24c3132bcfc79b68c3a5f54bce3d213ecef74d37e988b971d8a/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a14798c3005ec892bbada26485c2eea3b54109cb2533713e355c806891f63c5e", size = 122615 }, + { url = "https://files.pythonhosted.org/packages/07/3a/e56d6431b713518094fae6ff833a04a6f49ad0fbe25fb7c0dc7408e19d20/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b14decb628fac50db5e02ee5a35a9c0772d20277824cfe845c8a8b717c15daa3", size = 122335 }, + { url = "https://files.pythonhosted.org/packages/4a/bb/5f40a4d5e985a43b43f607250e766cdec28904682c3505eb0bd343a4b7db/pyrsistent-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e2c116cc804d9b09ce9814d17df5edf1df0c624aba3b43bc1ad90411487036d", size = 118510 }, + { url = "https://files.pythonhosted.org/packages/1c/13/e6a22f40f5800af116c02c28e29f15c06aa41cb2036f6a64ab124647f28b/pyrsistent-0.20.0-cp312-cp312-win32.whl", hash = "sha256:e78d0c7c1e99a4a45c99143900ea0546025e41bb59ebc10182e947cf1ece9174", size = 60865 }, + { url = "https://files.pythonhosted.org/packages/75/ef/2fa3b55023ec07c22682c957808f9a41836da4cd006b5f55ec76bf0fbfa6/pyrsistent-0.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:4021a7f963d88ccd15b523787d18ed5e5269ce57aa4037146a2377ff607ae87d", size = 63239 }, + { url = "https://files.pythonhosted.org/packages/23/88/0acd180010aaed4987c85700b7cc17f9505f3edb4e5873e4dc67f613e338/pyrsistent-0.20.0-py3-none-any.whl", hash = "sha256:c55acc4733aad6560a7f5f818466631f07efc001fd023f34a6c203f8b6df0f0b", size = 58106 }, +] + +[[package]] +name = "pytest" +version = "9.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249 }, +] + +[[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 = "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 = "pyvis" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ipython", version = "9.14.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "jinja2" }, + { name = "jsonpickle" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/4b/e37e4e5d5ee1179694917b445768bdbfb084f5a59ecd38089d3413d4c70f/pyvis-0.3.2-py3-none-any.whl", hash = "sha256:5720c4ca8161dc5d9ab352015723abb7a8bb8fb443edeb07f7a322db34a97555", size = 756038 }, +] + +[[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/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227 }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019 }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646 }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793 }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293 }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872 }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828 }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415 }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561 }, + { 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/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063 }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973 }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116 }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011 }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870 }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089 }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181 }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159 }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626 }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613 }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115 }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814 }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809 }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454 }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355 }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175 }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228 }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194 }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108 }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641 }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901 }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132 }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261 }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272 }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923 }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 }, +] + +[[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/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850 }, + { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380 }, + { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421 }, + { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149 }, + { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070 }, + { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441 }, + { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529 }, + { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276 }, + { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208 }, + { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766 }, + { 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/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436 }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301 }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197 }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275 }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469 }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961 }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282 }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468 }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394 }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964 }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029 }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541 }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197 }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175 }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427 }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929 }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193 }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388 }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316 }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, + { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266 }, + { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206 }, + { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747 }, + { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371 }, + { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862 }, + { 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 = "qubed" +version = "0.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozendict", marker = "python_full_version >= '3.11'" }, + { name = "humanize", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "objsize", marker = "python_full_version >= '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "protobuf", marker = "python_full_version >= '3.11'" }, + { name = "requests", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/a2/d4cd7fbc41fef2b308f10ed3f9c5bb1cf40f338ff3a0e37692325ba28b77/qubed-0.3.1.tar.gz", hash = "sha256:fadcf4be1668f0cfc58fcf430a15613e0f53f0df4e07fd05694c9caba39e8258", size = 15152020 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/ae/8817f6db21335200da65434aaf1adb7ab86c38f7ac88cfbaaab9a50df335/qubed-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8a5ba2af717c5225b733ec6695bc848a6507e5590ea47310c36a204b03604da8", size = 392905 }, + { url = "https://files.pythonhosted.org/packages/3c/b2/253ddba74f5703677d5ee2232b1925578266e4023f7a3aaec6a17e5fd6b4/qubed-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2f0ac5b238de53baac98ea66e1e2a21fa729baf69789fb657b578e7d1dbda5d", size = 379845 }, + { url = "https://files.pythonhosted.org/packages/95/53/06c4c8f59b587b5ce087c796d362ecd57fea6a67fb73f380c7f8f4b5403e/qubed-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6de0a6783af5f6342f7f124c5a159fc0b84c78d95d2866801d9a280cba447a46", size = 417330 }, + { url = "https://files.pythonhosted.org/packages/a1/43/33caa7eefa46c21c6b9b3d3dd96f56772a46530a27577c63a273699b0bb1/qubed-0.3.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e2f16a2c6fbf52049cde9931d2cb6777e7b63c9a2e68b949a7bd06f6bbd6e66", size = 425131 }, + { url = "https://files.pythonhosted.org/packages/e9/01/7165694535259dfacff7d78377eb66b6e4187b69decbc81558a7170a8aa4/qubed-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2202d3f948231254d6c0ad19d10577ed663983c08b92a9ca8da00989465b013", size = 544973 }, + { url = "https://files.pythonhosted.org/packages/f3/85/9a7914ccfea96d24f15df68a93dbb99ff14b4e75f1dd326df58286b38a20/qubed-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a783825a8b5415ac4ba15d3495a8330a4d78882715b90869f66ae1ee147826a4", size = 453565 }, + { url = "https://files.pythonhosted.org/packages/b9/32/9c7cf964bea589da50bb572ee3bcd07641bf7e75961a14558dbee4b1a85c/qubed-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2edde67d3710ce780b85b18eab0749ebe1c77f92251e3d0c6efbd88ae7d661", size = 428033 }, + { url = "https://files.pythonhosted.org/packages/c4/2d/458d060268a5a38635994b854507e01038186a4d96cc5b5112680d70ca3c/qubed-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c576d6bf4fd6e6b6e44c5ef67b107fb3a0bf75bac89f25eeffdb7cd846e081cb", size = 451273 }, + { url = "https://files.pythonhosted.org/packages/be/2a/abfbeaa8590c39af25e71ff6c84fc3dbd77a18629046b2ae5dc05f1b5e9f/qubed-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ae99b8d994a26452b308ecc2e7f40b3209bdcc827a9966c9451dc6e124aab0a1", size = 592940 }, + { url = "https://files.pythonhosted.org/packages/59/33/84d0b4d21a5153131b4e8a321bb959ab0309a220a875001bcb3901393564/qubed-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b0819d34638e5a31891576feaa6889f4b16aa0f159876c83694281c86b628363", size = 694999 }, + { url = "https://files.pythonhosted.org/packages/6f/87/8d1dea898d0e70a46a9c788fee66c07fdfed08ab46b99849962458a1945e/qubed-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c9a047da1cd4ee8b6c8e84e8d26cae383c46033ae7af4c8b8641a36f5b1d9c43", size = 662808 }, + { url = "https://files.pythonhosted.org/packages/35/61/ac065cd10f6109e27b57b498d539be67ac1e594e7ede519124696d5175be/qubed-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1db61763554caf12adf40095fc6fb951bd115665ac692655ceed3c3dc9aaeeeb", size = 633806 }, + { url = "https://files.pythonhosted.org/packages/72/55/3761a4acd6169fed3cbe5cf809efada6ef14aa9c6cdb7007033a5f8f300b/qubed-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8a3734e6ee8954da87ebbf319402a0ab0e16e0d64a10b5b1a1e6ee13d0eec244", size = 274537 }, + { url = "https://files.pythonhosted.org/packages/f5/e1/ade8497e74afd3e6dae8ea1d79fec46ea0c284ae25e6f96ccb1b5c687496/qubed-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2f7ad49d36086114a9c48c5bbd774ec2fe9e4fbe7064e5af70eeeed1a1696444", size = 388382 }, + { url = "https://files.pythonhosted.org/packages/48/96/00629bd9796c7438b613dbeca97ae4349694ce45a9f1998ff45d3f3f7aab/qubed-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6832cc6010c2f0fffbca3751c0204876da03e5feae294d2896acaea9482f3e6", size = 376862 }, + { url = "https://files.pythonhosted.org/packages/f5/ae/b94eee7a2de48c1fe5fcff2abeb1f0b66f0e2959d8f8319b358814be896d/qubed-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f9273475076dafcb45bb8a510dc7a3a44c81d486edaf8fda88a3da414a318cb", size = 416993 }, + { url = "https://files.pythonhosted.org/packages/ea/cc/832aa8537960349d4bb043762d57171e1256611ebda815381cabb7f92ce1/qubed-0.3.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8825a2d7e0ddaf3b841f3a746669ca8a195a86e4a0a04a5a0ce26987f4b976b1", size = 424594 }, + { url = "https://files.pythonhosted.org/packages/d8/cd/21bc5fed290401da7774fc05b32cf045dae07b208b3169924ecbb59069fb/qubed-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0758cd417772386f7ba3972c6b4a23258569e654ef5cc77f15d0d19c1db8d7d8", size = 544629 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/0c291803b21b811c1398d8d1133dc3fabc2d6a8aab1804c2b8788af5eaee/qubed-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5f3999551b6d888320002a7c7c978c75efbce8f2ad449a2ddafbf3df89f4cfd", size = 453413 }, + { url = "https://files.pythonhosted.org/packages/ac/84/8ce812bae0fc382715eaf831bc3d6fbdd10683e1c9d47e0b7f0b62df60b7/qubed-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71e33a38e02b632efb454ae2ca90e818201e6f6706485f2ac1d45e69f977f1c", size = 427902 }, + { url = "https://files.pythonhosted.org/packages/69/40/40845475c5153521783adbf80f2455fbb33ff625c29b6ba8e57555970afc/qubed-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9de33e0a06bde6068ef1f2dc1df354826c9a1e63e8263cba4be55db3e24dd7a", size = 450608 }, + { url = "https://files.pythonhosted.org/packages/6b/c0/100edf7a233d917f2979fbbe3a18e20d515df4f7564847452e71cc8e914b/qubed-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4ed3902eaf6ffaf248cdd680f52cc48ca7a9c6a259738c013c382d6d9ae9a0bf", size = 592941 }, + { url = "https://files.pythonhosted.org/packages/ec/50/18bd283574ad125576b267e37cb906399abb80a3b30eda70cf629ea0d65b/qubed-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fb8344fd7942086f1878c355f5fa3bfd7241022b3264384d72af9dc21083da9e", size = 694756 }, + { url = "https://files.pythonhosted.org/packages/c7/44/c8154bb943855c3def9537b9643a901e4be827581b1240a69846ff6811a5/qubed-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a3c85eebed4bc4b229793fb27a2cad19caddd36df4115cbe62e3f2762ac94a6", size = 662092 }, + { url = "https://files.pythonhosted.org/packages/19/69/017821dda7e5fe9b69cf5ae962668c632c83448f47c4be1a1256ac7c7fae/qubed-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2e2ad894d86d07181d7345c7555835c3fbbf16655a3adbc15368b44b407c570", size = 634032 }, + { url = "https://files.pythonhosted.org/packages/7b/be/3e853dd96781110b82e2d5ba51a14884ef7518a85578f19db1fdfee5f74e/qubed-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:71541f0d98df10e22e40c11f54867df3272436f87758e1c10c49d074571b821d", size = 274558 }, + { url = "https://files.pythonhosted.org/packages/f6/78/00920a7dab93468c6abd4364900372adf5a6e02373874fee8a048b173e2f/qubed-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0982545641cb7877c25ceefc788e2e0c5918b8d942419b1b3ebecf8ef64aa6c1", size = 388026 }, + { url = "https://files.pythonhosted.org/packages/17/32/763131474decd86745ba83d5c7c77dcb95fc6144e44d61ac26c4970c8bc3/qubed-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:26432bf22b7aeab036c763639c1874471eea8f58b69bcc789c746fcf6a0135e0", size = 376678 }, + { url = "https://files.pythonhosted.org/packages/ec/33/859744b54e692514c18d7d1c356b0dd49e01308990962b3d05edacf421f0/qubed-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5144c5f0e9929ef0219b5a06d43d58c5c111c165a21313f98892200d23a46e40", size = 417055 }, + { url = "https://files.pythonhosted.org/packages/7b/52/d3fcd58088922485566dac0c613ce54b5afb411a47ac1c0fc30f394e4d56/qubed-0.3.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7be7875347f1fab4342e503f69f2cf7ec77e23134c17ee119489a26c6abf81dc", size = 424312 }, + { url = "https://files.pythonhosted.org/packages/6b/46/0159a2f0f3a9ac907454cf5e7e9de53409470535feeab1f005a57cff9869/qubed-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6b44d86229cd4b43b524eab440ae8b3e4a1e7706815d9393c56bf02c09f25f4", size = 544218 }, + { url = "https://files.pythonhosted.org/packages/aa/06/b890c192d4d05a9ceeaacfec2c9ef1bc7f4ed5a9a88613442cd409a7103c/qubed-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0426c2cc15f126584a64df6e27ee0162d44d413493689218544b444972d67b2", size = 453095 }, + { url = "https://files.pythonhosted.org/packages/01/88/31e64cd98f079243157ced5d0a6ca3c0637e3e93982269bff5d6accd36fa/qubed-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04ed84be17ecff54a813b159b0ade5b6fe1daf9d0d3e8cce58160a71898de084", size = 427903 }, + { url = "https://files.pythonhosted.org/packages/a4/c3/6fcdde26e45c18dfaf67cad426580d9efd8b44b839db29755cc10dde7e52/qubed-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ee277521885d362a2f4282874aadaa7b5b021473cf18b62ccbab49d02490738", size = 450209 }, + { url = "https://files.pythonhosted.org/packages/87/63/8eb2f83b994ed59c6526f09b72fa8898188a0023ad0348d14bbcfdfc715c/qubed-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5e716bd15a5e614da853a0b835ad16a9c57a13f9243194abd4d7a4aabbf82dd0", size = 592620 }, + { url = "https://files.pythonhosted.org/packages/4a/be/4fe1e7634101016eef06843805633c9ec6b8e69bc40ef50190de4284271d/qubed-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:71f18b847fa9bc205368dcd176cc27e1c5c0cd4cfd74d3e2770ba422b3b14ff0", size = 694654 }, + { url = "https://files.pythonhosted.org/packages/7c/17/84cf9d4615ea0e29d8709346ffd5bed5bcfdb29baf8101949181c5239cc8/qubed-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:eeeb96bf930b2bd944c0b3145c18dda22673dcbe98af1b4fca0429c96eeefae3", size = 661802 }, + { url = "https://files.pythonhosted.org/packages/7c/27/4826d44a5a47ed4d3ba3d64f519d6ce65511239dbd613081a2b5b03a425e/qubed-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c2a3519538aae695c2a129006010d1291bf387e86b2477587dd421d07d0d111", size = 634066 }, + { url = "https://files.pythonhosted.org/packages/c9/cf/97f4ea7ca129eea1d97139e56c3af415f082f6b063a0d3da537c4cf77984/qubed-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:677f12a55d20a43beade986c45508668d93762072a7f8710dc768263832305f2", size = 274355 }, + { url = "https://files.pythonhosted.org/packages/1c/25/2d77b2aa954c7581dfe614e4edc9e213e0bc537a791567955cc89c908ea3/qubed-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bce5c3ca22b4125f7b2337072892562949c66b22060f1458f0ffc8914dea664", size = 415858 }, + { url = "https://files.pythonhosted.org/packages/cd/38/145f404396aedeb65ea110d14a74f02ab5f2c64fcf0441f196a8b509394c/qubed-0.3.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c7eeb24e4d156df188000388b8b93b8659b8ff56a3a0204eb868a63d43c9fb5d", size = 423639 }, + { url = "https://files.pythonhosted.org/packages/52/54/04beadee9ce2fb42d9cd9dead26aebfd614f01d9c57287b07406abfbc567/qubed-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57bb442de810879c2e0801b6b9e32e9ec30d37dbd02b464809523ea5294fe655", size = 543014 }, + { url = "https://files.pythonhosted.org/packages/e6/f6/37e2e0efb56b29f16d533b0bfa56fdbff94289e527e0a529e9a6547ef8b7/qubed-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:738ab71e1a714f3a3e3110e3eaac2778a5684f21515196b6b3c83843f9c5243b", size = 452627 }, + { url = "https://files.pythonhosted.org/packages/e9/aa/699a433b495665b99c4bb2dd37f4c8a15147dc955174d4a4eec3a2105fc7/qubed-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:af5e093933172f0820860b2fb4d909a6bb8b17043bf40c143088bf1529da0d26", size = 591409 }, + { url = "https://files.pythonhosted.org/packages/b2/fe/0d701edc6db7c16f50c3d41387791eae38c475d3f63677823ec5549a9b1d/qubed-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f0a5caf87d9fc853adde336759ef88e174be84b74bc29d582788fe70735dbba4", size = 694115 }, + { url = "https://files.pythonhosted.org/packages/dd/5b/3a91f3ee0de53bcdb4a6c80590243952acb891c088ddcaf066d4a209d0df/qubed-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8144ab517ef48f43c49b97d07c05d230015222f8c091bb1daac00ef62bfc74d9", size = 661144 }, + { url = "https://files.pythonhosted.org/packages/34/3e/28ab2031409540bc38f3f6e2db1d546b9d7c242755b6bf5c1ad4b7cab85a/qubed-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e164e030591f2ed0eb5525efe785ff04fc7080f0ef4ccfe8d83e25091006d709", size = 633167 }, + { url = "https://files.pythonhosted.org/packages/a3/90/8651f479d7a726bc5f25cb90f99f33420fec6355b71248eb9b266753bce9/qubed-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:49b0eec981057347991bc80b3886501ca45ee0e426843c0450a8b0710d444659", size = 387842 }, + { url = "https://files.pythonhosted.org/packages/1d/69/679e544a4fe1505b9f78f047ce1c81cf6db84b382c58d4a6ca46cfa48327/qubed-0.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97f9c034ae3ad1d7123e269c7fba225c20dbbaeebdd80803c77a69f3b010f8ff", size = 376202 }, + { url = "https://files.pythonhosted.org/packages/0b/1d/d4a5fa3a40e697f1ec8337e152cc241ec6aeff84f7514a6cfbee6b6536f5/qubed-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d154b12afffb5891beb06157b5bfc31e33d579d6a8682d866eb848bb18cc55f", size = 416737 }, + { url = "https://files.pythonhosted.org/packages/6e/66/efc34b57ee3d21334d6127b187e51a249a37484b707cbed393d464419d09/qubed-0.3.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac14223782c4f346167a23511408347cf2a5c109c07f4319a9eb8f08bb4cdd53", size = 424440 }, + { url = "https://files.pythonhosted.org/packages/c2/11/27f13777d9a4f2f0425c32cdc4f6fb528393e238768c185124abe15ff024/qubed-0.3.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e80a636152fa172ac298cb87bdae96412fa5f9e9a2149d1cb94bb4068508c941", size = 540728 }, + { url = "https://files.pythonhosted.org/packages/9a/9c/8ed6325f5c9c8ff96a41adef53f111bcf5dec51d2687afd2fac8504f19fc/qubed-0.3.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cb088a6846416ca092be5793c5191df97a94a3c3e5c43468be42b811ef14020", size = 453464 }, + { url = "https://files.pythonhosted.org/packages/b1/d6/c0dac0a00e3730130f897389d263042c26b2dd182cbffb2960b93c64007d/qubed-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a5e0cae1aba8bd95d020bc127bc404211c96a0ff66502f2bd5ff04a8fa06643", size = 427694 }, + { url = "https://files.pythonhosted.org/packages/de/e6/51e368c70bc5d3ee557b92e059fe1280330ed70d537cf8739ba71f316319/qubed-0.3.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:409c6475c99f28e372e48c9fc13284a48fffadfb6f54e531aad59d608457de41", size = 451222 }, + { url = "https://files.pythonhosted.org/packages/3a/74/5deba084e718c14509af8a4bb676785d91dc6516ac633e1b72dbf0598216/qubed-0.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:246332f045e37f6e88c773d4c8684441d0ec2a40c8ede7bae896c8ac6d513471", size = 592438 }, + { url = "https://files.pythonhosted.org/packages/28/c6/f41468881fde149c23df5bf568bac54bce9409374c76043ba19f159185c2/qubed-0.3.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2caf36b5cba258fb2f6301f879d4a16ad1a74648a0593d9f057c6b6aff603fd5", size = 694800 }, + { url = "https://files.pythonhosted.org/packages/f2/76/409605ac8bf26382d51d0e9df55344fa3cede74feaaebaf75a9fc07b221e/qubed-0.3.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4c5ce4d40840f45d2c359649a49a4fb271ec1650a162d20d5fea1c7106cb375d", size = 661966 }, + { url = "https://files.pythonhosted.org/packages/83/56/6efbbf4df4d483390c679456f87daed5e80c8f663d4d5065689ae6e8fc27/qubed-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5aa6c0d749a3186f1d4fb38e5ece4ba3513ee9cf24d182156e35fc7d637ce08", size = 634051 }, + { url = "https://files.pythonhosted.org/packages/d3/8b/65aef7336037d71978ea2e33da4a6c43262f2e31b84ee74c32e85f2aff4e/qubed-0.3.1-cp314-cp314-win32.whl", hash = "sha256:f4b7f53c722d0550a6be0e1ac148a79228f0cda2f3c32e9297b86bdd61c228d9", size = 257945 }, + { url = "https://files.pythonhosted.org/packages/9b/89/0249375839f15086a08f213d25c0aa3828e16808cf68bdb088eb01125520/qubed-0.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:c861104640c86883a5e0c8ae8682eb5eb417f4506282d36adfa9329bad26a3a7", size = 274944 }, + { url = "https://files.pythonhosted.org/packages/9a/3a/4694ed8a3a70b5ea484d8e82cb1988ddc5b19aebf9433ea5ced28263b64f/qubed-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1ba620950ed169f9d9652597181b03fe37b7febef65c18956c5032006d06886", size = 416016 }, + { url = "https://files.pythonhosted.org/packages/43/2c/56fcd7992f12856ffb6b01aa3f17b0e799ddeec6cae97eb5e632413750c3/qubed-0.3.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f76e96ae183a5f72a03f36681e995db7b9b6ecd2bce6b880135ef5f0dba51ad5", size = 423689 }, + { url = "https://files.pythonhosted.org/packages/8e/40/0a3d024e77ec6223e7256dcb92013a1ba139e569cba5dcd1470679171f1a/qubed-0.3.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d256f1db00336ce347e1d646d2e1065bdfe1d8de9b06cc60ab1e81aa5a135363", size = 544069 }, + { url = "https://files.pythonhosted.org/packages/51/de/c32a46fbe272b436681bdda6d3073308598e98af4a74f6c26e1d07c0ddf4/qubed-0.3.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c38414c20f17128d0c62de60515e54d280fb35c13a576aa0d4bbf8e8b6b7ff7", size = 452810 }, + { url = "https://files.pythonhosted.org/packages/f5/e9/3059877538ad438428d12200141e155a5e3521fbeacb361a7d95c187fb2d/qubed-0.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6dba1d9c479c79605c1d0ddb841f93b5fac94f80085a9cbdca3319b1111baadd", size = 591547 }, + { url = "https://files.pythonhosted.org/packages/2d/0d/10ac0b1f602b6f54bc57b49bb9e672b9dacb70fff960206bcd52aff0de3b/qubed-0.3.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ee0f20cd860ca67136765ef12cdcb04fafc15c0eab33ed9d733603d237d5e328", size = 693845 }, + { url = "https://files.pythonhosted.org/packages/5f/47/3ed547c0fce3f7d5e794f739783ee758f72061b792053f68d99db89d852f/qubed-0.3.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9923d183c0c71a8c2a1b3e95a40df128141cedd7cd21f73c9d9a2aa34ad58f5a", size = 661304 }, + { url = "https://files.pythonhosted.org/packages/b7/cc/fb5e887dfe9561a96bcd9969f8412736aaf8b40ea7fc76edb7f6791b7787/qubed-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5fcee6ee49265f43fb986860f105b7a2c735e8f7c80feeb02f618f1354ab1", size = 633291 }, + { url = "https://files.pythonhosted.org/packages/8a/a4/61c0893c62b70b3ae7096b51071134939ce3a7a8dc6d3be3485a14c704ef/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0525ea3e7286a2e1306c2d53cde122d596fe32c97c4b77ffb791647b6d06df40", size = 417314 }, + { url = "https://files.pythonhosted.org/packages/97/88/75d5cea6fa9af6b25e93a6fb6775199601020193c813eba624d626265b6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97b8e5a1ceabf68032b8c38a1a0fa2b425e2f137e1ae0b29d27a9b2c640d2923", size = 424549 }, + { url = "https://files.pythonhosted.org/packages/0a/79/c14068df38c8bcadb81c204e06eb4f33388c40061792346b46c55864ec6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:536e9479355758596d552314b29185f8e9606ee1fa7551b9ad71d575fe41bfa0", size = 543966 }, + { url = "https://files.pythonhosted.org/packages/34/6d/ead34b0f6aa8049b29db20bdc38c3378a1a71e6a4b3ef4d4b2b658b54774/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:288446a11cb22d194322858ebed1882d48cde40e65c40a5b2bee4d1eb204a7e0", size = 453255 }, + { url = "https://files.pythonhosted.org/packages/6c/69/e0616ec49e8bbf7b2f365b93336b63ade3e10c377a0f7921f4f78da1cc5b/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:164eed7d512094c9f6bedcbf62dcc15d78cfcf42133fb594fc68494dac0dde9b", size = 427645 }, + { url = "https://files.pythonhosted.org/packages/ed/34/3455baea73fd18b29884c9e30806b20fffaccff1b57d533091e6cf849b4a/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48790481e503e6e65d0acd2afdc085bef6cc9f876d9d6ff791c1f6ece99b1e9f", size = 450995 }, + { url = "https://files.pythonhosted.org/packages/97/d2/57842a201a430afa1f6eec433f51cfcd08601486daaf074b42a1a4047314/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c7583848ea8e79d7b78427979fe7100fd0c271cf14efadfa5cd25e9878c67850", size = 593098 }, + { url = "https://files.pythonhosted.org/packages/09/b3/dacad16f12ce515f8ad3c61ed7b6d1749f90b9c36b1a0947ef5bace5ed0c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:ab4475288640f2e380f3704fb7b44f4e6d8a8987041f6fb3cc76ecdc02e333cd", size = 694846 }, + { url = "https://files.pythonhosted.org/packages/84/e6/78473835a64ba33c2e6963c120eeff496182f81006f955c19ca7ea17e25f/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:25d8d3603b16e3202b53145150bcb8ebedce14fc42fd076d17feaf3a0de897a2", size = 662539 }, + { url = "https://files.pythonhosted.org/packages/60/7f/ab8d6582ba660b03da7617bab310f1db095a3ce622fdfcc5c2e50778208c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:cd90899b3182ecf6bfac689664be37726a1f28d06200a8b15b22fdc3b79cd72b", size = 633528 }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +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.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075 }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +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/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490 }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751 }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696 }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136 }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699 }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022 }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522 }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579 }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305 }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503 }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322 }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792 }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901 }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823 }, + { 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/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086 }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053 }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763 }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951 }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622 }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492 }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080 }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680 }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589 }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289 }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737 }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120 }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782 }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463 }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868 }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887 }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904 }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945 }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783 }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021 }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589 }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025 }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895 }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799 }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731 }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027 }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020 }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139 }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224 }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645 }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443 }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375 }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850 }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812 }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841 }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149 }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843 }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507 }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949 }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790 }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217 }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806 }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341 }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768 }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099 }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192 }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080 }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841 }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670 }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005 }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112 }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049 }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661 }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606 }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126 }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371 }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298 }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604 }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391 }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868 }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747 }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795 }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330 }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194 }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340 }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765 }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834 }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470 }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630 }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148 }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030 }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570 }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532 }, + { 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 = "rpds-py" +version = "2026.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609 }, + { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460 }, + { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031 }, + { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121 }, + { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026 }, + { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865 }, + { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012 }, + { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111 }, + { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225 }, + { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487 }, + { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798 }, + { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053 }, + { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390 }, + { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097 }, + { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361 }, + { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040 }, + { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775 }, + { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329 }, + { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539 }, + { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674 }, + { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268 }, + { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280 }, + { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233 }, + { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009 }, + { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113 }, + { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838 }, + { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436 }, + { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734 }, + { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045 }, + { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967 }, + { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787 }, + { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179 }, + { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173 }, + { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162 }, + { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093 }, + { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829 }, + { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786 }, + { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920 }, + { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059 }, + { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030 }, + { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975 }, + { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178 }, + { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481 }, + { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519 }, + { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446 }, + { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287 }, + { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033 }, + { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891 }, + { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646 }, + { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830 }, + { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830 }, + { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613 }, + { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183 }, + { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578 }, + { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573 }, + { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861 }, + { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633 }, + { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074 }, + { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635 }, + { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756 }, + { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831 }, + { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127 }, + { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034 }, + { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823 }, + { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144 }, + { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959 }, + { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558 }, + { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789 }, + { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405 }, + { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975 }, + { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701 }, + { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806 }, + { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985 }, + { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219 }, + { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148 }, + { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196 }, + { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981 }, + { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961 }, + { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965 }, + { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526 }, + { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190 }, + { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921 }, + { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766 }, + { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343 }, + { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502 }, + { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916 }, + { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855 }, + { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422 }, + { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576 }, + { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640 }, + { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322 }, + { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066 }, + { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586 }, + { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415 }, + { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427 }, + { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615 }, + { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786 }, + { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583 }, + { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941 }, + { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349 }, + { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922 }, + { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003 }, + { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245 }, + { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015 }, + { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016 }, + { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775 }, + { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270 }, + { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285 }, + { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581 }, + { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041 }, + { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946 }, + { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526 }, + { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165 }, + { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778 }, + { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839 }, + { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866 }, + { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441 }, + { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151 }, + { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195 }, + { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850 }, + { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899 }, + { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618 }, + { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003 }, + { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778 }, + { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359 }, + { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820 }, + { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243 }, + { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541 }, + { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326 }, +] + +[[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 = "sortedcontainers" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575 }, +] + +[[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 = "tblib" +version = "3.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/8a/14c15ae154895cc131174f858c707790d416c444fc69f93918adfd8c4c0b/tblib-3.2.2.tar.gz", hash = "sha256:e9a652692d91bf4f743d4a15bc174c0b76afc750fe8c7b6d195cc1c1d6d2ccec", size = 35046 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/be/5d2d47b1fb58943194fb59dcf222f7c4e35122ec0ffe8c36e18b5d728f0b/tblib-3.2.2-py3-none-any.whl", hash = "sha256:26bdccf339bcce6a88b2b5432c988b266ebbe63a4e593f6b578b1d2e723d2b76", size = 12893 }, +] + +[[package]] +name = "termcolor" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/79/cf31d7a93a8fdc6aa0fbb665be84426a8c5a557d9240b6239e9e11e35fc5/termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5", size = 14434 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/d1/8bb87d21e9aeb323cc03034f5eaf2c8f69841e40e4853c2627edf8111ed3/termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5", size = 7734 }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704 }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454 }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561 }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824 }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227 }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859 }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204 }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084 }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285 }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924 }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018 }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948 }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341 }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159 }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290 }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141 }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847 }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088 }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866 }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887 }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704 }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628 }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180 }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674 }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976 }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755 }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265 }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726 }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859 }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713 }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084 }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973 }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223 }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973 }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082 }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490 }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263 }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736 }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717 }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461 }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855 }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144 }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683 }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196 }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393 }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, +] + +[[package]] +name = "toolz" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093 }, +] + +[[package]] +name = "tornado" +version = "6.5.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/57/6d7303a77ae439d9189108f76c0c4fd89ee5e2cc8387bffb55232565c4ed/tornado-6.5.6.tar.gz", hash = "sha256:9a365179fe8ff6b8766f602c0f67c185d778193e9bdd828b19f0b6ed7764177d", size = 518139 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/0d/b4f481e18c5a51864e6d12b9a05ecf72919696680b747c958c3fc1f4fbae/tornado-6.5.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:65fcfaafb079435c2c19dc9e07c0f1cf0fa9051759ed0a7d0a3ba7ea7f64919c", size = 447737 }, + { url = "https://files.pythonhosted.org/packages/9e/9c/5430c39fcab1144d35860f457b15e9c08b4bc7ac86764354204e983d6183/tornado-6.5.6-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:38bc01b4acacded2de63ae78023548e41ebe6fbed3ec05a796d7ae3ad893887e", size = 445899 }, + { url = "https://files.pythonhosted.org/packages/8b/79/fa7e14a2f939c807a8d30619b4eb604eab219601b78792516ebe22d40cf9/tornado-6.5.6-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b942e6a137fda31ff54bf8e6e2c8d1c37f1f50583f3ed53fb840b53b9601d104", size = 448964 }, + { url = "https://files.pythonhosted.org/packages/a7/71/bd67d5f5199f937dafe03a49a37989f60f600ff6fef34c79412a829d97bd/tornado-6.5.6-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8666946e70171b8c3f1fc9b7876fac492e84822c4c7f3746f4e8f8bc9ac92a79", size = 449935 }, + { url = "https://files.pythonhosted.org/packages/cc/a4/c24388c9cf5b3c3a513b56a158af9f23092c9a2810d789e294310797df21/tornado-6.5.6-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c34cfab7ad6d104f052f55de06d39bbafc5885cfeb4da688803308dbcfa90b7", size = 449767 }, + { url = "https://files.pythonhosted.org/packages/a5/eb/6a07ad550c3f7b37244bd0becdf293ec3d3e961783d8b720a97df50de1b2/tornado-6.5.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:385f35e4e22fb52551dfcda4cdc8c30c61c2c001aef5ddad99cdfe116952efd3", size = 449174 }, + { url = "https://files.pythonhosted.org/packages/bb/84/3469e098dccdb6763130e06aacd786bb4363fca7b590a55c101ddf34ed30/tornado-6.5.6-cp39-abi3-win32.whl", hash = "sha256:db475f1b67b2809b10bb16264829087724ca8d24fe4ed47f7b8675cae453ef86", size = 450230 }, + { url = "https://files.pythonhosted.org/packages/d2/3c/273a04e0b9dd9016f1685cca0c1c8795a71ac88a34a8c889a0b443483226/tornado-6.5.6-cp39-abi3-win_amd64.whl", hash = "sha256:6739bf1e8eb09230f1280ddbd3236f0309db70f2c551a8dbc40f62babdf82f79", size = 450667 }, + { url = "https://files.pythonhosted.org/packages/02/98/0cffe22a224f60c5fb1e3aa0b76f9da2e1ca78b0e9545e3d077c68ce60a7/tornado-6.5.6-cp39-abi3-win_arm64.whl", hash = "sha256:2543597b24a695d72338a9a77818362d72387c03ae173f1f169eadc5c91466ac", size = 449690 }, +] + +[[package]] +name = "tqdm" +version = "4.67.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374 }, +] + +[[package]] +name = "traitlets" +version = "5.15.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858 }, +] + +[[package]] +name = "ty" +version = "0.0.43" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/37/4ec04de0659b93be37d956dfceca13b1ecab9c959f28d8a1d5e514603f36/ty-0.0.43.tar.gz", hash = "sha256:ea4cff50548f2a1877e848d3abe9e293cde8ab94757a7eb93fc0d4013f98be8e", size = 5798429 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/74/1916026a78f20019a2f03adbd6fb4430ddb7ce1e52c2e17a90856a6d192e/ty-0.0.43-py3-none-linux_armv6l.whl", hash = "sha256:3bf70f5446480562bf6c9f639df4b5cb60716b8f8d1a6b8e5811d5c7eccd8bf2", size = 11598153 }, + { url = "https://files.pythonhosted.org/packages/b9/af/58bb0089d2635216c8fa6612dd486a3f986d0ab1c46a41527ab95e57f0e3/ty-0.0.43-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7184741f8b15425a1bc64b950ad005cb353573288ac0e8a04f5481ceb3832596", size = 11357811 }, + { url = "https://files.pythonhosted.org/packages/d6/9c/32c6b14f3feddf87b59c7a50709e2b3da408258f2f583f05575f77bc8f7b/ty-0.0.43-py3-none-macosx_11_0_arm64.whl", hash = "sha256:8c306379ca9a35f6ae5270fe9bda7af4b46d91822725a2586d78c8b9b5493b62", size = 10772024 }, + { url = "https://files.pythonhosted.org/packages/09/fa/98aa4a74bd00cd5efc424923cd1daffbf1e40a0338041cafb203379d746f/ty-0.0.43-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d624b884c9c1fd244ad2a5f026364e7162a22b3f537025941ada2e363e676414", size = 11291034 }, + { url = "https://files.pythonhosted.org/packages/b5/db/4de086c38ce96dcada2bd451f43171d2c237f96d8ed19a1ea8fe51bb8ef4/ty-0.0.43-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:281fc4c00fbc196045141faa085055bddc58846b04a2800204701415a1b9c6aa", size = 11364724 }, + { url = "https://files.pythonhosted.org/packages/b0/d3/e3cd8e3233a6fd8362a49aa025b79e9f40151a2a86d811ace154c6eb7445/ty-0.0.43-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f57d6cc28de89024b48d1788e4758c05299d5749d4a51c02e71ac655ec23d9a5", size = 11890555 }, + { url = "https://files.pythonhosted.org/packages/80/7b/6f46d444e8241606bbde098df3dca93f2ec0b834a42055db85ee7d33646f/ty-0.0.43-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a1d6ad6c5e7792c7eac0a01e550f2c2004462e01a64a91ea1636aba6fef6e71", size = 12450968 }, + { url = "https://files.pythonhosted.org/packages/4a/e1/79fbe51f2e4b9d8347f2013cd7ed0b63f3b499038c02dc0357e9b28a3a47/ty-0.0.43-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:66d474395d7635fb618bdbb58b4e3360259a2056d0a5621b82754b9da2cd8a04", size = 12064187 }, + { url = "https://files.pythonhosted.org/packages/9b/3f/c758a3a8df5b90d331f2b60c8f16021ee64d75e78f99d67cc4efc9bf5f4b/ty-0.0.43-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2663a0003a8b60fb98db7f6f6e673df80b21d0fe3a9868a26fb06b4e049b6fc4", size = 11943208 }, + { url = "https://files.pythonhosted.org/packages/54/5f/f516442749cf1b45ca6720a5d41df2738a486ed9ace774c03d515db89084/ty-0.0.43-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:d5a6c352d374d889189d5ec82b54b26a5885f769f7b7787f7f875500dcb8673e", size = 12143572 }, + { url = "https://files.pythonhosted.org/packages/b7/bf/0d83c7f43bf4c10f3678bfe7d938e51c445298c7b923f155c5204730c2df/ty-0.0.43-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e7dbbeedfad3ca250d74fcc355fa9ab6b38d2a17f22d6304f615716939dbbb27", size = 11279355 }, + { url = "https://files.pythonhosted.org/packages/3e/de/a6c978bef6d9e949f79f4782d9e4ee4df0893713e73b055d84c1a5116b9a/ty-0.0.43-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:24b18a0273ee46154996cfcfa27438f851f440c925587ec200df6f98dffe67d3", size = 11408412 }, + { url = "https://files.pythonhosted.org/packages/ec/b1/d13857c23867f0f76b92e38e5841c64ca5e76dc5d4bf27f52cb81d8ab685/ty-0.0.43-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2ef681951520d692b7e9c0b5e56aacf4f98ccae47cf6ffccaf2c7b6b33dc226e", size = 11541709 }, + { url = "https://files.pythonhosted.org/packages/7c/f1/cd6afc6f6a687e238bf5e12189f7920e81a0bdef6c3dba4c784ef140f7d9/ty-0.0.43-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2af105de7437143aa4676b28016b5bee661aaaa4eff52be5867fb25119641ceb", size = 12041266 }, + { url = "https://files.pythonhosted.org/packages/bd/ba/51ca7c3335da2b8d0a3e477fa4986be9f4a53b05bfab862967d8d2e6ca60/ty-0.0.43-py3-none-win32.whl", hash = "sha256:e4773115b0d6486ee30f1657fc8bdffe7e3a3f5300ab77ef2495da6e83e4694f", size = 10858724 }, + { url = "https://files.pythonhosted.org/packages/9f/29/5d80453e5f7c520145fa058851da87230dbd7ca761a7675447a9fe504e0b/ty-0.0.43-py3-none-win_amd64.whl", hash = "sha256:48d3545094a4ae6395492c7e6ac90550fce969e0ed2815fbf8c5da9756676b7d", size = 11976157 }, + { url = "https://files.pythonhosted.org/packages/dc/ed/befe5a543e5b95e754ed38ee95239e44efda9bc5f578db4ac1bc8dd758d6/ty-0.0.43-py3-none-win_arm64.whl", hash = "sha256:740ca33d7f75f655a4e7d475bc42dfb825c13219bb073fad30fcc04d35790c74", size = 11308680 }, +] + +[[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 = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611 }, +] + +[[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 = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087 }, +] + +[[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 = "xarray" +version = "2025.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739 }, +] + +[[package]] +name = "xarray" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326 }, +] + +[[package]] +name = "zict" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/ac/3c494dd7ec5122cff8252c1a209b282c0867af029f805ae9befd73ae37eb/zict-3.0.0.tar.gz", hash = "sha256:e321e263b6a97aafc0790c3cfb3c04656b7066e6738c37fffcca95d803c9fba5", size = 33238 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl", hash = "sha256:5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae", size = 43332 }, +] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238 }, +] diff --git a/pproc-runtime/LICENSE b/pproc-runtime/LICENSE index 74a60543..32d3e94a 100644 --- a/pproc-runtime/LICENSE +++ b/pproc-runtime/LICENSE @@ -198,4 +198,4 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file + limitations under the License. diff --git a/pproc-runtime/README.md b/pproc-runtime/README.md index 5703172b..42a976ec 100644 --- a/pproc-runtime/README.md +++ b/pproc-runtime/README.md @@ -1,3 +1,3 @@ # pproc-runtime -Contains functions required for execution of pproc entrypoints \ No newline at end of file +Contains functions required for execution of pproc entrypoints diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index fdd88298..0f8c74ab 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -7,45 +7,55 @@ # nor does it submit to any jurisdiction. [build-system] -requires = ["setuptools>=65", "setuptools_scm[toml]>=6.2"] build-backend = "setuptools.build_meta" +requires = [ "setuptools>=65", "setuptools-scm[toml]>=6.2" ] + [project] name = "pproc-runtime" description = "Runtime dependencies of PProc" +readme = "README.md" license = "Apache-2.0" -license-files = ["LICENSE"] +license-files = [ "LICENSE" ] authors = [ { name = "European Centre for Medium-Range Weather Forecasts (ECMWF)", email = "software.support@ecmwf.int" }, ] requires-python = ">=3.10" -readme = "README.md" +classifiers = [ + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", +] dynamic = [ "version" ] dependencies = [ - "earthkit-data[mars,fdb]", - "earthkit-meteo", - "thermofeel", - "code-meters", - "eccodes", - "mir-python", - "fdblibs", - "numpy", - "array_api_compat", + "array-api-compat", + "code-meters", + "earthkit-data[mars,fdb]", + "earthkit-meteo", + "eccodes", + "fdb5lib", + "mir-python", + "numpy", + "thermofeel", ] - -[project.optional-dependencies] -tests = ["pytest"] -lint = ["black", "isort", "flake8"] - -[tool.setuptools.packages.find] -where = ["src"] +[dependency-groups] +dev = [ + "prek>=0.4.4", + "pytest>=9.0.3", + "ty>=0.0.44", +] [tool.setuptools] include-package-data = true zip-safe = false +[tool.setuptools.packages.find] +where = [ "src" ] + [tool.setuptools_scm] write_to = "src/ppruntime/_version.py" write_to_template = '''# Do not change! Do not track in version control! @@ -53,14 +63,12 @@ __version__ = "{version}" ''' local_scheme = "no-local-version" -[tool.pytest.ini_options] -log_cli = true -log_cli_level = "DEBUG" -testpaths = ["tests/"] -addopts = "-n8" +[tool.ruff] +lint.ignore = [ "E722", "E731", "E741" ] [tool.isort] profile = "black" -[tool.ruff.lint] -ignore = ["E722", "E731", "E741"] +[tool.pytest.ini_options] +log_cli = true +testpaths = [ "tests/" ] diff --git a/pproc-runtime/src/ppruntime/io.py b/pproc-runtime/src/ppruntime/io.py index fd2ab5e2..46598058 100644 --- a/pproc-runtime/src/ppruntime/io.py +++ b/pproc-runtime/src/ppruntime/io.py @@ -9,11 +9,12 @@ import shutil from io import BytesIO +from typing import Optional import mir from earthkit.data import FieldList, settings from earthkit.data.readers.grib.metadata import StandAloneGribMetadata -from earthkit.data.sources import Source, from_source +from earthkit.data.sources import from_source from earthkit.data.sources.file import FileSource from earthkit.data.sources.stream import StreamSource from meters import ResourceMeter @@ -23,21 +24,12 @@ settings.set("cache-policy", "temporary") -def _source_from_location(loc, sources) -> tuple[str, list[dict]]: - type_, ident = split_location(loc, default="file") - requests = sources.get(type_, {}).get(ident, None) - assert ( - requests is not None - ), f"Not requests listed for location {loc} in sources {sources}" - if isinstance(requests, dict): - requests = [requests] - return type_, requests - - def mir_job( - input: mir.MultiDimensionalGribFileInput, mir_options: dict, cache: str = None -) -> Source: - job = mir.Job(**mir_options) + input: mir.MultiDimensionalGribFileInput, + mir_options: dict, + cache: Optional[str] = None, # type: ignore[ty:unresolved-attribute] +) -> FieldList: + job = mir.Job(**mir_options) # type: ignore[ty:unresolved-attribute] stream = BytesIO() job.execute(input, stream) stream.seek(0) @@ -49,40 +41,41 @@ def mir_job( return FileSource(cache).mutate() -def fdb_retrieve(request: dict, *, stream: bool = True) -> Source: +def fdb_retrieve(request: dict, *, stream: bool = True) -> FieldList: mir_options = request.pop("interpolate", None) if mir_options is None: - return from_source("fdb", request, read_all=True, stream=stream) + return from_source("fdb", request, read_all=True, stream=stream) # type: ignore[ty:invalid-return-type] - reader = from_source("fdb", request, stream=stream) + if mir_options.get("vod2uv", "0") == "1": + stream = False + + reader: FieldList = from_source("fdb", request, stream=stream) # type: ignore[ty:invalid-assignment] if stream: - if mir_options.get("vod2uv", "0") == "1": - raise ValueError("Wind vod2uv not supported for stream=True") - return mir_job(reader._source._stream, mir_options) + return mir_job(reader._source._stream, mir_options) # type: ignore[ty:unresolved-attribute] if mir_options.get("vod2uv", "0") == "1": if len(request["param"]) != 2: raise ValueError("Wind vod2uv requires two parameters") - inp = mir.MultiDimensionalGribFileInput(reader.path, 2) + inp = mir.MultiDimensionalGribFileInput(reader.path, 2) # type: ignore[ty:unresolved-attribute] else: - inp = mir.GribFileInput(reader.path) + inp = mir.GribFileInput(reader.path) # type: ignore[ty:unresolved-attribute] return mir_job(inp, mir_options) -def mars_retrieve(request: dict) -> Source: +def mars_retrieve(request: dict) -> FieldList: mir_options = request.pop("interpolate", None) cache = request.pop("cache", None) cache_path = None if cache is None else cache.format_map(request) - ds = from_source("mars", request) + ds: FieldList = from_source("mars", request) # type: ignore[ty:invalid-assignment] if mir_options is None: return ds if mir_options.get("vod2uv", "0") == "1": if len(request["param"]) != 2: raise ValueError("Wind vod2uv requires two parameters") - inp = mir.MultiDimensionalGribFileInput(ds.path, 2) + inp = mir.MultiDimensionalGribFileInput(ds.path, 2) # type: ignore[ty:unresolved-attribute] else: - inp = mir.GribFileInput(ds.path) + inp = mir.GribFileInput(ds.path) # type: ignore[ty:unresolved-attribute] return mir_job(inp, mir_options, cache_path) @@ -109,12 +102,12 @@ def _transform_request(request: dict, step_type: type = str): return request -def file_retrieve(path: str, request: dict) -> Source: +def file_retrieve(path: str, request: dict) -> FieldList: mir_options = request.pop("interpolate", None) if mir_options is not None: raise NotImplementedError() location = path.format_map(request) - file_ds = from_source("file", location) + file_ds: FieldList = from_source("file", location) # type: ignore[ty:invalid-assignment] if len(request) > 0: treq = _transform_request(request) ds = file_ds.sel(treq) @@ -149,7 +142,7 @@ def retrieve_single_source(request: dict, **kwargs) -> FieldList: ret_sources = mars_retrieve(req) elif source == "fileset": path = req.pop("location") - ret_sources = file_retrieve(path, req) + ret_sources = file_retrieve(path, req).order_by("paramId") else: raise NotImplementedError(f"Source {source} not supported.") assert len(ret_sources) > 0, f"No data retrieved from {source} for request {req}" @@ -168,8 +161,9 @@ def retrieve(request: dict | list[dict], **kwargs): ) return ret + def write(data: FieldList, target: dict) -> dict: if target["name"] == "null": return target data.to_target(**target) - return target \ No newline at end of file + return target diff --git a/pproc-runtime/src/ppruntime/metatdata.py b/pproc-runtime/src/ppruntime/metadata.py similarity index 86% rename from pproc-runtime/src/ppruntime/metatdata.py rename to pproc-runtime/src/ppruntime/metadata.py index d312bc86..35d75772 100644 --- a/pproc-runtime/src/ppruntime/metatdata.py +++ b/pproc-runtime/src/ppruntime/metadata.py @@ -7,10 +7,14 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Any +from typing import Any, Optional + from earthkit.data import FieldList -from pproc.prob.parallel import threshold_grib_headers + + +def resolve_metadata(metadata: Optional[dict]) -> dict: + return metadata if metadata is not None else {} def window(operation: str, coords: list[Any], include_init: bool) -> dict: @@ -145,33 +149,8 @@ def sot(ens: FieldList, clim: FieldList, metadata: dict, number: int) -> dict: return ret -def threshold( - edition: int, comparison: str, threshold: float, local_scale_factor: int | None -) -> dict: - threshold_config = { - "value": float(threshold), - "comparison": comparison, - "out_paramid": 0, - } - if local_scale_factor: - threshold_config["local_scale_factor"] = local_scale_factor - ret = threshold_grib_headers( - edition, - threshold_config, - ) - ret.pop("paramId") - return ret - - -def anomaly_clim(clim: FieldList) -> dict: - """ - Get required information from climatology metadata. Note, - only required for GRIB edition 2 threshold probability products - """ - return { - key: clim.metadata()[0].get(key) - for key in ["climateDateFrom", "climateDateTo", "referenceDate"] - } +def extract(fields: FieldList, keys: list[str]) -> dict: + return {key: fields.metadata()[0].get(key) for key in keys} def quantiles( diff --git a/pproc-runtime/src/ppruntime/stats.py b/pproc-runtime/src/ppruntime/stats.py index 0a4de6a4..bf69fad5 100644 --- a/pproc-runtime/src/ppruntime/stats.py +++ b/pproc-runtime/src/ppruntime/stats.py @@ -7,38 +7,92 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. +import logging +from typing import Optional, Literal import array_api_compat -import earthkit.meteo.solar from earthkit.data import FieldList +from earthkit.data.core.metadata import Metadata as ekdMetadata from earthkit.meteo.extreme import array as extreme from earthkit.meteo.stats import array as stats -from earthkit.workflows.backends.earthkit import ( - Metadata, - comp_str2func, - new_fieldlist, - resolve_metadata, -) from meters import metered -from ppruntime import metadata +from ppruntime.metadata import resolve_metadata +from ppruntime import metadata as ppmetadata logger = logging.getLogger(__name__) -@metered("threshold", out=logger.debug) -def threshold( +Comparisons = Literal["<", ">", "<=", ">=", "==", "!="] + + +def standardise_output(data): + # Also, nest the data to avoid problems with not finding geography attribute + if len(data.shape) == 1: + data = data.reshape((1, *data.shape)) + assert len(data.shape) == 2 + return data + + +def comp_str2func(array_module, comparison: str): + if comparison == "<=": + return array_module.less_equal + if comparison == "<": + return array_module.less + if comparison == ">=": + return array_module.greater_equal + return array_module.greater + + +def new_fieldlist(data, metadata: list[ekdMetadata], overrides: dict = {}): + if len(overrides) > 0: + try: + new_metadata = [ + metadata[x].override(overrides) for x in range(len(metadata)) + ] + return FieldList.from_array( + standardise_output(data), + new_metadata, + ) + except Exception as e: + print( + "Error setting metadata", + overrides, + "On data with:", + list(map(lambda x: x.dump(), metadata)), + ) + print(e) + return FieldList.from_array(standardise_output(data), metadata) + + +@metered("mask", out=logger.debug) +def mask( arr: FieldList, - threshold: dict, + lower_comparison: Comparisons, + lower_value: float, + upper_comparison: Optional[Comparisons] = None, + upper_value: Optional[float] = None, *, - metadata: Metadata = None, + metadata: Optional[dict] = None, ) -> FieldList: xp = array_api_compat.array_namespace(arr.values) # Find all locations where nan appears as an ensemble value is_nan = xp.isnan(arr.values) - thesh = comp_str2func(xp, comparison)(arr.values, value) - res = xp.where(is_nan, xp.nan, thesh) - return new_fieldlist(res, arr.metadata(), resolve_metadata(metadata, arr)) + thresh = comp_str2func(xp, lower_comparison)(arr.values, lower_value) + if upper_comparison is not None: + thresh = thresh & comp_str2func(xp, upper_comparison)(arr.values, upper_value) + res = xp.where(is_nan, xp.nan, thresh) + return new_fieldlist(res, arr.metadata(), resolve_metadata(metadata)) + + +def logical_and( + arr1: FieldList, + arr2: FieldList, +) -> FieldList: + xp = array_api_compat.array_namespace(arr1.values, arr2.values) + is_nan = xp.isnan(arr1.values) | xp.isnan(arr2.values) + res = xp.where(is_nan, xp.nan, arr1.values & arr2.values) + return new_fieldlist(res, arr1.metadata()) @metered("efi", out=logger.debug) @@ -47,14 +101,14 @@ def efi( ens: FieldList, eps: float, *, - metadata: Metadata = None, + metadata: Optional[dict] = None, ) -> FieldList: res = extreme.efi(clim.values, ens.values, eps) - resolved_metadata = resolve_metadata(metadata, clim, ens) + resolved_metadata = resolve_metadata(metadata) return new_fieldlist( res, [ens[0].metadata()], - {**resolved_metadata, **grib.efi(clim, ens, resolved_metadata)}, + {**resolved_metadata, **ppmetadata.efi(clim, ens, resolved_metadata)}, ) @@ -65,32 +119,36 @@ def sot( number: int, eps: float, *, - metadata: Metadata = None, + metadata: Optional[dict] = None, ) -> FieldList: res = extreme.sot(clim.values, ens.values, number, eps) - resolved_metadata = resolve_metadata(metadata, clim, ens) + resolved_metadata = resolve_metadata(metadata) return new_fieldlist( res, [ens[0].metadata()], { **resolved_metadata, - **grib.sot(clim, ens, resolved_metadata, number), + **ppmetadata.sot(clim, ens, resolved_metadata, number), }, ) @metered("quantiles", out=logger.debug) def quantiles( - ens: FieldList, q_number: int, total_number: int, *, metadata: Metadata = None + ens: FieldList, + q_number: int, + total_number: int, + *, + metadata: Optional[dict] = None, ) -> FieldList: quantile = q_number / total_number res = list(stats.iter_quantiles(ens.values, [quantile], method="numpy"))[0] - resolved_metadata = resolve_metadata(metadata, ens) + resolved_metadata = resolve_metadata(metadata) return new_fieldlist( res, [ens[0].metadata()], { **resolved_metadata, - **grib.quantiles(ens, resolved_metadata, q_number, total_number), + **ppmetadata.quantiles(ens, resolved_metadata, q_number, total_number), }, ) diff --git a/pproc-runtime/src/ppruntime/thermal_indices.py b/pproc-runtime/src/ppruntime/thermal_indices.py index 21524db2..80dc1bcd 100644 --- a/pproc-runtime/src/ppruntime/thermal_indices.py +++ b/pproc-runtime/src/ppruntime/thermal_indices.py @@ -1,25 +1,37 @@ from earthkit.data import FieldList +from earthkit.data.core.metadata import Metadata as ekMetadata import earthkit.meteo.solar import thermofeel from meters import metered +import numpy as np +import logging +from datetime import timedelta +from typing import Optional -from earthkit.workflows.backends.earthkit import Metadata, resolve_metadata from ppruntime.thermo.helpers import ( compute_ehPa, find_utci_missing_values, get_datetime, latlon, step_interval, - units, validate_utci, create_output, create_surface_output, ) +from ppruntime.metadata import resolve_metadata logger = logging.getLogger(__name__) -def field_values(fields: earthkit.data.FieldList, params: list[str]): +def metadata_intensity(fields: FieldList) -> list[ekMetadata]: + return fields.sel(param="2t").metadata() + + +def metadata_accumulation(fields: FieldList) -> list[ekMetadata]: + return fields.sel(param="fdir").metadata() + + +def field_values(fields: FieldList, params: list[str]): shape = None out_values = [] for param in params: @@ -38,13 +50,13 @@ def field_values(fields: earthkit.data.FieldList, params: list[str]): @metered("cossza", out=logger.debug) -def calc_cossza(*fields: FieldList, metadata: Metadata = None) -> FieldList: - fields = sum(fields[1:], fields[0]) - lats, lons = latlon(fields) +def calc_cossza(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: + summed_fields: FieldList = sum(fields[1:], fields[0]) + lats, lons = latlon(summed_fields) - basetime, validtime = get_datetime(fields) + basetime, validtime = get_datetime(summed_fields) - delta = step_interval(fields) + delta = step_interval(summed_fields) dtbegin = validtime - timedelta(hours=delta) dtend = validtime @@ -59,67 +71,67 @@ def calc_cossza(*fields: FieldList, metadata: Metadata = None) -> FieldList: return create_output( cossza, - metadata_intensity(fields)[:1], + metadata_intensity(summed_fields)[:1], {**resolve_metadata(metadata), "paramId": "214001"}, ) @metered("hmdx", out=logger.debug) -def calc_hmdx(*fields: FieldList, metadata: Metadata = None) -> FieldList: - fields = sum(fields[1:], fields[0]) - inputs = field_values(fields, ["2t", "2d"]) +def calc_hmdx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["2t", "2d"]) hmdx = thermofeel.calculate_humidex(*inputs) return create_surface_output( hmdx, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "261016"}, ) @metered("rhp", out=logger.debug) -def calc_rhp(*fields: FieldList, metadata: Metadata = None) -> FieldList: - fields = sum(fields[1:], fields[0]) - inputs = field_values(fields, ["2t", "2d"]) +def calc_rhp(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["2t", "2d"]) rhp = thermofeel.calculate_relative_humidity_percent(*inputs) return create_surface_output( rhp, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "260242"}, ) @metered("heatx", out=logger.debug) -def calc_heatx(*fields: FieldList, metadata: Metadata = None) -> FieldList: - fields = sum(fields[1:], fields[0]) - inputs = field_values(fields, ["2t", "2d"]) +def calc_heatx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["2t", "2d"]) heatx = thermofeel.calculate_heat_index_adjusted(*inputs) return create_surface_output( heatx, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "260004"}, ) @metered("dsrp", out=logger.debug) -def calc_dsrp(*fields: FieldList, metadata: Metadata = None): +def calc_dsrp(*fields: FieldList, metadata: Optional[dict] = None): """ In the absence of dsrp, approximate it with fdir and cossza. Note this introduces some amount of error as cossza approaches zero """ - fields = sum(fields[1:], fields[0]) - inputs = field_values(fields, ["fdir", "cossza"]) + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["fdir", "cossza"]) dsrp = thermofeel.approximate_dsrp(*inputs) return create_output( dsrp, - metadata_accumulation(fields), + metadata_accumulation(summed_fields), {**resolve_metadata(metadata), "paramId": "47"}, ) @metered("utci", out=logger.debug) -def calc_utci(*fields: FieldList, metadata: Metadata = None, validate=True): - fields = sum(fields[1:], fields[0]) - inputs = field_values(fields, ["2t", "2d", "10si", "mrt"]) +def calc_utci(*fields: FieldList, metadata: Optional[dict] = None, validate=True): + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["2t", "2d", "10si", "mrt"]) ehPa = compute_ehPa(inputs[0], inputs[1]) utci = thermofeel.calculate_utci( @@ -136,101 +148,99 @@ def calc_utci(*fields: FieldList, metadata: Metadata = None, validate=True): ) if validate: - lats, lons = latlon(fields) + lats, lons = latlon(summed_fields) validate_utci(utci[index], missing, lats, lons) utci[index][missing] = np.nan return create_surface_output( utci, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "261001"}, ) @metered("wbgt", out=logger.debug) -def calc_wbgt(*fields: FieldList, metadata: Metadata = None): - fields = sum(fields[1:], fields[0]) - inputs = field_values(fields, ["2t", "mrt", "10si", "2d"]) +def calc_wbgt(*fields: FieldList, metadata: Optional[dict] = None): + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["2t", "mrt", "10si", "2d"]) wbgt = thermofeel.calculate_wbgt(*inputs) return create_surface_output( wbgt, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "261014"}, ) @metered("gt", out=logger.debug) -def calc_gt(*fields: FieldList, metadata: Metadata = None): - fields = sum(fields[1:], fields[0]) - inputs = field_values(fields, ["2t", "mrt", "10si"]) +def calc_gt(*fields: FieldList, metadata: Optional[dict] = None): + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["2t", "mrt", "10si"]) gt = thermofeel.calculate_bgt(*inputs) return create_surface_output( gt, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "261015"}, ) @metered("wbt", out=logger.debug) -def calc_wbt(*fields: FieldList, metadata: Metadata = None): - fields = sum(fields[1:], fields[0]) - inputs = field_values(fields, ["2t", "2r"]) +def calc_wbt(*fields: FieldList, metadata: Optional[dict] = None): + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["2t", "2r"]) wbt = thermofeel.calculate_wbt(*inputs) return create_surface_output( wbt, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "261023"}, ) @metered("nefft", out=logger.debug) -def calc_nefft(*fields: FieldList, metadata: Metadata = None): - fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["2t", "10si", "2r"]) - inputs = field_values(fields, ["2t", "10si", "2r"]) +def calc_nefft(*fields: FieldList, metadata: Optional[dict] = None): + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["2t", "10si", "2r"]) nefft = thermofeel.calculate_normal_effective_temperature(*inputs) return create_surface_output( nefft, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "261018"}, ) @metered("wcf", out=logger.debug) -def calc_wcf(*fields: FieldList, metadata: Metadata = None): - fields = sum(fields[1:], fields[0]) - _check_shape(fields, ["2t", "10si"]) - inputs = field_values(fields, ["2t", "10si"]) +def calc_wcf(*fields: FieldList, metadata: Optional[dict] = None): + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["2t", "10si"]) wcf = thermofeel.calculate_wind_chill(*inputs) return create_surface_output( wcf, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "260005"}, ) @metered("aptmp", out=logger.debug) -def calc_aptmp(*fields: FieldList, metadata: Metadata = None): - fields = sum(fields[1:], fields[0]) - inputs = field_values(fields, ["2t", "10si", "2r"]) +def calc_aptmp(*fields: FieldList, metadata: Optional[dict] = None): + summed_fields: FieldList = sum(fields[1:], fields[0]) + inputs = field_values(summed_fields, ["2t", "10si", "2r"]) aptmp = thermofeel.calculate_apparent_temperature(*inputs) return create_surface_output( aptmp, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "260255"}, ) @metered("mrt", out=logger.debug) -def calc_mrt(*fields: FieldList, metadata: Metadata = None): - fields = sum(fields[1:], fields[0]) +def calc_mrt(*fields: FieldList, metadata: Optional[dict] = None): + summed_fields: FieldList = sum(fields[1:], fields[0]) ssrd, ssr, dsrp, strd, fdir, strr, cossza = field_values( - fields, ["ssrd", "ssr", "dsrp", "strd", "fdir", "str", "cossza"] + summed_fields, ["ssrd", "ssr", "dsrp", "strd", "fdir", "str", "cossza"] ) - delta = step_interval(fields) + delta = step_interval(summed_fields) seconds_in_time_step = delta * 3600 # steps are in hours f = 1.0 / float(seconds_in_time_step) @@ -245,6 +255,6 @@ def calc_mrt(*fields: FieldList, metadata: Metadata = None): return create_surface_output( mrt, - metadata_intensity(fields), + metadata_intensity(summed_fields), {**resolve_metadata(metadata), "paramId": "261002"}, ) diff --git a/pproc-runtime/src/ppruntime/thermo/__init__.py b/pproc-runtime/src/ppruntime/thermo/__init__.py index 6d947223..64e1349e 100644 --- a/pproc-runtime/src/ppruntime/thermo/__init__.py +++ b/pproc-runtime/src/ppruntime/thermo/__init__.py @@ -6,4 +6,3 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. - diff --git a/pproc-runtime/src/ppruntime/thermo/helpers.py b/pproc-runtime/src/ppruntime/thermo/helpers.py index d39b563d..d15a1c3e 100644 --- a/pproc-runtime/src/ppruntime/thermo/helpers.py +++ b/pproc-runtime/src/ppruntime/thermo/helpers.py @@ -8,12 +8,11 @@ # nor does it submit to any jurisdiction. import earthkit.data -from earthkit.data.encoders import grib +from earthkit.data.core.metadata import Metadata import logging import numpy as np import thermofeel from meters import metered -from typing import Optional logger = logging.getLogger(__name__) @@ -103,7 +102,6 @@ def find_utci_missing_values(t2m, va, mrt, ehPa, utci, print_misses=True): def validate_utci(utci, misses, lats, lons): - out_of_bounds = 0 nans = 0 for i in range(len(utci)): @@ -128,7 +126,9 @@ def get_datetime(fields: earthkit.data.FieldList): valid_time = dt["valid_time"] assert all( x == valid_time for x in fields.datetime()["valid_time"] - ), f"Obtained different valid times {[x for x in fields.datetime()['valid_time']]}" # verify valid time all same + ), ( + f"Obtained different valid times {[x for x in fields.datetime()['valid_time']]}" + ) # verify valid time all same return base_time, valid_time @@ -173,12 +173,12 @@ def step_interval(fields) -> int: return delta -def create_output(values: np.ndarray, template: earthkit.data.Metadata, metadata: dict): - template = [x.override(**metadata) for x in template] - return earthkit.data.FieldList.from_array(values, template) +def create_output(values: np.ndarray, template: list[Metadata], metadata: dict): + template = [x.override(**metadata) for x in template] + return earthkit.data.FieldList.from_array(values, template) -def create_surface_output(values: np.ndarray, template: earthkit.data.Metadata, metadata: dict): +def create_surface_output(values: np.ndarray, template: list[Metadata], metadata: dict): template = [x.override(**metadata) for x in template] template = [ x.override( @@ -189,4 +189,4 @@ def create_surface_output(values: np.ndarray, template: earthkit.data.Metadata, ) for x in template ] - return earthkit.data.FieldList.from_array(values, template) \ No newline at end of file + return earthkit.data.FieldList.from_array(values, template) diff --git a/pproc-runtime/tests/test_io.py b/pproc-runtime/tests/test_io.py index e9d5cc8a..97c22d99 100644 --- a/pproc-runtime/tests/test_io.py +++ b/pproc-runtime/tests/test_io.py @@ -7,6 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. +import os from datetime import datetime, timedelta import pytest @@ -16,18 +17,21 @@ request = { "class": "od", "expver": "0001", - "stream": "enfo", - "type": "cf", + "stream": "oper", + "type": "fc", "date": (datetime.today() - timedelta(days=1)).strftime("%Y%m%d"), "time": "12", "domain": "g", "levtype": "sfc", "step": "12", "param": 228, - "source": "mars", } +@pytest.mark.parametrize( + "source", + ["mars", "fdb"], +) @pytest.mark.parametrize( "overrides", [ @@ -42,13 +46,9 @@ ], ids=["default", "interpolate", "wind"], ) -def test_retrieve(overrides): +def test_retrieve(source, overrides): + os.environ["FDB_HOME"] = "/home/fdbprod" test_request = request.copy() + test_request["source"] = source test_request.update(overrides) retrieve(test_request) - - -def test_retrieve_multi(): - fdb_request = request.copy() - fdb_request["source"] = "fdb" - retrieve([request, fdb_request]) diff --git a/pproc-runtime/uv.lock b/pproc-runtime/uv.lock new file mode 100644 index 00000000..2205c46a --- /dev/null +++ b/pproc-runtime/uv.lock @@ -0,0 +1,2394 @@ +version = 1 +requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] + +[options] +prerelease-mode = "allow" + +[[package]] +name = "array-api-compat" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/89/e5/9a12dd1c2b0ad61f3c3ad0fc14b888c65fd735dd9d26805f77317303cbe5/array_api_compat-1.14.0.tar.gz", hash = "sha256:c819ba707f5c507800cb545f7e6348ff1ecc46538381d9ad9b371ffc9cd6d784", size = 106369 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/d3/54cd560804a8c2b898824778e86c13c2a14600bc83532a9c4f69f2f469c3/array_api_compat-1.14.0-py3-none-any.whl", hash = "sha256:ed5af1f9b6595a199c942505f281ec994892556b6efc24679a0501e87a7d6279", size = 60124 }, +] + +[[package]] +name = "atlaslib-ecmwf" +version = "0.45.1.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/c0/c0718bd50c0650923fc3ebac9e04d2bf00365791762e6d3a4e5e60cf18bc/atlaslib_ecmwf-0.45.1.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:e9db775dadcfa7e8cfb34881ff4853327b7c81605ed5b143f74eda7b97ce3f53", size = 5198658 }, + { url = "https://files.pythonhosted.org/packages/06/2c/c96932c9897fa19752079e69cd3706a53fa31711536a2f7d079935374a57/atlaslib_ecmwf-0.45.1.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:e73d7e27d02787bb6cf6c1d53455dc4b3e0c437a717cbf14133c8b9d17ce62d6", size = 5792122 }, + { url = "https://files.pythonhosted.org/packages/a1/77/e64617b68177c4b495777f875a84133ec9e9f199df181685706319f53aa6/atlaslib_ecmwf-0.45.1.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:cd9141bd2a9e1d2d00f689434082ef2bd8ec04e46db63e1ccf5334851142261d", size = 6063038 }, + { url = "https://files.pythonhosted.org/packages/1a/73/c312fed6bbe01810663a5157450506fe381086f94508b2e773d64623e585/atlaslib_ecmwf-0.45.1.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3f4f93eb6cb7539f56a3dbee828a105ac5c9f09f047059de29a31128f4afd725", size = 6424318 }, + { url = "https://files.pythonhosted.org/packages/71/5e/6fb2974d89cbafbf3240cd24c4fec55bef89739d8c385d39a0d6ac435284/atlaslib_ecmwf-0.45.1.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:a6cbece7665a66145531c1c4a7ef416fd5e4adc0c5a97a5330c4063e7b7c95c7", size = 5198654 }, + { url = "https://files.pythonhosted.org/packages/7f/c0/7e9ec1233549467a933c72134b5fef3159f6bbc3334b0227185eed6b0c74/atlaslib_ecmwf-0.45.1.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:0100478c5ad41363bebc90ea46b01f902c22396028239afd8a49ebe9757f4919", size = 5792119 }, + { url = "https://files.pythonhosted.org/packages/50/fa/9529117cafef15fca392343cece4ae10d5cf6b5571a3a6e8f019f6b13f53/atlaslib_ecmwf-0.45.1.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5bc3dc754ceb4105a83d6f0169b2d16b5832429123a6cb4ce4961d85d1129dc8", size = 6063037 }, + { url = "https://files.pythonhosted.org/packages/1e/fe/ce87bc76504ca395bbddb95510ec8b16974afac8d42f9ea99a4b804d8a7f/atlaslib_ecmwf-0.45.1.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d74f7594619bbb6c53cdd4d1130f5365e7b41532f17b2e8c45fafbf69e6a57d0", size = 6424321 }, + { url = "https://files.pythonhosted.org/packages/18/0a/afff44b21966024da4323e48ef40845aea23bf729b976dfcce6bf483bb04/atlaslib_ecmwf-0.45.1.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:c28b9d0447d4daf96e5454ff277ea3c7183889957fe5f60b8916047b8f71e98a", size = 5198654 }, + { url = "https://files.pythonhosted.org/packages/e3/a4/c8330b3a81912c69b7f6fc76a6eb4d133af08d379f1ae5e01aa3ef3f3176/atlaslib_ecmwf-0.45.1.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:210f217290b14f9b0298c41111addbc249e0e1ff20171157bc1be584ddf138af", size = 5792117 }, + { url = "https://files.pythonhosted.org/packages/bb/36/86230628fff1a20e09fbb8a48a407adacdb37a9cbf708ecce4f33f820f51/atlaslib_ecmwf-0.45.1.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:7429ab727e50e492969be401cb3ab586ca5c42e65f1edc3d050ff67ee0b3826b", size = 6063036 }, + { url = "https://files.pythonhosted.org/packages/25/f3/e12daa9d06debc21e5122c13cde53423bca56d5806b70c51c40fe1c24781/atlaslib_ecmwf-0.45.1.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:89bd1ea173ec2c5c6aea86a9e028f8498d97b8c8ab155480d9d62c4c62816c10", size = 6424310 }, + { url = "https://files.pythonhosted.org/packages/1e/0d/c7e6c8e74114b64c7fec4bae3b181d2052372ba3ca55aea124c8aa5e67cd/atlaslib_ecmwf-0.45.1.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:bcbc89ffa87b5e08ee4490e2c9e76579084529950336f5bcfaa0bba2bdfb4557", size = 5198658 }, + { url = "https://files.pythonhosted.org/packages/c5/c0/133bf6918fb34bf2aacfe6068288875ce4464dd08e5711b0003b7644fc19/atlaslib_ecmwf-0.45.1.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:5085edd09287b8715bc7e1f6fb7eb4f28d69fc83259e703ac2ffbd6119af5680", size = 5792127 }, + { url = "https://files.pythonhosted.org/packages/fa/ea/0180a21a787abeb727591a2474d9d4d8bc30528d1921e5034f0f18cb4205/atlaslib_ecmwf-0.45.1.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:baba35a31912f07fe6dfa904842be7cc80876198ff6061f8342d0ce4b474a58b", size = 6063026 }, + { url = "https://files.pythonhosted.org/packages/a4/9b/32f96724b45d0d3edc8f667d8d0126e0064d766f9a8f3399badf428d9e34/atlaslib_ecmwf-0.45.1.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1ba1091758f1c6a02104f4aac4a7925ac9d9024d82ed3d3d02a708d155d73b54", size = 6424320 }, + { url = "https://files.pythonhosted.org/packages/36/bb/e5a93db079eb285a46e5ac18afd93f96296e91b235ea189623a8b75f704c/atlaslib_ecmwf-0.45.1.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:2d5e1cab38fa02f56efde302886ac5f52ad935666a5c79559d902b8d49aff1d8", size = 5198658 }, + { url = "https://files.pythonhosted.org/packages/37/0a/d4308d7d9c8f79d1adb09129f834c9578febe6ee1e4115ad2ec3eebb28b0/atlaslib_ecmwf-0.45.1.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:a174e1f1f0668fa73018218cd4f4ce14c13c098192bf8b4f8eba6fec21d55aac", size = 5792121 }, + { url = "https://files.pythonhosted.org/packages/ec/fe/f1370b316efe0c474fab34cf0b8c1414678ed266c963fa997398527da913/atlaslib_ecmwf-0.45.1.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:f4b1e2b5d633b7c2dcf12a72ddbeb63e22bb89bfceea9e6302759d1938f897a1", size = 6063037 }, + { url = "https://files.pythonhosted.org/packages/7d/99/c24f8aa004d76a54b022060ef2aad92e9ffa59b0ba21a5e006db68c00e9d/atlaslib_ecmwf-0.45.1.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:6db5bf80d9a6d0f692dc6545fb1db27e06efc4eb7078b16a3cb8bb93bfdff349", size = 6424322 }, +] + +[[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 = "certifi" +version = "2026.5.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134 }, +] + +[[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/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283 }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504 }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811 }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402 }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217 }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079 }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475 }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829 }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211 }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036 }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184 }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790 }, + { 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/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, +] + +[[package]] +name = "cfgrib" +version = "0.9.15.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "click" }, + { name = "eccodes" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123 }, +] + +[[package]] +name = "cftime" +version = "1.6.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/45/dcc38d7b293107d3e33b3d94b2619687eb414a4f16880e2e841cdb6ac49a/cftime-1.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ad81e8cb0eb873b33c3d1e22c6168163fdc64daa8f7aeb4da8092f272575f4d", size = 510221 }, + { url = "https://files.pythonhosted.org/packages/68/63/2875341516fcfe80f1a16f86b420aec9441223ab5381d554441c9fdae56e/cftime-1.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12d95c6af852114a13301c5a61e41afdbd1542e72939c1083796f8418b9b8b0e", size = 490684 }, + { url = "https://files.pythonhosted.org/packages/80/7f/85f2c4c7ae8300b7871af7d7d144ad06f71dc0dd6258f0d18fd966067d1b/cftime-1.6.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2659b7df700e27d9e3671f686ce474dfb5fc274966961edf996acc148dfa094a", size = 1592268 }, + { url = "https://files.pythonhosted.org/packages/6c/9a/72dbd72498e958edf41a770bbd05e68141774325a945092059f4eb9c653d/cftime-1.6.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:94cebdfcda6a985b8e69aed22d00d6b8aa1f421495adbdcff1d59b3e896d81e2", size = 1624716 }, + { url = "https://files.pythonhosted.org/packages/bc/9e/2c4c720ad8bbe87994ca62a0e3c09d3786b984af664a91a6f3a668aa0b13/cftime-1.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:179681b023349a2fe277ceccc89d4fc52c0dd105cb59b7187b5bc5d442875133", size = 1705927 }, + { url = "https://files.pythonhosted.org/packages/da/77/66484061dee5fbcb2fdcfa6a491d4efb880725117f4a339d20a5323105df/cftime-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:d8b9fdecb466879cfe8ca4472b229b6f8d0bb65e4ffd44266ae17484bac2cf38", size = 472435 }, + { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733 }, + { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946 }, + { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856 }, + { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573 }, + { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563 }, + { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631 }, + { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383 }, + { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175 }, + { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980 }, + { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166 }, + { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614 }, + { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090 }, + { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840 }, + { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534 }, + { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453 }, + { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541 }, + { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014 }, + { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625 }, + { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269 }, + { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364 }, + { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468 }, + { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725 }, + { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445 }, + { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434 }, + { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812 }, + { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768 }, + { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818 }, + { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862 }, + { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781 }, + { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218 }, + { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932 }, + { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894 }, + { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027 }, + { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065 }, +] + +[[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/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182 }, + { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329 }, + { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230 }, + { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890 }, + { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930 }, + { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109 }, + { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684 }, + { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785 }, + { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055 }, + { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502 }, + { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295 }, + { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145 }, + { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884 }, + { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343 }, + { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174 }, + { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805 }, + { 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/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328 }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061 }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031 }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239 }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589 }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733 }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652 }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229 }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552 }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806 }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316 }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274 }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468 }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460 }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330 }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828 }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627 }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008 }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303 }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282 }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595 }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986 }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711 }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036 }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998 }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056 }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537 }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176 }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723 }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085 }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819 }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915 }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234 }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042 }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706 }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727 }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882 }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860 }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564 }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276 }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238 }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189 }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352 }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024 }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869 }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541 }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634 }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384 }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133 }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257 }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851 }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393 }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251 }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609 }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014 }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979 }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238 }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110 }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824 }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103 }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194 }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827 }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168 }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018 }, + { 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.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639 }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228 }, +] + +[[package]] +name = "code-meters" +version = "0.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801 }, +] + +[[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 = "dask" +version = "2026.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "cloudpickle" }, + { name = "fsspec" }, + { name = "importlib-metadata", marker = "python_full_version < '3.12'" }, + { name = "packaging" }, + { name = "partd" }, + { name = "pyyaml" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/2a/5d8cc1579590af86576dde890254440e478c7174b93a02095ecfc2e6ba38/dask-2026.3.0.tar.gz", hash = "sha256:f7d96c8274e8a900d217c1ff6ea8d1bbf0b4c2c21e74a409644498d925eb8f85", size = 11000710 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630 }, +] + +[[package]] +name = "deprecation" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, +] + +[[package]] +name = "earthkit-data" +version = "0.19.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgrib" }, + { name = "dask" }, + { name = "deprecation" }, + { name = "earthkit-meteo" }, + { name = "earthkit-utils" }, + { name = "eccodes" }, + { name = "entrypoints" }, + { name = "filelock" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "lru-dict" }, + { name = "markdown" }, + { name = "multiurl" }, + { name = "netcdf4", version = "1.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and platform_machine != 'ARM64') or (python_full_version >= '3.14' and sys_platform != 'win32') or (platform_machine == 'ARM64' and sys_platform == 'win32')" }, + { name = "netcdf4", version = "1.7.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and platform_machine != 'ARM64') or (python_full_version < '3.14' and sys_platform != 'win32')" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, + { name = "pdbufr" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/5a/8bb64690a3e920a39ec45c031dde104a3de0ebb86c24376e98cf332ecb9a/earthkit_data-0.19.0.tar.gz", hash = "sha256:2dedfc97a207b28c752ba0ed754313485b46adc40d244062504efb808267c58a", size = 5653925 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/b7/e6b466edd0438b9e3d875a98d0aeb2cdf89acbfd4eaaf5906d2456341e2c/earthkit_data-0.19.0-py3-none-any.whl", hash = "sha256:3697238beeeec94209ecb86ac133bdd6c3f66dad734955edd3c0fd07bc5875e1", size = 396017 }, +] + +[package.optional-dependencies] +fdb = [ + { name = "pyfdb" }, +] +mars = [ + { name = "ecmwf-api-client" }, +] + +[[package]] +name = "earthkit-meteo" +version = "1.0.0rc1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecation" }, + { name = "earthkit-utils" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/b7/cd2e4ad0b4cde4882c975e46e9c9137479f065a6048088b043bd7d8b2f0b/earthkit_meteo-1.0.0rc1.tar.gz", hash = "sha256:ff35895a7cf7b08cb62ebc6a5615daa23663018e598e4dfec42b0786eceee13d", size = 563291 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/74/b7/7a8f21ecf6a05e60ca42f9137b6fecbe18e754ef7ae0a9a56c0cccd3ca91/earthkit_meteo-1.0.0rc1-py3-none-any.whl", hash = "sha256:c3bfda41be59601fa983caab42a926f40401114f064a82b16838c3a9081f734f", size = 143491 }, +] + +[[package]] +name = "earthkit-utils" +version = "1.0.0rc2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "array-api-compat" }, + { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/92/34/3990e052aedf76798dcf5748a9a0660bd15e318364342543b24205045c5c/earthkit_utils-1.0.0rc2.tar.gz", hash = "sha256:930f19e29116f0874d943f91b6a129ec9d1884453bfdd613b5de4765658c8379", size = 49127 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/7a/991138f45fda8ae689a9a370bbf59b4ee2e040dfd124196ce82d1862aef2/earthkit_utils-1.0.0rc2-py3-none-any.whl", hash = "sha256:b5cd40ebe7817fed55d5844a35347ea4d879181fedcb492e738b613c4afa1b24", size = 37699 }, +] + +[[package]] +name = "eccodes" +version = "2.47.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "cffi" }, + { name = "findlibs" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/fe/63f915171413efeaaa9d1ba613aeabdc3f8cdba603f72842a7fcb1b011ee/eccodes-2.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:3a7438b259188821a5b05e5dd814f83924936ff9fe0897f6a157506fcaea9baf", size = 7435926 }, + { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928 }, + { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009 }, + { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001 }, + { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567 }, +] + +[[package]] +name = "eccodeslib" +version = "2.46.1.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eckitlib" }, + { name = "fckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/92/5c0001645fad7c7b30e1d71d9db783ab41065810c65cef233cb2ee02e754/eccodeslib-2.46.1.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:81860e81b4de6aff48dae0a4ff6b3faf76ed9c6c17a8b4eeb23f36ef0af1a6be", size = 8564340 }, + { url = "https://files.pythonhosted.org/packages/c7/60/b9461620eec665aab7beb87c00163bc6030aed74630b26d1854293dcf96f/eccodeslib-2.46.1.14-cp310-cp310-macosx_26_0_arm64.whl", hash = "sha256:80b2e0de8c548200360e943770e063dc2af037851363d35b56eababb33d56b7d", size = 8786927 }, + { url = "https://files.pythonhosted.org/packages/ba/36/40128198732557ada92d80f6aca67df89f7060d3f35aacc70288c380aef9/eccodeslib-2.46.1.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:398a70f03331765cff5e218385c771eda135b00a2fb64d0455b8853b59ec2197", size = 9094950 }, + { url = "https://files.pythonhosted.org/packages/90/89/452090f106e36209c5b2389061601fd8d75063aad124a2ba7c0de9b732da/eccodeslib-2.46.1.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c15dae792c3eda2f0e34671843390ab73b2a79ecef42fbae0858ea12532db8df", size = 8988207 }, + { url = "https://files.pythonhosted.org/packages/76/88/96856412b80ea8c48ac4cbbf07804514d1ea07527c9174cb8111667a1044/eccodeslib-2.46.1.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:3d838b99ff56cc69c3d67d169a92eb9fdea5e5033b47834a74fb897b0cd2f625", size = 8566303 }, + { url = "https://files.pythonhosted.org/packages/df/5c/6365087881ab9a41ea877f4dd9fdcc793bbdda9f82ffc68d48e533acd140/eccodeslib-2.46.1.14-cp311-cp311-macosx_26_0_arm64.whl", hash = "sha256:e9c241cbb67e4f1ef892cf56b5f21e94118c6e52abcdfc94f25788d1e6afa4a2", size = 8786929 }, + { url = "https://files.pythonhosted.org/packages/1c/b9/b9444809638c21e597adf03fe518a98513d4c2e941e69ad6a19cfa619463/eccodeslib-2.46.1.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dcee0e76b5e0f4fde375bdd0081d348c2d5693e8ca5beb6b2b6c6e72df9a3188", size = 9094949 }, + { url = "https://files.pythonhosted.org/packages/29/15/c45fe0530091749f0b4d23934ece4a6aa0ec5ecb083134e7f2fbe74f5519/eccodeslib-2.46.1.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:488744413bfebf7fefb16e40fae329da0a3c8c463b10a8e52c4ceef68e154018", size = 8988206 }, + { url = "https://files.pythonhosted.org/packages/c2/86/27cc92c8aee5f831561848597055b3cd509137667d555f5bbbfaaa517104/eccodeslib-2.46.1.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:fa05fd52a3f9818f376a6e607fd4cb504243f5b2c94ae636f9dddd771037dca2", size = 8564335 }, + { url = "https://files.pythonhosted.org/packages/0d/56/5aed84d605b8e20a8253e7881a0dad42dc1ae7e808804677dd1146c8eb51/eccodeslib-2.46.1.14-cp312-cp312-macosx_26_0_arm64.whl", hash = "sha256:2ffacf76be77557ed21477bfdaf7a319994dd1134d153ab5e61c9cd6970e4b28", size = 8786929 }, + { url = "https://files.pythonhosted.org/packages/14/2a/2a0003b98f58fbd9b90b99fb3052a0e78c6e8ec568b28b413f658b78c745/eccodeslib-2.46.1.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:20da80375e2040fc13937dd7210844f6a7588f601a8abd90cdc236eb66da4338", size = 9094947 }, + { url = "https://files.pythonhosted.org/packages/c0/5e/6b3c178e2dc9d1abde0defe2afc9bc026e36e4f7d92c9fe7e5af2dd90c1f/eccodeslib-2.46.1.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:dd4a6e3c2436220174ceaee94368ac1030864720d05771791ca034f06e1ce1b8", size = 8988206 }, + { url = "https://files.pythonhosted.org/packages/9a/07/fb376b66350effca2bf1d9682f57a5856086bc83e00274b288c69f883d08/eccodeslib-2.46.1.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:f8320e8f08c858b449651af13374408d021e5224d00226e0576a9f90e347cd37", size = 8564343 }, + { url = "https://files.pythonhosted.org/packages/1a/04/ca6af458911a06548005d78f9479448bd98345f607d2b0ecd3ecb41e9360/eccodeslib-2.46.1.14-cp313-cp313-macosx_26_0_arm64.whl", hash = "sha256:dbc61471bbda03fa8070da8ac4d90faedbaf6259c3ffe4e38a63dbfb2d04c744", size = 8786927 }, + { url = "https://files.pythonhosted.org/packages/3e/1d/4a773492e697c3216a639c71b8a6917ed35018e1501ea2f1e67bd40b1fd1/eccodeslib-2.46.1.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c7e271d71ce51b45605df9553fea0d13fa9606b2c1f52d8a99771c76756fbd84", size = 9094949 }, + { url = "https://files.pythonhosted.org/packages/c1/4f/1acfe4b86eb28b886f92b6c342ebe70ab9b98f49e3e8951dab88e127a2e7/eccodeslib-2.46.1.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:b144d6c09de994fe9b38c672c8839ca9703f3fb91bbe59dfeb3e3dc6e519062c", size = 8988208 }, + { url = "https://files.pythonhosted.org/packages/da/36/b2534e892486526a9f73cfa1e10fdd248ca61eb9b7c559d4a9ac6b34f224/eccodeslib-2.46.1.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:52fa0eb9ef513cc0d2bcf7716aad6e19214efd5b05b322b4992193b0bdcecdd8", size = 8566303 }, + { url = "https://files.pythonhosted.org/packages/b0/f3/97d500dfc0b0c8eb6943c3858ec0674816a2b35feb0ad82064fbe7517bae/eccodeslib-2.46.1.14-cp314-cp314-macosx_26_0_arm64.whl", hash = "sha256:1c705dae0e10db95e0e7e4b7704662de10082a6fe3bd3d5361eb991a7c03fc25", size = 8786928 }, + { url = "https://files.pythonhosted.org/packages/e9/d4/890408cf7b2cb066c513cee43098c7b18d5c261feed4ca55030be59f4dce/eccodeslib-2.46.1.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:60f761bdbccdb4430844b8bb2f27b7ddf46f64eeac7af5c9958b6504daea2308", size = 9094948 }, + { url = "https://files.pythonhosted.org/packages/21/f2/14af7d1f9b6e929ef4d9ba1ef18d35cc3774a38b0f42f72480caec9dd0c0/eccodeslib-2.46.1.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:a38f185eeb8dd98b11bd9643daa6a75f3ba887c94b62fe4a10a4048795bdbbb0", size = 8988209 }, +] + +[[package]] +name = "eckitlib" +version = "2.0.3.14" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/f9/b5d6ebece51580dcaf9c81c8738343fc4d8619da0eb51ef44a994f5d265f/eckitlib-2.0.3.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:b1aa4c392d58486b5e803c6a5567468d3eee831e189f7966bfd251fa0d686312", size = 2471572 }, + { url = "https://files.pythonhosted.org/packages/de/a4/8a06a9b9c12ebbe34e67c3ba6e3648f49f7de60bc7af387e92864273fc8e/eckitlib-2.0.3.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:7312f4de97bc72ecc067d1eef237ca04c88e3fc4f7293ac5441e6b21182f1b15", size = 2601516 }, + { url = "https://files.pythonhosted.org/packages/ef/0e/b4a6bd3b5cf85c3db8e4e6f2125d6e3449c3a34a0eeb255cc7af3e1eabc4/eckitlib-2.0.3.14-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:720bb64519bb3df50453a9366812e95b2797c29cd7b3aa0443d813a9d3e2f341", size = 7030616 }, + { url = "https://files.pythonhosted.org/packages/4e/6d/4bd33784cfc8debf50a72f804e6b151f1bea816d7597e0c759f3e811e919/eckitlib-2.0.3.14-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:398572e7462b63ac26bafd58417cbdfa6488bb4d31993367c884558840898eec", size = 7159448 }, + { url = "https://files.pythonhosted.org/packages/de/ef/deaf9dd703ad85127068d9e92e9db9333a7d4fa7dba5c8b3a917a70f6296/eckitlib-2.0.3.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:7fc2b39a7f8d265235c89e3175247df4286d0f680330de82e71a869ae0f5f508", size = 2471571 }, + { url = "https://files.pythonhosted.org/packages/fa/fd/93dda88d33b4ab0e8bdcef43a03b0e52a33dce4c806aaf8e850af4dd7386/eckitlib-2.0.3.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:1426fdb3b0f7129d8b3e87ac579a1c202d08bc77467a50a51e909c647cd9a6e7", size = 2601513 }, + { url = "https://files.pythonhosted.org/packages/d5/0d/1276c7b1cbc8f9685869c812c41176dd6fbc2fb8ad999f4a6e7c05349a04/eckitlib-2.0.3.14-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f02fbc99b691ec1027cc67ee14bb7a4fbf5124ae23e5273f897fd1528e7d2723", size = 7030610 }, + { url = "https://files.pythonhosted.org/packages/51/21/5c8bf23d5395da8398764c1cf4dec4465f04c1d8bd314b09ae11db890a1c/eckitlib-2.0.3.14-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:629e9dd662645a8dd5ec666127ddf6076c6bf750ade11f949746831f35674d11", size = 7159451 }, + { url = "https://files.pythonhosted.org/packages/a1/4e/ef3e03f994f2bcd40863cb6beecb6223118665e1446c0fc2aef3fc9b8113/eckitlib-2.0.3.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:139546fd42d2d59eef75acb864677f4409b848d4f7984df54dea32121256ba4a", size = 2471572 }, + { url = "https://files.pythonhosted.org/packages/63/a6/8fde5efd70b933a2a327ed74cd65dcccefcb8b24d62d90a5531abe7b03f6/eckitlib-2.0.3.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:8916e863ca550e59b979bd4614abeaba43cf05e006915209a692c927299349df", size = 2601514 }, + { url = "https://files.pythonhosted.org/packages/75/5c/008bdfd0ca69dc0e72e6ae2afabd39a6ac1dc26bdac4d3318640325e5e33/eckitlib-2.0.3.14-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96b6c660c7531e2133cdbdd664a2d675c49f7e4ee58c2d8ff1b33ba6e8bb7fd0", size = 7030616 }, + { url = "https://files.pythonhosted.org/packages/93/dd/acac2bae00d88eab1c9a81fb8e2a0b68b4d9f97016475bd214dd06249933/eckitlib-2.0.3.14-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8064cd7940351829c27614711b140657bd63bea279ae168e12c842a2f8565dba", size = 7159454 }, + { url = "https://files.pythonhosted.org/packages/a9/9b/66a0a817a0a99c0099a76a4011067da077e58833730928cb2f5f1acdf838/eckitlib-2.0.3.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:835535e4bb91ad1c4b32cc9c004170a8cbac3237e1e2a36a275f9f77d8b585fe", size = 2471570 }, + { url = "https://files.pythonhosted.org/packages/d4/e0/336300df7710312fb7d94884a696e437060e7b7537f42f6d07264da979e8/eckitlib-2.0.3.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:c65bf980e525c2a680549c2ae38f88b899d2712ec60bc5584d45f9ce13ffcb03", size = 2601510 }, + { url = "https://files.pythonhosted.org/packages/ec/09/1d29b7fae0273924da3d7d42a9f1f69756fbce67faab6267eb89e3ea17c8/eckitlib-2.0.3.14-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7ba5d1f05e2687cac4c30697d18cdb9d2a56f2a924467502ad12a6f8a4713a8", size = 7030617 }, + { url = "https://files.pythonhosted.org/packages/ea/67/8cc77c20c534f3cc45ce202d12420e94059f780e7bb72a71387fe222653d/eckitlib-2.0.3.14-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01972207ff33f212122cc4c6eb3820c447ae7ae170a37822cd037922f063310f", size = 7159453 }, + { url = "https://files.pythonhosted.org/packages/31/29/64a4b021ea6230bfd2d3fefeae597d537739e027d98fc6da5b5d92db77a6/eckitlib-2.0.3.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:9c6d7c54c8ea12162e9f11bb6c65e8021899dbf4c24fdb861a0c0805550ec37e", size = 2471569 }, + { url = "https://files.pythonhosted.org/packages/9a/06/b73525d1b5fc8e96cbaa87a0304c2f35ab06943489016e75ee389829f9f1/eckitlib-2.0.3.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:f19d6d968feb8d0792c7db52aff27647c5f51bbe42b54c73731532af695748f6", size = 2601512 }, + { url = "https://files.pythonhosted.org/packages/db/2f/665ecea82cc9de7f640ce97ce7aa9c43ec73a526952fa5883e05a18b2b86/eckitlib-2.0.3.14-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:faac61bd535db010ab94ca181d29052157f33de1294daa3faf4f6da67835cd53", size = 7030607 }, + { url = "https://files.pythonhosted.org/packages/17/d7/b9a27fb092e9fdce50655f522a36bf80ed3ca61712bb63a9fad9a0d97d81/eckitlib-2.0.3.14-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1465ed0178b44b0e5d8e2b9a335396201a1ff815009e698fcb342b67e3d9c4cb", size = 7159451 }, +] + +[[package]] +name = "ecmwf-api-client" +version = "1.6.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/14/b5/837fa2daee28118c592cd003b910433894008d5a1f9e3bed9f2c3cabe34b/ecmwf_api_client-1.6.5.tar.gz", hash = "sha256:1fc0eba27163686b7fba5da027cc5dc0a361f75b652508fa7805f50599368b1c", size = 12974 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/f3/7a5832d5fb8e16db4d1f3be58fcb2537e68ccffea1270bff8b65de7c85b5/ecmwf_api_client-1.6.5-py3-none-any.whl", hash = "sha256:82678c2c18083b44be74b23e2a7e82d2343061966c0bf3a895272b9e9a802836", size = 13495 }, +] + +[[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 = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, +] + +[[package]] +name = "fckitlib" +version = "0.14.2.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/47/f8dd9b942815e7cf8cced1273ef0580aa1711dbdb15d3ad09a9f3d11b28b/fckitlib-0.14.2.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:966a67230489c9050f2d5c7811650fff789ba5e9fdd31117e8bd1e22190a7a79", size = 383834 }, + { url = "https://files.pythonhosted.org/packages/15/f0/a7f8a0b749b4a82a7da6ec7c49d8c22acf0645215a2a05fc72dbfc945faa/fckitlib-0.14.2.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:731ee61ac08c4efaebc00030d09e229f341b775c35316d422e0659aae58e65d1", size = 379561 }, + { url = "https://files.pythonhosted.org/packages/a5/14/56ab8abfdfee250772d5ca63333cc0dfa312f44adfd8e63c87894f880ccf/fckitlib-0.14.2.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:21b7017eafe75f88aa5a4a54dd1475df8c4f33d688060e5fda6c9a94a9ba142c", size = 405794 }, + { url = "https://files.pythonhosted.org/packages/20/98/c855da3858f97b5cf5685e5e3be5aa101735c8006f687ff30c8e94f089d3/fckitlib-0.14.2.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3cdeabeb6bb43d44c53fe38498e74950827eb89e1660a7de7210047adea3af7f", size = 408220 }, + { url = "https://files.pythonhosted.org/packages/0d/5c/db740fb8220df04bc04194f9169e20160ed7e80fb96d03c69cb32b7ae67d/fckitlib-0.14.2.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b9eb58f527b4fcf85bf3e9cf6571b7f375b59a12fcbbaa01e4586cd46ac6b3c8", size = 383832 }, + { url = "https://files.pythonhosted.org/packages/fc/f5/7fb4b3912067bf04b7207c4c5f93e94d107f8a250c7471cf14b3af6ec456/fckitlib-0.14.2.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:aff57df419905334ce41bec1b8761d0b979a6410786bd899703fd2e648500a54", size = 379558 }, + { url = "https://files.pythonhosted.org/packages/c4/47/dba5a66989021b3548bc9f965c1cbffc7cd8359a8055b51a4c38a83035c6/fckitlib-0.14.2.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71a678b536bd07df36458b984e4ca778cdeacf66b3e7310e51652dee36536150", size = 405795 }, + { url = "https://files.pythonhosted.org/packages/c3/8d/0f64477b6ac92f82e92b11defc6d1830bc4022a4d9b5caefe3f85f444fa5/fckitlib-0.14.2.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:0d3eba1224c002022b86fdb858a9fd7fa80ca0cec7221408184ea814ca9f6258", size = 408218 }, + { url = "https://files.pythonhosted.org/packages/66/c3/2dc1a235b224e28f8c54c37eb4e4c03d116bd49183600963b19abd622eb8/fckitlib-0.14.2.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:446e296bf252c43ce58cc6f9da20cc08fac48ce3b73e975b15a91c01b3df1ed6", size = 383833 }, + { url = "https://files.pythonhosted.org/packages/f6/35/279840ebcbb9b8948e4c9fd762318e94bb9aa5c85aec4b0cff70a8c2be5e/fckitlib-0.14.2.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:1c3a75702a6517c6d4a99e1a41e37db4cb120c19ee382ce364132385a91fed5d", size = 379559 }, + { url = "https://files.pythonhosted.org/packages/8c/9d/5cf64593589fa6f90ed7b5d3a1f8d3b8c76f59a613d4bcec04c66bf890bd/fckitlib-0.14.2.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0bb6f0b7a2280a0ab33252070831be25ff1a04cc8fb258991beff70501415187", size = 405789 }, + { url = "https://files.pythonhosted.org/packages/2e/43/e6357178f147e6308a8e6a9be83afdda8fe6d96c77acbdb92018c7c3261b/fckitlib-0.14.2.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3d85ba6bb3a157bd7db646e7a1a8572b792423b309443a20b1148e112213dafa", size = 408215 }, + { url = "https://files.pythonhosted.org/packages/b7/25/f5446266cf8d44cd8e2100c705eb3c14a4a59dddb7fc3be97dbff63a8c49/fckitlib-0.14.2.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:2d15f1b652474ac0081641cd72e6081ea219125970d178877ad20103a06e7853", size = 383834 }, + { url = "https://files.pythonhosted.org/packages/6f/de/e80b8d3e1a3875d268b7d17eaf8930091248c665301b3100a97c688bb288/fckitlib-0.14.2.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:798f1757ddd57a750397d6e8146ed3c570754e492e3413eccd7714255312e7e2", size = 379561 }, + { url = "https://files.pythonhosted.org/packages/85/e5/8343c5bbf8c8aa91e9c2013fdd8e565eb995438be1ef8cb226448887061f/fckitlib-0.14.2.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:59c238c52484a546211ff7c28f3a06cb2b3f9b1c70ae1f19e9409c7fe3afa8d8", size = 405792 }, + { url = "https://files.pythonhosted.org/packages/fd/17/0c870cc45eb3ac79bf565cd02420bec56620a7a047b125a3deedf84868be/fckitlib-0.14.2.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4f1d400dd9382e2c8768477bf4a8b30710c8f22412197ab317a5041bdd243546", size = 408221 }, + { url = "https://files.pythonhosted.org/packages/7f/75/43e3b00b7384f0bd6d913711c442af7b49e9f4b6bb65a31097a2d8bba46d/fckitlib-0.14.2.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:87f26a0dbf4885e56c47cd872d2c1ea58ff82eeb6d51ff4cc6e82429353c3c25", size = 383834 }, + { url = "https://files.pythonhosted.org/packages/80/fb/15731c6ac47ed560437de2d7cf8fe9824d86506189679a5040cec1ef9c61/fckitlib-0.14.2.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:138ec4fa70b11e6109a95572466faa8eb2909ed7362f0dbd4d386f8ba1af7df3", size = 379561 }, + { url = "https://files.pythonhosted.org/packages/aa/35/8fca459b5248cee18a92f85501e9329374c239408fe080dda4d8be2feb25/fckitlib-0.14.2.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:4002848349deec62e5d420547c4a9aa3fd28a30f78f025c552d89457cfa217df", size = 405793 }, + { url = "https://files.pythonhosted.org/packages/ac/04/12c117254fee211194dba5c6a7dbb6787a645fa2d410d954022bbbd43f66/fckitlib-0.14.2.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:dfaa56721efee2649b7b87f4abb9ddc067e0cb0732eb9e709eb96b874b7440e2", size = 408219 }, +] + +[[package]] +name = "fdb5lib" +version = "5.20.1.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eccodeslib" }, + { name = "eckitlib" }, + { name = "metkitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/39/00a9cf415dcb5e95849db02f42602a37e4b404ceb6b21973928fcb9f6e72/fdb5lib-5.20.1.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:4aa579e84c27a2d20cc5c4cb4d50ea4b57736df0511995ffd633b553ca812592", size = 1403406 }, + { url = "https://files.pythonhosted.org/packages/25/e5/2600babebe73cedf49106ff01d4af7acec79db4f6c3b20d380a95e999798/fdb5lib-5.20.1.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:cea55d101c848b6dd1212800ee22e39a3a6330d296f482ff0895ffe9cf87d8e9", size = 1437191 }, + { url = "https://files.pythonhosted.org/packages/63/f7/f8fbaf0b07f96580ce6475206bf5b913b804581cff1906d065d870e83c6d/fdb5lib-5.20.1.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:87dd62c1ee73d5c4a2ada3ae6082b584f8160106536153b64ace101363ae1abb", size = 1719625 }, + { url = "https://files.pythonhosted.org/packages/a8/ac/0cfcf31628925a2e1cbab6474c40da45ea74fa9f88ae05232c06407b47ca/fdb5lib-5.20.1.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:057f5693b74b0053c4ff70b58e5e04a25fd3820540dcd40cfb2af4ea55a11333", size = 1703410 }, + { url = "https://files.pythonhosted.org/packages/ad/bd/f3f71bf8db5a268fb79a2e962263bcced4846e9779767b2b0fe923528df5/fdb5lib-5.20.1.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:ebada319784e482bf7c5bdf6604edbdd0a9c101881763470d10518ff8d8f964d", size = 1403425 }, + { url = "https://files.pythonhosted.org/packages/87/7f/318fbd8574956187a6535d981f1fc2214f803af48603c16d81b65d7014ac/fdb5lib-5.20.1.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:05e0bc3188400c1dff6fc83a86ab11e906e8ed4f0da24005d8df712d389ff179", size = 1437212 }, + { url = "https://files.pythonhosted.org/packages/6a/53/26a30ccb55a96da2762a7acdf80ebd1340d9f01bde96008576b89d3f001f/fdb5lib-5.20.1.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d2e078c9061c047ceb662744b176940147db386532450f3d3930abd5399e089d", size = 1719644 }, + { url = "https://files.pythonhosted.org/packages/6d/2a/35484f69bcd20742269597c8282a58c6793ebca4bdad33cd398cd6501947/fdb5lib-5.20.1.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b172844fabbda8bdcab23b049e70bf6fae62ff35b585e43d741cb8bbef0c54b", size = 1703431 }, + { url = "https://files.pythonhosted.org/packages/65/b3/285d883d5a4a9496d7eabfec6d66ee1846b760f7a44ebb0413ab66500bb1/fdb5lib-5.20.1.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:c78ab15f3d402c9f5e226cc395b0cce135c5117a02c3500f5282203d219ee1c2", size = 1403428 }, + { url = "https://files.pythonhosted.org/packages/dc/fc/2868a622aaf3865b1f1e0e5382a73e48ecfb2eb93de2076ae8a26bc20221/fdb5lib-5.20.1.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:eab1d40a4578ee559c28d3450c326782315a5f562887dc0897781a01ff607b36", size = 1437212 }, + { url = "https://files.pythonhosted.org/packages/9d/10/a79e15a3bea96ae31fefdc8cca2911523d94fc5fe17793ff496e96cfd15f/fdb5lib-5.20.1.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:182733e32c6254d6ccaa5376ac2a3317ba137b5a74a013052c051dcb0ec8de1e", size = 1719646 }, + { url = "https://files.pythonhosted.org/packages/c1/6f/56eed0ecd54e5453c4b17329f49be095104779b0f42d8497a84f9755aa8e/fdb5lib-5.20.1.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0f90094478a54283998e63258a3a5eeddf608056d745dc09bfd67dcc0e5b09d4", size = 1703432 }, + { url = "https://files.pythonhosted.org/packages/ed/57/9ca9caf342ad8aebdc81ef153a2ac31625a1512841e456bf6d5faec82fe5/fdb5lib-5.20.1.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:9badd2578fbcf5c8d164419737805518310b7e6aae946cea5f474e171e4f210e", size = 1403426 }, + { url = "https://files.pythonhosted.org/packages/97/be/b17ff8fccdce851216d89b04ec03bb200f952d04a436304f532291332803/fdb5lib-5.20.1.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b593606c4eacbdf46dbbcbf9556b63857e0be541bdc980059c33140c654b54d4", size = 1437214 }, + { url = "https://files.pythonhosted.org/packages/33/41/0f0f2cdf5dd8928bf5a94526a50adf3eccd77822c493e92aab2976fe5992/fdb5lib-5.20.1.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:8ce4cd522dc2020b6b259b1749ce4934403e715888cf99f15a74b7f6d82b3a51", size = 1719646 }, + { url = "https://files.pythonhosted.org/packages/55/ee/d3954f0664971fb667d4d6ecd6baa76ac53c9f7074ea89a642097aa501e1/fdb5lib-5.20.1.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:927dfefac21e227b78444ba4be1c842d7626307696b8489d8f20eb107832de32", size = 1703432 }, + { url = "https://files.pythonhosted.org/packages/10/57/bdbc156c49d713e1311c14eba71eacf861a4daba60d68a48b57f9408d82d/fdb5lib-5.20.1.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:90f695e88ec97ac358b2866ae40a3148400e8d6ccdbda3aab574073f3646b021", size = 1403427 }, + { url = "https://files.pythonhosted.org/packages/0e/a2/23518e4a73034caf216e1f5d38df8d07edc837e64294c13fa5c163939278/fdb5lib-5.20.1.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:9f1c1c0acde94aa6e4809e7b986c202e074a4fd886c93c9c1f4fa848395d0bde", size = 1437212 }, + { url = "https://files.pythonhosted.org/packages/22/23/431e04a8bd6674236ba685977af6fa82efc7a01185428e1263a384dfde43/fdb5lib-5.20.1.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:676f20623938f1c862bf9f3f623877cbe6357df4eb634668aa17d7d2d2380f52", size = 1719646 }, + { url = "https://files.pythonhosted.org/packages/9d/16/2945dce4c0b89e0c937a15904349c2fc0f2754949f57b5f444826f10a934/fdb5lib-5.20.1.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:c02d9c7fe76e402c19106e52b0dbd81b512548ef880b3b96640d66cf1d36770e", size = 1703430 }, +] + +[[package]] +name = "filelock" +version = "3.29.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812 }, +] + +[[package]] +name = "findlibs" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/ef/345b0f88b8e9d9e12051142a9cdcf590bf70206d20d81c3f773ade8d9e32/findlibs-0.1.2.tar.gz", hash = "sha256:1f56d220c69686392ebdc4c65b32ee344818bca633643a8c97592957d1728122", size = 11302 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/ff/76dd547e129206899e4e26446c3ca7aeaff948c31b05250e9b8690e76883/findlibs-0.1.2-py3-none-any.whl", hash = "sha256:5348bbc7055d2a505962576c2e285b6c0aae6d749f82ba71296e7d41336e66e8", size = 10707 }, +] + +[[package]] +name = "flexcache" +version = "0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263 }, +] + +[[package]] +name = "flexparser" +version = "0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625 }, +] + +[[package]] +name = "fsspec" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402 }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455 }, +] + +[[package]] +name = "importlib-metadata" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789 }, +] + +[[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 = "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 = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +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]] +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 = "locket" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398 }, +] + +[[package]] +name = "lru-dict" +version = "1.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/6c/396716746ca46fd2ac52a7a6cbd7b4cf848e5d430f431dacd209290dfa71/lru_dict-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3766e397aa6de1ca3442729bc1fa75834ab7b0a6b017e6e197d3a66b61abde59", size = 16757 }, + { url = "https://files.pythonhosted.org/packages/2d/93/c163ffb71beb18f18459461658fd16c8b8c86aed858f2dc7c7e636318f61/lru_dict-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658e152d3a4ad0e1d75e6f53b1fa353779539920b38be99f4ea33d3bad41efdb", size = 11243 }, + { url = "https://files.pythonhosted.org/packages/44/e3/fa96d54032531c67eeacf0ab6f56e10e05f25d382a29f6a381ac8ecf3814/lru_dict-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:98af7044b5c3d85a649e1afb8891829ff5210caf9143acc741b3e98ab1b66ff6", size = 11726 }, + { url = "https://files.pythonhosted.org/packages/7a/23/bae4f32fb014fd2dc5512e9267a3b1ec34c3b55d16a2202a1193d9ae635d/lru_dict-1.4.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:906d99705b79a00b5668bdb8782ad823ccc8d26e1fc6b56327ae469a8d12e9b4", size = 29823 }, + { url = "https://files.pythonhosted.org/packages/9f/3b/8c3d1e6a188ce65e0161b86dbd18f2290950baf1e9e28e4948fc123d9a67/lru_dict-1.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:885643fd968336d8652fddb0778184e2eeff7b7aebced6de268af6d6caef42d5", size = 30812 }, + { url = "https://files.pythonhosted.org/packages/ed/11/7f061507eda944150ed959e99a3700ce6358c1241c7f697b2f1ade48646b/lru_dict-1.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:24c779334bed82f1a7eb2d1ebcba2b7aa9a1555d40a3b53e05eb6b9dfcb0609c", size = 32480 }, + { url = "https://files.pythonhosted.org/packages/75/e7/94ac30d33c6f8a8eca5d7e81c0ce26fb7b79b18ea65accdcb2a652b19abc/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6099e2ecb118dfeae4a197bfcc702ea5841bfd86f19d1b340e932d0f5c47c10", size = 30199 }, + { url = "https://files.pythonhosted.org/packages/4a/81/c93ee7365db67dfb497e6218aa0395b9ec878c07c732d348bfbd651bcc95/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e0db4f3105108598749550e639b283b07df0bb91cac3b47e86ffebcab721cc7", size = 31489 }, + { url = "https://files.pythonhosted.org/packages/9f/0b/634e8b4eca2497647f802bbe1ae3f0e1e9a0de1d555cf77c022527b2682f/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e21f67ba374d1945051b547e719d44a8c7880718f67a15a03e7a12e1d12ea96b", size = 29522 }, + { url = "https://files.pythonhosted.org/packages/de/cc/591b959d77cc0e0ac016f11baf26d03d566bb88a53fa9b41e157bc68bc4b/lru_dict-1.4.1-cp310-cp310-win32.whl", hash = "sha256:f309b4018dd41f33bf3bd4cc0f62421da8bcca513ea044dbb22f3cd029935012", size = 13066 }, + { url = "https://files.pythonhosted.org/packages/d9/bc/c14b67fdbdb5a2a81cfb907ea8a8b0c9da5aed899f34921ebf097e22a966/lru_dict-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:e84cd1065955897de01f1fb4cbd6f87cab7706e920283bb98c27341d76dd9a8d", size = 14008 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760 }, + { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249 }, + { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728 }, + { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795 }, + { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807 }, + { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437 }, + { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168 }, + { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454 }, + { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574 }, + { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031 }, + { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007 }, + { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683 }, + { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216 }, + { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687 }, + { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960 }, + { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882 }, + { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268 }, + { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156 }, + { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395 }, + { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591 }, + { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119 }, + { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109 }, + { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248 }, + { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243 }, + { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938 }, + { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261 }, + { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801 }, + { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688 }, + { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214 }, + { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689 }, + { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034 }, + { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919 }, + { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334 }, + { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211 }, + { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461 }, + { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651 }, + { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120 }, + { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112 }, + { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119 }, + { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435 }, + { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988 }, + { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733 }, + { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222 }, + { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733 }, + { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251 }, + { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405 }, + { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135 }, + { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620 }, + { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077 }, + { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905 }, + { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435 }, + { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423 }, + { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184 }, + { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459 }, + { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938 }, + { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389 }, + { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706 }, + { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892 }, + { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254 }, + { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422 }, + { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909 }, + { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816 }, + { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204 }, + { url = "https://files.pythonhosted.org/packages/ec/de/18ac3957e1aa6674a0a828748c819265f79b524ff30cbb0ac7f08ab786c8/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cc9dd191870555624bbf3903c8afa3f01815ca3256ed8b35cb323f0db3ce4f98", size = 10467 }, + { url = "https://files.pythonhosted.org/packages/0c/53/2a0bedaa64950cc56ade72e2f5a292318473585d9a3adc797d13b38082e7/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:afdf92b332632aa6e4b8646e93723f50f41fece2a80a54d2b44e8ac67f913ceb", size = 10871 }, + { url = "https://files.pythonhosted.org/packages/4e/e2/d5ea49d62ea142559fd9cafd8505d4a4f87a1d81953a9c99fa61e7ccbd6b/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6770adafae25663b682420891a10a5894595f02b1e4d87766f7adc8e56e72a", size = 12969 }, + { url = "https://files.pythonhosted.org/packages/a2/67/0672caac9a04dc9011f7a27fc2ec2003f0bfa008070b29940d05b4dae56a/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:018cd3b41224ca81eb83cdf6db024409a920e5c1d3ce4e8b323cb66e24a73132", size = 13959 }, + { url = "https://files.pythonhosted.org/packages/e3/7e/313385214a5011cf9fe8376928f66f70bfedc48d8f7ab424292224ed4907/lru_dict-1.4.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:781dbcf0c83160e525482a4ebcd7c5065851a6c7295f1cda78248a2029f23f39", size = 14084 }, + { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384 }, + { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822 }, + { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968 }, + { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904 }, + { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062 }, +] + +[[package]] +name = "markdown" +version = "3.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180 }, +] + +[[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/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631 }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057 }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050 }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681 }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705 }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524 }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282 }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745 }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571 }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056 }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932 }, + { 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/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615 }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020 }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332 }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947 }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962 }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760 }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529 }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015 }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622 }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374 }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980 }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990 }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784 }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588 }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041 }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658 }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066 }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639 }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569 }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284 }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801 }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769 }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642 }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619 }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408 }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005 }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048 }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821 }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606 }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043 }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661 }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069 }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670 }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598 }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261 }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835 }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733 }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672 }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, +] + +[[package]] +name = "metkitlib" +version = "1.17.1.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eccodeslib" }, + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/86/9676f06ce7a22a8725cd5a064d401450bae27b956e9e586d9510fdd3c1f4/metkitlib-1.17.1.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:a19d7dd35581ae97fc2c66a201d74988a5e41acd288f698c9c672bdafdf3655c", size = 883452 }, + { url = "https://files.pythonhosted.org/packages/77/66/faa5f205bffca6f804d202790baa85242f01573e1dd48bb213f1debcd5ed/metkitlib-1.17.1.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:ae0b1281000f9fedf22da120345b04a44b2465544c24c31785ae5e077ac4e05e", size = 922389 }, + { url = "https://files.pythonhosted.org/packages/6c/7f/9b2da87e2b2f978ca5e2eea6732430d919ca84be96804034d1425528d4dd/metkitlib-1.17.1.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ff35dbca38c2b017a61a8f22d4265bb57f8d34135412bd3f782abe27920583b4", size = 972297 }, + { url = "https://files.pythonhosted.org/packages/4f/28/7b1e9c4ac720cb732a972cc8894b65abbf843d55c1940acb5d4c669b48e0/metkitlib-1.17.1.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:376cc84f827f931edf824bb200db25fca65cc8676b88f07d02b7e10af18a2a4c", size = 1004227 }, + { url = "https://files.pythonhosted.org/packages/5c/43/fa1f37122c0f2cd944cfece03855ac04e674709d539bdee6f0e405694351/metkitlib-1.17.1.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:726395e3ece2ec483dd92f65308ae7758f36e7bac6f90be51424fdfdd6c2724e", size = 883454 }, + { url = "https://files.pythonhosted.org/packages/b2/02/6a9107b1540ab07ac96dc9ef7204826bd026cdc61a7719d1450c815a1f9c/metkitlib-1.17.1.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:50aa1b47e33a62e92b586e353e95e4227a1a51da5aef687936cac39938f51803", size = 922391 }, + { url = "https://files.pythonhosted.org/packages/38/20/89d126b6d4573a63458c523b8aec2daf3ce408ea7538ded77fb5a29eb0cc/metkitlib-1.17.1.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b5326f24567c640546324231ce2c1b0a8a742692ebe11afab558ff326a670ef0", size = 972297 }, + { url = "https://files.pythonhosted.org/packages/ce/ad/332bb6a6c271c4f2e799b073fee9c4d0d23cca3127b2a1eecd16c18146d4/metkitlib-1.17.1.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:9cd3f4e29cb4ef714c74c968000a4d45695cd28b8182b334eb6ac7d047ce39c3", size = 1004225 }, + { url = "https://files.pythonhosted.org/packages/97/a6/1937c42f280ce3bbd74a7e70157278c360f1a79395bbdf53b53c949dc819/metkitlib-1.17.1.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:cdfd0ffef95a63b25389eef79394845a99d9ebe5a47334a45f72df57bc91affc", size = 883455 }, + { url = "https://files.pythonhosted.org/packages/ff/39/be40ce8d983340f547b65d131f73fa24a3e78e9eb4e45516eb30a580fd0d/metkitlib-1.17.1.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:a2c55b5d4a34cf31efbbc61ce570f6683884068676ed37b883b390603bc3346e", size = 922388 }, + { url = "https://files.pythonhosted.org/packages/e3/31/2fe67928cc868d2b60cf5d7abe52f8b2fbcdf0674286a043fd6c4965ae56/metkitlib-1.17.1.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e00e37742a7d594e45cc16217861cbf90c2d10cefd1b0f125262916a8aa1041d", size = 972297 }, + { url = "https://files.pythonhosted.org/packages/f1/f6/d91c54f49b0d278d04f07f05989d7c1cdf4607ac23ddfb14c32124e799dc/metkitlib-1.17.1.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:80a339fa687aa22b3b1fcf150508d4f5a45f804154a6294637609ab62e09ecc4", size = 1004226 }, + { url = "https://files.pythonhosted.org/packages/be/e9/668a014d5b2187dd65400a6c6855de587118fb31b68d6739f10b9f372917/metkitlib-1.17.1.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:17f34c4acd77f33e6716a3caa9e732a7975fa67ee259df5dad4c0d0db6f2fd06", size = 883454 }, + { url = "https://files.pythonhosted.org/packages/dd/a3/d66275fee72f005bebf798a61e443f4d17d35e8b377e37635c217545ecde/metkitlib-1.17.1.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b85fe051f8edc2c9afb04cb3709c8a87d9bce69737f118c3653bd9e28401412b", size = 922392 }, + { url = "https://files.pythonhosted.org/packages/5b/c8/1d96c1d6593a1bea023c3fa17dc4f0520625d70ea1a3735ac1f8be98c5a8/metkitlib-1.17.1.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:0a8f7471d9c637d51704253b72a8f57bc522514bfaf6269630831ea4a82fba1e", size = 972293 }, + { url = "https://files.pythonhosted.org/packages/e1/1b/56cf934b45d2af4fef55ac48a084b1dbcee20a3bfef8ae4e467bc33543a9/metkitlib-1.17.1.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e7650e5e3b2e5c7327a424cbea24c73e943675118de5f0a2e7d717b875483f58", size = 1004227 }, + { url = "https://files.pythonhosted.org/packages/aa/43/dac1d0008f1740d1dfd508d4b2578d4e55e20e7a55fb2d2def2fa6590412/metkitlib-1.17.1.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:e7f5f1e876883dc0538967e248cdd3f1911d87bbd589c725912cee2682170a56", size = 883455 }, + { url = "https://files.pythonhosted.org/packages/dd/0d/a1d027d4a0b1926289a6e1c7c58e778d393084023488db82cbb380348faa/metkitlib-1.17.1.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:1e64b8ffccddacf44306a926358ddbe37ca499659668243b2af5f4e0a663d768", size = 922392 }, + { url = "https://files.pythonhosted.org/packages/a1/96/60e5eb6b69cbed19833adb880251c453a57e4ec22cd1efa978a208761053/metkitlib-1.17.1.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:b363d0b530e58bd6c832910af7786cac764c230a1515e830ff8c4b361364d031", size = 972296 }, + { url = "https://files.pythonhosted.org/packages/3f/11/abd57cc9006d59198d65e082cf3c70ead6f2203211ea5ddd92d0752f5ca2/metkitlib-1.17.1.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:18bcc8effee23c7a6df6b99a3ded2d890e46b57759aafb651cb0869e4e7cccdb", size = 1004228 }, +] + +[[package]] +name = "mir-python" +version = "1.28.0.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "findlibs" }, + { name = "mirlib" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "pyyaml" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/2c/f4426675f88ded10d99c836271db3cedbc424357825616c303e8b640d877/mir_python-1.28.0.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:5a55707154531d3114e1f376e96fa4ac2174d769b9426fec7f3a2f59669f8ca4", size = 141622 }, + { url = "https://files.pythonhosted.org/packages/e7/fc/2afd905395a28831733edbdca2fdd03389f8b7e3f4cf6a31c7a47fffe407/mir_python-1.28.0.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:4fe8e18b33356ba2904e4320ac906f8ed37cb9d80db1f760e422c90d90a1c457", size = 145458 }, + { url = "https://files.pythonhosted.org/packages/75/1f/183c20cfb13240bf01ad50483072349bf10fe27147a29784492f5d98a9f3/mir_python-1.28.0.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:420e0272a07afa29103efdc3854dfa5e2d1aaf3bfd961f8ab4e9ec46754fdaa7", size = 1141734 }, + { url = "https://files.pythonhosted.org/packages/6a/34/b452d181632010e3de238aff6c047d066625d37b4c7a3b82d930fe14dfa2/mir_python-1.28.0.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:54455d543c494614a23526543093c524b2686d4cbd95489210a0187b2fe2cab0", size = 1157118 }, + { url = "https://files.pythonhosted.org/packages/d5/dc/65ee3c1d857b8ffd69f2c8238979d63a576cd6e165cf97031ee1f44878ec/mir_python-1.28.0.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:2ee67d093ab944c2e3fe28c40681f81ba8f57546be4ff88329df1f0d0e5ca393", size = 140902 }, + { url = "https://files.pythonhosted.org/packages/68/09/56ab7a212adc15f6e0a4b06a7d5924971bbc52381e7289815685c4e93768/mir_python-1.28.0.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:4978570e8fe87fe6ef76592e78e6a877d727bf1cdf25fe3b3aacc47c58d63640", size = 144573 }, + { url = "https://files.pythonhosted.org/packages/d2/fd/7e21567f42ee71734a1e54e3650e1c46868b569f1e323aac25af5f0dc26f/mir_python-1.28.0.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:7248381c5f3055faf5d011fcecfbb30c20da3be93ede2a4ec3f69ad32fd61ecd", size = 1183955 }, + { url = "https://files.pythonhosted.org/packages/3f/3d/f34ec5d43bcc94b32f297b728767cc178fb87fc12d1d35fea14fa0897c3b/mir_python-1.28.0.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:65ef9657b03f4a8ecf820ccc4f923e66c5029fac811402b7e2dc7b52049d47a7", size = 1196897 }, + { url = "https://files.pythonhosted.org/packages/bf/e9/ccf4a18fab2644747ef12c3821333bda51555389b8a97fdb0cc6796db7f7/mir_python-1.28.0.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:e652c878e5a1040dfff374d4e7ec5951be35594a5c4fd5b67e6ef3302a6c2956", size = 142551 }, + { url = "https://files.pythonhosted.org/packages/99/22/96bb291e13a3e820d49af196931e27fddbcb95a894711ef89e18cae292cc/mir_python-1.28.0.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:2f733b7a2b65da6b37e2e05b1c329b25f0d20c79b623e2f2156cab3b640e0058", size = 145889 }, + { url = "https://files.pythonhosted.org/packages/37/22/80fa66aa4175ee4b90634b5445f84b2236be531d741b663d30abdb0e5f4b/mir_python-1.28.0.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:67d9fe8b9aa6cd4a1ea11a96cb88d4f66592ff06ddf8e5b26c9c19f33529b419", size = 1171856 }, + { url = "https://files.pythonhosted.org/packages/33/37/d3122df93f8e00550d4700bab60116eb9c36a0ddf86bdbbb47369d26b732/mir_python-1.28.0.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5dacea81fb81252f9a9b177ce093740b998e2886f4845cb792925aa7edde8cac", size = 1186740 }, + { url = "https://files.pythonhosted.org/packages/0b/2f/d94885210333508a67396b62ef2dfcb5ea56593288ef20fa8cc46a420932/mir_python-1.28.0.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:86170409ec9b328fbd14de1c1482bd4f6ac457edba3669b77cc3a0d4703905fd", size = 141787 }, + { url = "https://files.pythonhosted.org/packages/9d/37/8a6005574fcfff7caa8b39457a11e5ad8318fc881c346c1a3d43712c79b4/mir_python-1.28.0.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b1786a88c51a92bf6edb8dc5d7a6e9d5e05bf09013f0d54766e1758229c39070", size = 144994 }, + { url = "https://files.pythonhosted.org/packages/c1/b4/b2f8869dcbd49acdb4f15ae7b41bacf81cf1516b497443a8d94f4c070c64/mir_python-1.28.0.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f239f3ff764419426d0fb56b10d9f10d02a56eefcdbad801ddfc8d8082f2a008", size = 1165253 }, + { url = "https://files.pythonhosted.org/packages/9b/0a/36d8e942f723778a8fc8c404ab524c984ef642a64c46d811b1d74b5f7e43/mir_python-1.28.0.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:131abca4833702cdf6cf2030a7c622b76ff462c300cfdf15a2a02b991d360970", size = 1182002 }, + { url = "https://files.pythonhosted.org/packages/6c/cd/a924b5d18331e2c4fde23a3a83ffec348843cc01508266e490e1679dd8bc/mir_python-1.28.0.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:1b71d950e4cf6cb25154f764cf5b6b0d3a1f76a7ee780e41fa26903b05342211", size = 142734 }, + { url = "https://files.pythonhosted.org/packages/cd/1b/845083bbb694d685774aa7873db8aabfca16ce5d7b2f4ce678846e000b50/mir_python-1.28.0.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:ce72bb13b89e3f665df955b31b15a40d01257f4537c29c9b42c894ba0bd88214", size = 145780 }, + { url = "https://files.pythonhosted.org/packages/b7/3d/10ab4bd8124cdeca83f6ad7491a52d664fd7da5ade1bf88737672e1d8a51/mir_python-1.28.0.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:d078c7ee0042db64d0f1b4f8c8f0a2d267e105d246545ad10c5d7438675601e9", size = 1166374 }, + { url = "https://files.pythonhosted.org/packages/1e/9f/d333a4846daaf844115d12a753257f91deec256db14c80ed6300863c3732/mir_python-1.28.0.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d3f4081cce66a427672c96b32faa4883c060632882bbddf9e9127bcd4a7fa", size = 1178444 }, +] + +[[package]] +name = "mirlib" +version = "1.28.0.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "atlaslib-ecmwf" }, + { name = "eccodeslib" }, + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/5f/68433ad635c3f4000d7abb5ff003fbd471ea3e9e95b824b69f838b1b35aa/mirlib-1.28.0.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:46f4a75a048e9f84ccdd0f9bc6f34f842821b1f1bfd2efb45ea81a1a7da8e96d", size = 1841237 }, + { url = "https://files.pythonhosted.org/packages/42/0f/ee7c23fbc3c28365a7205dd762ff710c4e6bd7071eebbb424f76a7cef459/mirlib-1.28.0.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:536ff4ef448fa28020523fc2eb46e3769bf4c45f16a46c19c89e813047a97105", size = 1943345 }, + { url = "https://files.pythonhosted.org/packages/31/da/744cd88fca55081b104d8919b4bcf233845160f0363710d2e1906dd13517/mirlib-1.28.0.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:297879a348369828869512ffc74ad9c4e7edd19c8e9d3e571b73e0a3cada2a58", size = 2443698 }, + { url = "https://files.pythonhosted.org/packages/5f/c9/9888c17c2b2c9f550e2badd0ecb3da601a2deae932fb8e52dbbe76f431b4/mirlib-1.28.0.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0b7f6cb1fa50a19db42f186457fcd4b65789ab7104b6b5e85fab5549fffceeb9", size = 2418511 }, + { url = "https://files.pythonhosted.org/packages/53/0d/db014a75eb41cf508344d79fbdaed8ddcf2ac7fe9462234211d02ce6fb03/mirlib-1.28.0.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:7424d1b530c8a92843f68e58edcba9250e16d7538cc569564c9c0ebcd82bf8f1", size = 1841234 }, + { url = "https://files.pythonhosted.org/packages/6a/5b/e32834eecf6beb2b1b306edb5b16351076fe541b219f214dfac2ec0d6e5d/mirlib-1.28.0.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:1eb777e8287f81a94681c5ae993d92b3808caa5d639e4c32a58e55716984cd56", size = 1943348 }, + { url = "https://files.pythonhosted.org/packages/55/65/31fbd5b8beaf8481493324e12a80dfb827e2fdef29c44bc34a30e1859403/mirlib-1.28.0.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:ed80faf6050b50195e5273515e95dc9e23495ea28ff07c498bb4603d2b095595", size = 2443708 }, + { url = "https://files.pythonhosted.org/packages/30/a3/debcff9af3924d2d0bb146574abc9134c7c5461c9d8adf733c3f7d83d0bb/mirlib-1.28.0.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a995ee022795d15af2dfb42cb5c45ec2451d58faca8ce9eb714251a5381992e1", size = 2418507 }, + { url = "https://files.pythonhosted.org/packages/9d/bb/a8dd678fed59b628eefe2f711a573051503bce11cbedef630db68c7b91bd/mirlib-1.28.0.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:54a9e743c0f27a8f13f4508e3bd7a02d7759c7c468e5d05b1814d7caa2e88829", size = 1841234 }, + { url = "https://files.pythonhosted.org/packages/ab/d8/cc1f718ad3a97ed31e8b0f6fcf0e96581bc5d5efbc9b2c5b98fe0e6e4a2a/mirlib-1.28.0.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:3b824d04054ee389b6f1c33318fc7c9460956bd46b3f5c70047d2c62a0c3bca2", size = 1943345 }, + { url = "https://files.pythonhosted.org/packages/da/02/9ff8daee9b0fed4225d5878eff5bbbb655c12de78db557abc316f68cca1f/mirlib-1.28.0.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:ca6592a6a3112de83926dc7b0f031ef3106bbb0ae48d691f9fa98cae74e8b1d6", size = 2443704 }, + { url = "https://files.pythonhosted.org/packages/8d/17/3b03bd3d51cbc92daff3a4c836c03772d8dff08848184fa8cd96e7a8e6e0/mirlib-1.28.0.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d9a05a505c517031bdde6df22694981020acb2394643d3b2ef3d3e671ae198a7", size = 2418508 }, + { url = "https://files.pythonhosted.org/packages/2f/de/9139de891d5f90c9206d84144252479c280f9ed91e2e8dae6514b27a9391/mirlib-1.28.0.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:265dc6dca2cf504a7d4814fb899592b7a819b8e67e379a02f19b3bee8af6b362", size = 1841236 }, + { url = "https://files.pythonhosted.org/packages/fa/7a/0c9a609ae9caa3cfeb223c68a737f359708d24bf6720cadf14765bc4f666/mirlib-1.28.0.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:910611265b485c4fe930c0e2ebbe9d2cf120939e47323110719c2df7b1e89c88", size = 1943342 }, + { url = "https://files.pythonhosted.org/packages/32/7a/eb555bb01a0ff101e17df4d04421dac77b066326e0752a9b021b358619f1/mirlib-1.28.0.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:55603b79501f174701551a8f8eb33e70af2cedd286c0087ec6748fef4713ea5d", size = 2443707 }, + { url = "https://files.pythonhosted.org/packages/63/a6/22aaf4cee53cb3fab79cb800ccb2a5747af0bb5be0f98412d44e2bc5c90a/mirlib-1.28.0.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:272e295c7823883dfb9f13f8590081e3986bf740b8dcd75de71a70afa55c40cf", size = 2418509 }, + { url = "https://files.pythonhosted.org/packages/02/df/3eca0f7687c0ad3c4860bb217bf1d45e7afcf1a1b295403d1cd82d3ad136/mirlib-1.28.0.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:e34e1421bdeaaf6124bfc0f18cf30be384341ef6edffe12ca9b2f55b5a2e2f1d", size = 1841237 }, + { url = "https://files.pythonhosted.org/packages/4d/9b/6c50a112c7373babc0b0898ff1ae31fbf4f0b0fe311290fcc72ececf4408/mirlib-1.28.0.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:bcd77e07a29d2b6eb3b022dfa9ba4626e11dda5508e75c7e5084e088c080a61e", size = 1943345 }, + { url = "https://files.pythonhosted.org/packages/18/83/c64882b5f369b09ebd4d5e8659ec62b8651a975705399ea61c1c9664b5f9/mirlib-1.28.0.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:61581a59a083e4d319ae2461b1bd8061d59d0accf359a1ff58b6ebd1aa735488", size = 2443706 }, + { url = "https://files.pythonhosted.org/packages/a3/11/b0e6405080181022907f763ca4c9ed302179d98fa50f7aed79b347b5f61b/mirlib-1.28.0.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:2baa2c3ae5e774da2e3e098a34e229a606a4542a6a1d1c2522131d6f3eb33bcb", size = 2418512 }, +] + +[[package]] +name = "multiurl" +version = "0.3.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "requests" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/ce/a00c9b44f43c4620ca004e4acb4c1e266b1ab48d2f6ad9e402f6bdbe44d4/multiurl-0.3.7.tar.gz", hash = "sha256:4201563fc8989baca7b525fdc69d4cd5a6c0cef4f303559710b9890021aab6d9", size = 18945 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl", hash = "sha256:054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380", size = 21524 }, +] + +[[package]] +name = "netcdf4" +version = "1.7.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "certifi", marker = "(python_full_version >= '3.14' and platform_machine != 'ARM64') or (python_full_version >= '3.14' and sys_platform != 'win32') or (platform_machine == 'ARM64' and sys_platform == 'win32')" }, + { name = "cftime", marker = "(python_full_version >= '3.14' and platform_machine != 'ARM64') or (python_full_version >= '3.14' and sys_platform != 'win32') or (platform_machine == 'ARM64' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and platform_machine != 'ARM64') or (python_full_version >= '3.12' and platform_machine == 'ARM64' and sys_platform == 'win32') or (python_full_version >= '3.14' and sys_platform != 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/76/7bc801796dee752c1ce9cd6935564a6ee79d5c9d9ef9192f57b156495a35/netcdf4-1.7.3.tar.gz", hash = "sha256:83f122fc3415e92b1d4904fd6a0898468b5404c09432c34beb6b16c533884673", size = 836095 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/f6/a2fe830a5659736838ed8329992294625b70a9691818650a0b8553ce3092/netcdf4-1.7.3-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:db761afd3a6b9482df018c4783e0bdf99141a41db1f14c68c89986effb182d57", size = 2803413 }, + { url = "https://files.pythonhosted.org/packages/29/74/57d07e2b418c683b7fe9b1b912b5636fc091ad83f3430e91828db98423e7/netcdf4-1.7.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ad4c2d9b469248d83cbacb70ad9e7d3a6c0ba27febe839c90192147199745ba4", size = 2417570 }, + { url = "https://files.pythonhosted.org/packages/ec/3a/c487ea7c7a20e34b1eecdfd8a64794e2e8d6ed2089cace3939769d2904af/netcdf4-1.7.3-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c6986d039717582071e55ae9c6fbebfe4e5bbbc3af122fc3db0c0c09c4d8955e", size = 9682170 }, + { url = "https://files.pythonhosted.org/packages/74/c0/5f2cf4bae134f4346ad9c11f94f3291d9bd60352b5d60810a0bba0952351/netcdf4-1.7.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:348e79b4f26f2e403fe3c54364e9297e4ef326c7ee12f9be01c037db853d26c0", size = 9520808 }, + { url = "https://files.pythonhosted.org/packages/06/57/c233d8dcf6efe0add48bb1d8d6fe32d7ad547d5c0d84bf0cbe7e5d82147b/netcdf4-1.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:6ab71f5d70e55e8584d168d5158efdb2fd8d350a033d0c27d942c3d399587f54", size = 7214638 }, + { url = "https://files.pythonhosted.org/packages/49/62/d286c76cdf0f6faf6064dc032ba7df3d6172ccca6e7d3571eee5516661b9/netcdf4-1.7.3-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:801c222d8ad35fd7dc7e9aa7ea6373d184bcb3b8ee6b794c5fbecaa5155b1792", size = 2751401 }, + { url = "https://files.pythonhosted.org/packages/f8/5e/0bb5593df674971e9fe5d76f7a0dd2006f3ee6b3a9eaece8c01170bac862/netcdf4-1.7.3-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:83dbfd6f10a0ec785d5296016bd821bbe9f0df780be72fc00a1f0d179d9c5f0f", size = 2387517 }, + { url = "https://files.pythonhosted.org/packages/8e/27/9530c58ddec2c28297d1abbc2f3668cb7bf79864bcbfb0516634ad0d3908/netcdf4-1.7.3-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:949e086d4d2612b49e5b95f60119d216c9ceb7b17bc771e9e0fa0e9b9c0a2f9f", size = 9621631 }, + { url = "https://files.pythonhosted.org/packages/97/1a/78b19893197ed7525edfa7f124a461626541e82aec694a468ba97755c24e/netcdf4-1.7.3-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c764ba6f6a1421cab5496097e8a1c4d2e36be2a04880dfd288bb61b348c217e", size = 9453727 }, + { url = "https://files.pythonhosted.org/packages/2a/f8/a5509bc46faedae2b71df29c57e6525b7eb47aee44000fd43e2927a9a3a9/netcdf4-1.7.3-cp311-abi3-win_amd64.whl", hash = "sha256:1b6c646fa179fb1e5e8d6e8231bc78cc0311eceaa1241256b5a853f1d04055b9", size = 7149328 }, +] + +[[package]] +name = "netcdf4" +version = "1.7.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "certifi", marker = "(python_full_version < '3.14' and platform_machine != 'ARM64') or (python_full_version < '3.14' and sys_platform != 'win32')" }, + { name = "cftime", marker = "(python_full_version < '3.14' and platform_machine != 'ARM64') or (python_full_version < '3.14' and sys_platform != 'win32')" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and platform_machine != 'ARM64') or (python_full_version == '3.11.*' and sys_platform != 'win32')" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64') or (python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/07/dfdd017641e82fadaf4e043d91fa179d34940c7d69175a3034dea877df9c/netcdf4-1.7.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b1c1a7ea3678db76bf33d14f7e202385d634db38c5e70d8cf4895971023eebb9", size = 23499427 }, + { url = "https://files.pythonhosted.org/packages/a7/6c/8cd98d166f30d378488c5235457d6af7df09f9925ab5ad03d6840543f42e/netcdf4-1.7.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d3f9497873454207f9480847d02b1b19a4bc81ad6e9166e1c17d4e2f8f3555d1", size = 22886591 }, + { url = "https://files.pythonhosted.org/packages/08/1c/ab31713a95160ebc6b4ec495cd4f03f38b235188a7e955bf33703c5039ca/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8e18294af803e80f8c0339f791901942e268c334c099bbd5f7ea8325a49801a", size = 10336881 }, + { url = "https://files.pythonhosted.org/packages/26/d7/bb16993af267acda23fe3de4ead2528cbe49043e391f732a1a4a15beec20/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b06c0b93fd0ecc1ec67a582f3ba98b7db9da1fa843c8f83fd75990e3701771e", size = 10182772 }, + { url = "https://files.pythonhosted.org/packages/9b/a6/e6fca338488a896c5e1f661ba3007e83f46700e1a59552b05013d501bc45/netcdf4-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:889ba77f084504aebaba9c6f9a88ac213431fef0e897f887cd35aef351ff7740", size = 21363337 }, + { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499 }, + { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667 }, + { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769 }, + { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122 }, + { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637 }, + { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377 }, + { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821 }, + { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133 }, + { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635 }, + { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725 }, + { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258 }, + { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171 }, + { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579 }, + { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032 }, + { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653 }, + { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682 }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194 }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111 }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159 }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936 }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692 }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164 }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877 }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487 }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945 }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406 }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528 }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119 }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246 }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410 }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240 }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012 }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538 }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706 }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541 }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825 }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687 }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482 }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648 }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902 }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992 }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944 }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392 }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220 }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800 }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600 }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134 }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598 }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272 }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197 }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287 }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763 }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070 }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752 }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024 }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398 }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971 }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532 }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881 }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458 }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559 }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716 }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947 }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197 }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245 }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587 }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226 }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196 }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334 }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678 }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672 }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731 }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805 }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496 }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616 }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145 }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813 }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982 }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908 }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867 }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511 }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064 }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157 }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728 }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374 }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286 }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263 }, +] + +[[package]] +name = "numpy" +version = "2.5.0rc1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d3/e1/f2fe8f6113a657a1da83b358b16755e528a602c6976a43724a88f42b482a/numpy-2.5.0rc1.tar.gz", hash = "sha256:4de3e0d48e58ef53e32c756bddea2722b9dde7ec25f96afc5fe7ece620cc4cb9", size = 20610894 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/d5/39a7bac854c1c228d62e48535f431b6901159a1e054b39d13da363fe5fd4/numpy-2.5.0rc1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dc5f26f2155b2a64938adec26cd4652660e34588612cb08fe5e65860e638235a", size = 16790758 }, + { url = "https://files.pythonhosted.org/packages/da/a2/ede0d2a76e84f0a35796ecd3a2c8f9973b35bdc947ca3a395f3c7a72a157/numpy-2.5.0rc1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:859c145cf7ebe885a0c579a80bccfed9b35ceb6bbc23131149b118919764f407", size = 14807438 }, + { url = "https://files.pythonhosted.org/packages/c3/9a/c5b3472279f4c363c3919830a8005073d4cd6fb73816f1f9f8f5345405a6/numpy-2.5.0rc1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9cca573cd3610227420f3045a90bb5fd414f536043be16d8e46c8229830d244d", size = 5313467 }, + { url = "https://files.pythonhosted.org/packages/ae/50/aecf9566e752f8ee0c16367932ef061fdacdfcc02b87e13ecefa6a163a1b/numpy-2.5.0rc1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:5f75ef317f45dae8090124630254b842b3cc10eea7db4f7f1a688f37cd285d2f", size = 6650465 }, + { url = "https://files.pythonhosted.org/packages/94/d7/dad93b29f68ccc2310f3a071212eb2a60bd05b42f2bd50a3b807dcfa0323/numpy-2.5.0rc1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1586c886dfff6d814541ddedfa1317c4133ad2f171b89c8578b08f1d103a57c", size = 15153866 }, + { url = "https://files.pythonhosted.org/packages/9b/ea/0c9ebeceb3ab32585946799eb2ec86ff55d6b39d310e814c44855bd1d07f/numpy-2.5.0rc1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1763247152f2c929cf21767dfa36b2d3d91c304218e0751b79849859d595f50", size = 16661583 }, + { url = "https://files.pythonhosted.org/packages/cd/74/a2d32f679cbfe23c7202613c73a654be1db4cee933bc332ab835ad3de1ef/numpy-2.5.0rc1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ddfeee2c7a587838c578fb999aba1523fac7cea2802ec24b25c8eb8fec2214ac", size = 16513414 }, + { url = "https://files.pythonhosted.org/packages/d0/c7/935e9164ad43852ade3b8cee0340dc20fe461f1682b9071cc4e2b76acff6/numpy-2.5.0rc1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5417326ce746c188be90e817b3471e97f11616ae2ac7d190aa3c128971b9b93a", size = 18417787 }, + { url = "https://files.pythonhosted.org/packages/12/1a/bb52a27340e606d0b78e17bae36c11bf59c070f758889b2cacea984b58e0/numpy-2.5.0rc1-cp312-cp312-win32.whl", hash = "sha256:99cf48d26b3341361d3d70fc7490af1499de41d2dba28a721a835acc83cb2d87", size = 6053661 }, + { url = "https://files.pythonhosted.org/packages/47/70/c75cd23d7b49821dec7f0c5ae29e858d3f686f83b0b4ecfdc4c7a39db80a/numpy-2.5.0rc1-cp312-cp312-win_amd64.whl", hash = "sha256:e4afd8387b6617e61ecb0ceb60080c342366767b046fcc5c80516f19442f269b", size = 12416233 }, + { url = "https://files.pythonhosted.org/packages/c3/6c/c0ab9acddf4a4ca6fe77236938a9b85ad5227efaf628fc6e39b750276146/numpy-2.5.0rc1-cp312-cp312-win_arm64.whl", hash = "sha256:c072a4e5cad53345ab6ee29ca5b1a44df3cbc38991d066af71e6246583294e32", size = 10334234 }, + { url = "https://files.pythonhosted.org/packages/f9/2c/6735b782a68595ba9cd6f453d5cef8e637b6ee89af3555e8074e5084f188/numpy-2.5.0rc1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:342294d39fbaaf93d33c8950d6b4fb873034e5eabbb67676190dd79c07ba10af", size = 16785923 }, + { url = "https://files.pythonhosted.org/packages/00/24/1864bcfea4adb5fbffdb8063ae7993f537cb168fda1cfadcec3eb1afc940/numpy-2.5.0rc1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d3b9d87c617fbd05b9afb38cacd56a9f60e2d3c0dd96a7278028a07a1362e948", size = 14802138 }, + { url = "https://files.pythonhosted.org/packages/fc/f5/c15966ab370698ca66c8a64ac86172cbba3b62e9355f51c5b7f4c11a5840/numpy-2.5.0rc1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6b29138613d32227696eaad490d136cc114c2b3742cd379509d69cb97c013939", size = 5308122 }, + { url = "https://files.pythonhosted.org/packages/63/46/ab26a2d69fe6babd2883c1d4eead5dfba869525b239e3152c02ea7a92cc7/numpy-2.5.0rc1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:8954bbb79e6ebc60e218b97168603a02475745b557ee0749f36da131e553fffd", size = 6645557 }, + { url = "https://files.pythonhosted.org/packages/96/a8/e6265c8deacae8445a591186baa507da578eebbb8799a64230119fbdc18a/numpy-2.5.0rc1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a8bdefbd3b2c8ec3e060f0aeccbd7db4d10658de34fa9c161304a876d4b7a57f", size = 15149536 }, + { url = "https://files.pythonhosted.org/packages/f8/cb/38e09c2d8d8af874ae9650d51ba74fb65af5e016e10154454e4f585699d7/numpy-2.5.0rc1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a4c5bccef100aad3ca67f0c82fec6c9c41d93f45af082765a49248af9e4aa4c", size = 16648175 }, + { url = "https://files.pythonhosted.org/packages/18/b4/74ad66aab93cf2e45b01ffc00b552d988d2d3c7978f3b6f90415adf4529f/numpy-2.5.0rc1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fe949230df0a1c10e75e4ddbd0b382f1773c04ff8e4b988b43a3386b80885dd5", size = 16510274 }, + { url = "https://files.pythonhosted.org/packages/b0/c6/9025469bac3f2e11e327058e94e872b08d3e8eb22f9985ae20a05f46edbc/numpy-2.5.0rc1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9352b974bded4f5e82dd94c028207bdc26c5051c9aa76508215c8430a9f98047", size = 18406033 }, + { url = "https://files.pythonhosted.org/packages/e1/c8/e19a496ae871db9627f16c52ab7ba5393a2404dccefcc4c295c60b593da6/numpy-2.5.0rc1-cp313-cp313-win32.whl", hash = "sha256:79316ee5595e364c589a7d4b910006a818a2f8455e13ca1b544144d3b26b5c16", size = 6051769 }, + { url = "https://files.pythonhosted.org/packages/31/e6/899d0ae5ca1c12af50c84a251b3a9807326ac6f2549289d3318649b60f1c/numpy-2.5.0rc1-cp313-cp313-win_amd64.whl", hash = "sha256:009be5174f1d8ebcc2f246eb1606c3e695a864f7d79821f3be5d7e2758213753", size = 12411388 }, + { url = "https://files.pythonhosted.org/packages/db/31/aad462df2fda6948de95329dc1cb1d7f45651e51407937266f132b6a3e98/numpy-2.5.0rc1-cp313-cp313-win_arm64.whl", hash = "sha256:cc5330a6613229cc2511dd36578a0eb853e0aa6c248cf8d0a880bd775b8000e3", size = 10334033 }, + { url = "https://files.pythonhosted.org/packages/d7/26/defbaa994ef5a2626a5c0d22a4d6e7c9f53c4699a3a534f03abbaa1cb1c0/numpy-2.5.0rc1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d672d8b3414f94d170dd4903b594c44bec4ae5ac1fcf37fe61e7cb0eb94f510d", size = 16784532 }, + { url = "https://files.pythonhosted.org/packages/77/93/cac22c6d06e9a7220a1c167dd6cae45658460d8843f7b38c58673d9c4896/numpy-2.5.0rc1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a123a7f1ee049548835eea5af9e10f31ee1b334215b45b3fcc4a6f9240faa9e4", size = 14813009 }, + { url = "https://files.pythonhosted.org/packages/56/69/2f4fa0a9deb91de9d4b5384e19b396a4bbfb9de38a30134a07e5e59aa8f5/numpy-2.5.0rc1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2461850c9e41a1abd79fa8538b52bc7a828a8f5565398d3f9a7bf2da4e891fdd", size = 5319042 }, + { url = "https://files.pythonhosted.org/packages/f0/11/3448e6923d5e342e08d3929878472791d2e04ed4b348959a994d6b4f936b/numpy-2.5.0rc1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:f6c70078f019426adda42de7ed2369b7631ed41ee2cec7064b2f90db23ac6507", size = 6642057 }, + { url = "https://files.pythonhosted.org/packages/70/5b/c2885366e1e4c68f4c5683bedb4caf7f868a80b813269ae4e157b30b9b53/numpy-2.5.0rc1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00a7bcd1be5d066f7ff834706f2ffb6aee7ebbb544236b5293e5c702a5dc22b7", size = 15167044 }, + { url = "https://files.pythonhosted.org/packages/08/ff/8b877f5e097518319cc6c9dbb78c0dfed378109cf719b94dfa0a39d4d386/numpy-2.5.0rc1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:799814f0986b8fd3275b125b8efb1f066b3a9d1454d753e70648f38fb488bf0d", size = 16652160 }, + { url = "https://files.pythonhosted.org/packages/c7/d2/c8997aa8d92f599afec8b5c9d8e5f11a847cb894eee98a91cdde00b694f1/numpy-2.5.0rc1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4642001be298cc2b47d567feb499d4aa9a9b88dca795d6f147ceb16ebd685ff0", size = 16523955 }, + { url = "https://files.pythonhosted.org/packages/2f/5f/07de8d32301763b19a88fc8b63b0175971de3879537d0f501433bd736067/numpy-2.5.0rc1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:19592531defb5237022cd60120b4aea1639065cd05cdf0bde731a2ed96eff6ab", size = 18410190 }, + { url = "https://files.pythonhosted.org/packages/d2/0c/ed1012f7dc187de21f21b634161f9661c702c713973aaf339463009d4495/numpy-2.5.0rc1-cp314-cp314-win32.whl", hash = "sha256:dacc0758f3b01f15fbc7a0e57d868d5ba55d19fc2fd19a979b8f8d00cb5e13d4", size = 6104044 }, + { url = "https://files.pythonhosted.org/packages/b6/04/e24e16f1dde491350c64e82a37317da5f8f264d129ed4f9b5f117d4a4dfc/numpy-2.5.0rc1-cp314-cp314-win_amd64.whl", hash = "sha256:6089d453e0e6828f918636677fbceca9a82674b32f1fb327f9b1ee494ea36688", size = 12547661 }, + { url = "https://files.pythonhosted.org/packages/a4/d3/0b9bb44def2b4dbd6c962e30db3048a77c1ef3e8a3c1d9d57e95102b125b/numpy-2.5.0rc1-cp314-cp314-win_arm64.whl", hash = "sha256:185b5534a5e7d1d63742fefa30fe023f6372c2dc501a7944ab751598e3d1e0e5", size = 10611115 }, + { url = "https://files.pythonhosted.org/packages/32/85/2c2d9798cf5ece4a2ea2fdfa6446e829c7038924885432643e26cd539d58/numpy-2.5.0rc1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9b042e0c0e565785f7a949238c6f133b79b81798916764802c4fe6e42ec44152", size = 14929474 }, + { url = "https://files.pythonhosted.org/packages/3e/7c/63e362acb28a1829897d6ebddf5ff0b574296c33ba8c1ae8afe5b688c546/numpy-2.5.0rc1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:d6f5f960cf81af1bab473ae447b9bc0eeddfe75daa5c6d40666a06c64c85b935", size = 5435431 }, + { url = "https://files.pythonhosted.org/packages/3d/65/a50dd4c4b95bafe57cd578d2c80ef28e6f9b961c138eff6482147cf7e2c0/numpy-2.5.0rc1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09d9c6728008dcfe9b5fafb78000a1349176d095e25abae7828026eb8922a3ab", size = 6745844 }, + { url = "https://files.pythonhosted.org/packages/18/9c/e1e6dde63fa7b7df6bebd97c5f2ec91e918c58a264423338ae1ce2fa06dd/numpy-2.5.0rc1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a9e7396a878d06b74c3114753091178981cc1ed40de0afe924bed6961e5d53b", size = 15212366 }, + { url = "https://files.pythonhosted.org/packages/85/20/f11412d706cc3622a55a4a5d04bcc6ac1a77c935cb5771c5629a6304b799/numpy-2.5.0rc1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b13412a84ce0b894c63148a68ab743b7f405f696dad6a7e72d9534f535137bd8", size = 16688617 }, + { url = "https://files.pythonhosted.org/packages/01/c7/4002b397c8ff3fc1c0109ddb9f5b9cc0c10a16f1627e96c63d8a8fba83d4/numpy-2.5.0rc1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5b32736a68a67c0935a678e92a798209f3acbf857306cfe1a807142cb7a6c7c9", size = 16577833 }, + { url = "https://files.pythonhosted.org/packages/14/3e/3316e3b6db7505df3b8f66e74d5e102be4b9297a5661ba0f95df74991e96/numpy-2.5.0rc1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:28865f569d8c0caf71a3de85c95fd1f021aedb732bdd21bb1e37ed3a17644672", size = 18451445 }, + { url = "https://files.pythonhosted.org/packages/60/27/dca162784210d5046a0e83128614d07e42e0196c240e32679b55d65cb3a0/numpy-2.5.0rc1-cp314-cp314t-win32.whl", hash = "sha256:a06ddccbcc74b3bdc63a8f781af8792b4dcb2bec9a39c0ff3c630372e638a1c7", size = 6251446 }, + { url = "https://files.pythonhosted.org/packages/60/b1/bb7e49625673e0398d3ec6d1a7a7a46ba044569c8b6373d58d9931d1b823/numpy-2.5.0rc1-cp314-cp314t-win_amd64.whl", hash = "sha256:6a9405558adc50738a254e68c786467f7ab74a523a2689c51fb003863b8289c7", size = 12732397 }, + { url = "https://files.pythonhosted.org/packages/53/dd/bec9b508b770988aa3218de36847f31b0bab94699e83d9d3d401379718df/numpy-2.5.0rc1-cp314-cp314t-win_arm64.whl", hash = "sha256:e2857303f8c8bfe897addc98099dd166a192fe847dc5147a5d7e49625143edcf", size = 10680555 }, +] + +[[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.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "python-dateutil", marker = "python_full_version < '3.11'" }, + { name = "pytz", marker = "python_full_version < '3.11'" }, + { name = "tzdata", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763 }, + { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217 }, + { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791 }, + { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373 }, + { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444 }, + { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459 }, + { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086 }, + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790 }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831 }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267 }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281 }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453 }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361 }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702 }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846 }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618 }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212 }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693 }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002 }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971 }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722 }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671 }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807 }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872 }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371 }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333 }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120 }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991 }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227 }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056 }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189 }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912 }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160 }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233 }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635 }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079 }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049 }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638 }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834 }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925 }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071 }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504 }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702 }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535 }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582 }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963 }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175 }, +] + +[[package]] +name = "pandas" +version = "3.0.0rc1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.14'" }, + { name = "tzdata", marker = "(python_full_version >= '3.14' and sys_platform == 'emscripten') or (python_full_version >= '3.14' and sys_platform == 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/c5/f2825785a7323c8d7ea4f38ca9827ddfc39b85daacaac65478f9c7b8883f/pandas-3.0.0rc1.tar.gz", hash = "sha256:76bfc5790d0b713d082a0b2094d6e4af7399bfb3dd6207cc7046fe4de73c09de", size = 4591349 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/09/4424270dca9439bd160cffb0ec14ff64ba1db7e6faa175460b7f597091a4/pandas-3.0.0rc1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:48947da2aa7bba25eaec003a9371cc226923d315b23f4ed0d789cedd26d36d9b", size = 10254993 }, + { url = "https://files.pythonhosted.org/packages/aa/97/02d214ae964f785e7d44369376a6c2cadf16d2b60f74f5a41e07e962a5f2/pandas-3.0.0rc1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3bc0fea0ea8f880ad25c5cbb7127062329db4e2f9359987a28e73d323ed86ea7", size = 9857564 }, + { url = "https://files.pythonhosted.org/packages/9f/d4/a8f326866ab231f47b271d73572fb9b88305d9a8a3b39651e26e5be73fdc/pandas-3.0.0rc1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef6d93391a3141d1fcee0a840d7c643a010cbccb6788cb54005083e0d5a419f1", size = 10692582 }, + { url = "https://files.pythonhosted.org/packages/db/65/6cb69ff29c0ca1c247c7a8ddedef413743da8b812cf3422c2f76a93f39ff/pandas-3.0.0rc1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a292c1c3f942a303503b31b3fd3208a322996eed11750216c030d33abf14e65f", size = 11189923 }, + { url = "https://files.pythonhosted.org/packages/ef/ba/7de315c1b1b92526f7292889728d2b06d0643b55155485a15537c33f3328/pandas-3.0.0rc1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b991708cfa6b9614a8ea456f024ed1e4ce8d63bc5ae50e10f8d1feb0910ce9c6", size = 11705445 }, + { url = "https://files.pythonhosted.org/packages/c0/5b/98411c9cece8610d67f2726c0c2fb00da440bd5f02f85094e1bb9ea713af/pandas-3.0.0rc1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1f6c00b691e0ebd61bf0f33c36b449146749825a49d3b06130b095a13e32fe84", size = 12264634 }, + { url = "https://files.pythonhosted.org/packages/03/d9/605cd207628168a8358cede23b7d3583b84668c4e7d1e4991e4a05812cdd/pandas-3.0.0rc1-cp311-cp311-win_amd64.whl", hash = "sha256:3648f1ac0d3b14511c0b386e91a69035ac69f61718130e0e8539bb0babdd6702", size = 9830326 }, + { url = "https://files.pythonhosted.org/packages/be/ef/74c19261a88961e2a20dadd40e07d75f2656d054131fe8296c1334d7676b/pandas-3.0.0rc1-cp311-cp311-win_arm64.whl", hash = "sha256:dd24891447a8934157850676ed129ac0cd98402eb93f07b782fcc9fa93d4536c", size = 9086258 }, + { url = "https://files.pythonhosted.org/packages/4f/0a/7f123a0f7578e6a8b94991d266cfa130ee45fa18f6a5b2f75a4ac7d2ba88/pandas-3.0.0rc1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ca0f232f96b03a5ad740a4d1eeec645468cd5a8483d6b1837a734504c4eec563", size = 10275419 }, + { url = "https://files.pythonhosted.org/packages/2c/a4/9bc11e764c2486eb424467873423a5bce0f596da3497f4611d3820ed17d3/pandas-3.0.0rc1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:004af2dbf173c2fe9995dabe718af838c4d8671e7106fd4bb613929fb001a82d", size = 9819488 }, + { url = "https://files.pythonhosted.org/packages/a4/51/393a842e02e61c9bdfeaad622640dfd56169527cdce5e445b0d8d6452194/pandas-3.0.0rc1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbf7e33a97ffb6dc03db963468e4cd66d5e6ade5fa5e8c4dfcb3fcc0ceea6e6b", size = 10329689 }, + { url = "https://files.pythonhosted.org/packages/52/5a/6da76c91a7f63d319d0c5b3d3a0a69bd1d16c328d363c6ae67ff16f7c6ef/pandas-3.0.0rc1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a6658025142d593a2bfc1a9f682241ce9212ca74ab51baea82806719c51ebec3", size = 10808895 }, + { url = "https://files.pythonhosted.org/packages/9f/c4/25742560c6152ed536711c8a1c3faa76fd49830f83753bc1d058311e8b3b/pandas-3.0.0rc1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b825dc038231e30d5c37c4964a9e49268728c8b0b85387f99099554f55c18268", size = 11344446 }, + { url = "https://files.pythonhosted.org/packages/71/ca/434f126314d248b7cdf5d5fffbbc636fddb9558c846bdbf296bde2fe1525/pandas-3.0.0rc1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4cca8813044026ffc2b1a8605373b4b0732ced718bd7aeabbfe0e48221fa99d4", size = 11859023 }, + { url = "https://files.pythonhosted.org/packages/5a/31/d4bf97305517461832a9902b637a860adf1a7eec75c3e69cc6f9f4bfae4d/pandas-3.0.0rc1-cp312-cp312-win_amd64.whl", hash = "sha256:ac7db90ab91f48d1b1e6097aa9dbe61b969779656823ec7763969a50e866a772", size = 9678063 }, + { url = "https://files.pythonhosted.org/packages/71/5f/a2eb25c8a875c52d2a8646344c98820cb258d325a7dd8c8ca172fcfae36d/pandas-3.0.0rc1-cp312-cp312-win_arm64.whl", hash = "sha256:34248e90a4cf78e23a4f200e7170f130aaff4ea0dd8658f86d9e4a17bf547dd6", size = 8987736 }, + { url = "https://files.pythonhosted.org/packages/9a/79/8c6fafc30524eb0e2e5a82393ecb2406e7d6de5481ecef7e13bebd275aa5/pandas-3.0.0rc1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:044db67a11f7e0929abc0fc185b5eb0c5acaaae49a530bd0465fe575d45957be", size = 10254087 }, + { url = "https://files.pythonhosted.org/packages/9a/ff/8769cfa4385b68971ca1c06507fec1b860e27882067b22fe5bfb33d8edf4/pandas-3.0.0rc1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:120f7af1ae1b8efada81d056055372fc290d4ce1d600d76dc890a19b6d2e8d5c", size = 9795585 }, + { url = "https://files.pythonhosted.org/packages/36/52/987234b57de087c0033b759b5e5187df18a6901513a7f249ab001380b1f3/pandas-3.0.0rc1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73be4d724c2ffebdf8ff23faa4c8df6d67b1ec3194ed71e9fbe0cc50c50ce938", size = 10295946 }, + { url = "https://files.pythonhosted.org/packages/83/90/bb1954b289edc504d762e83fe20258ee5e4f79fced57da2a428189469429/pandas-3.0.0rc1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d3587fe2721fa5f7471c296d559cb4517b4fe49981bd659f78ca08e45ff7f4", size = 10807690 }, + { url = "https://files.pythonhosted.org/packages/fa/17/bd30bda0940505aa495a9fde45ded79e396ba7c58fd0f857a9e4a682ab02/pandas-3.0.0rc1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:03a05703a2ed9973d2c0d5e694746d5d49f0388993f0976b3749e298134a96ea", size = 11315199 }, + { url = "https://files.pythonhosted.org/packages/b7/50/999d89d7c2091fa8edaa6f62fa4c860e181e58d1abe399c15297b0007c17/pandas-3.0.0rc1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2f1044833fde08efb3b704103c6101b036d14c7235794ab46dccad63f636037f", size = 11862393 }, + { url = "https://files.pythonhosted.org/packages/09/84/9d0739fcba030ef4fceb44d2f3cfeadd979f64c3401e6744a9065957585a/pandas-3.0.0rc1-cp313-cp313-win_amd64.whl", hash = "sha256:87b5a0bdb6d84cf084f00385d9d1e13ed021f06ed6ff56ab00c5b35426065626", size = 9679758 }, + { url = "https://files.pythonhosted.org/packages/57/03/9d5f9cda9d20c5088378fc0b6b61b321563690dea2d38f9858ae6c26034b/pandas-3.0.0rc1-cp313-cp313-win_arm64.whl", hash = "sha256:bec194517d86e787e622a7c222c0ac79684fe2199402f23b40dcd1777ec5cd0b", size = 8978875 }, + { url = "https://files.pythonhosted.org/packages/6e/ca/bb0d50f789f2d2265ebfa0c447bad55d0d23b5ad3f378553c56fc9f5e4ed/pandas-3.0.0rc1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:73090fae0db99be7d592e31705641e0acdeb64adc8d004bde0d3301e90da79b5", size = 10688695 }, + { url = "https://files.pythonhosted.org/packages/52/f7/312ecbcbf946da8e13b80b54b22d199c28ee984d48f1c18bd26ae0da0bf0/pandas-3.0.0rc1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:487e849ef1e54fe4b1fe77263395bf89d7901b774bd8dd277812a46f30739921", size = 10340069 }, + { url = "https://files.pythonhosted.org/packages/f4/f1/d0afce2464d7c5b80bf013031e2284e8af5ef953a53b23276b6d6de63d78/pandas-3.0.0rc1-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb1da63e460ee42a657e29a9a6b924f7dc2d17af4490b633ce1bd77ffa43bf0b", size = 10248902 }, + { url = "https://files.pythonhosted.org/packages/2e/7c/5b3f307a4ad22958c65643f4dc5457a113bd510fb9034742b737d56b553c/pandas-3.0.0rc1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b4b3ad6681d8d6228be3e256bdb68adc1c5d1baccfb89506dde6f015e828bead", size = 10646068 }, + { url = "https://files.pythonhosted.org/packages/b5/ed/b1de6ba7b15ef69087148cdaa5ce7943504c8eb3f93cd591a3d8780e7f65/pandas-3.0.0rc1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2b1f8a762bb83b6ad43463d1eb6ff0723078f0c5388fb1b2bcd901e2e6c78577", size = 11269830 }, + { url = "https://files.pythonhosted.org/packages/37/55/09b48513324c501dc44256630c596539769d48bb5ad63f1a9a3844852e07/pandas-3.0.0rc1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eba48d31c0bd8a6e7875e19a2091fd2d6d5eb99288ac99f164b29819f3cc07e0", size = 11715984 }, + { url = "https://files.pythonhosted.org/packages/1b/58/005a7a65495ceaa8f33af59357a0956ebab675dc94c34237bdc055681490/pandas-3.0.0rc1-cp313-cp313t-win_amd64.whl", hash = "sha256:637d2ce2463550fc3850da660659f747083d608e5882f66becebf74816c5493d", size = 10415674 }, + { url = "https://files.pythonhosted.org/packages/09/03/fe99286d560985875d3e1262dec0836b40464a7f1b2831e1753c9888def7/pandas-3.0.0rc1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ea4381c9dfcfc4411f1d1a3e343f75aa19fff02a76e5137bfb6ac5e20f4c7d59", size = 10254348 }, + { url = "https://files.pythonhosted.org/packages/23/f2/70225a80286d23c1769e6c83765b7472f7939a63df3182a0d14c2a460151/pandas-3.0.0rc1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:95277356c9db56be89e156848feedc63e9f904f8f5ab41846fed32173a8d541c", size = 9845954 }, + { url = "https://files.pythonhosted.org/packages/a2/db/3a776e1d45610ebfd6242597250260d4fac8e166ec0cf9921d3e44f022c3/pandas-3.0.0rc1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05c1906f250dee01b4c7c50b9b8094508297bddf6d9ebbe85c69be9dafa27213", size = 10375126 }, + { url = "https://files.pythonhosted.org/packages/a1/9c/b81fa64eb08add53afb9559a0d7ceef97b71b14c8bfa610c3b5029b76db1/pandas-3.0.0rc1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2d31e26f0d7281abfcf2a1bd06d9cbf1aadc2d4a879e32ec21d28c2c2089d231", size = 10829079 }, + { url = "https://files.pythonhosted.org/packages/ec/8c/5a1a185e06c39f9a74ceb5c14f726087f63c746af78de7ae5be350599fc9/pandas-3.0.0rc1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:12a8dc27d4eb67601b8cbf9d91860fa888cda71f709bd7faab3a782bae19770b", size = 11387158 }, + { url = "https://files.pythonhosted.org/packages/38/5e/976211fad4f53e3d6c01c628154b2479bad9775e325376e88fbd5738e2c9/pandas-3.0.0rc1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:43958f4d1c4752c2faf3c1c99017630c0588449ac85c6cc9d3d239711dddd7b9", size = 11896934 }, + { url = "https://files.pythonhosted.org/packages/8e/9e/be6624881769064b3f121a30bf7a89c9af198b1c75eef5ae69f4c53dfca9/pandas-3.0.0rc1-cp314-cp314-win_amd64.whl", hash = "sha256:5ab21f63f653dab4fc08d2069b0824d8cdbd270aaba9501bac91dde0fdb8dde4", size = 9797402 }, + { url = "https://files.pythonhosted.org/packages/18/52/fa78dc8fb20d43cb3d07f91d75c77651484674404d1258631b7ab31c811e/pandas-3.0.0rc1-cp314-cp314-win_arm64.whl", hash = "sha256:99189e4252c076f6d1e4920c586a83b9e035f82c9ff98fbffc6ecf29e1be5de4", size = 9125442 }, + { url = "https://files.pythonhosted.org/packages/39/b2/50bdb01a3aaf7293ec13ef2670c667236e01b76b949bd932b2a76fecf903/pandas-3.0.0rc1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:e41bdd1f06a6f99cbc59245a7765ee2c9ae991674ac7e0baaa39496aa57b6a36", size = 10710181 }, + { url = "https://files.pythonhosted.org/packages/3c/d7/1087ebda369b6876c45bfdcf0da45ffbfa30d0dfae46ad6f99742b0f81b3/pandas-3.0.0rc1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:548f52fe74e42e13df4f80adb454200c87b7fa174ff7f4ac02c4c7fcc32946a7", size = 10356297 }, + { url = "https://files.pythonhosted.org/packages/1e/50/17ee68dfc09fce0a22bbb0995638341beaae26862419b24347d6389e8de4/pandas-3.0.0rc1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdd95f95174fcc78bce40e97ca26c46ffff89cd57cf1d305b30e5d041b0aefef", size = 10271853 }, + { url = "https://files.pythonhosted.org/packages/66/8a/dca73266405348b09b18ec316b9abed924d512994f96df51bce2fa287375/pandas-3.0.0rc1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05015e0c0b6edd4b44eab818bf72d1f1604f39d5ac4bc975d5f042bdff858c54", size = 10674707 }, + { url = "https://files.pythonhosted.org/packages/ca/6d/339116388730ac9ccd10e7b491038dbab1c4cafec863deede7c4cc14994d/pandas-3.0.0rc1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b619f74031c8474b58ee75bd4fe5a56f89fe0009cdfbb0736b2eae3deca6dded", size = 11290051 }, + { url = "https://files.pythonhosted.org/packages/60/ac/4e0d391ae631f936a3710ced3e479045a40637bd5c86e5789429c89e627c/pandas-3.0.0rc1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9e7bdc6a804138950f5ca6e6fc873ace92c8a4d17ac23b6900a9c95b95d88e14", size = 11742749 }, + { url = "https://files.pythonhosted.org/packages/61/f8/aaaf23563baada8c5cea7f5d46b77c8aa71e7af683c1b731de1c719201b5/pandas-3.0.0rc1-cp314-cp314t-win_amd64.whl", hash = "sha256:34d8098a4e3ce9c0d6c235072be3ba3a94f42da4a884aa5ccdcde1f0aad47933", size = 10819676 }, + { url = "https://files.pythonhosted.org/packages/6e/50/1f57a2bafd90a6ddca96e05c015a79074ea5f1959904dd7be44124625df9/pandas-3.0.0rc1-cp314-cp314t-win_arm64.whl", hash = "sha256:85dbfc9cc0b26f6f07b91c66f357617fa6183985f887caf447f0b52c66cda232", size = 9389780 }, +] + +[[package]] +name = "pandas" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and python_full_version < '3.14'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, + { name = "tzdata", marker = "(python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495 }, + { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250 }, + { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558 }, + { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611 }, + { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670 }, + { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708 }, + { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609 }, + { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596 }, + { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846 }, + { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550 }, + { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965 }, + { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600 }, + { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824 }, + { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889 }, + { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463 }, + { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158 }, + { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071 }, + { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690 }, + { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634 }, + { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243 }, + { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659 }, + { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880 }, + { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091 }, + { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282 }, + { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016 }, + { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210 }, + { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126 }, + { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051 }, + { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796 }, + { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741 }, + { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958 }, + { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065 }, + { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101 }, + { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553 }, + { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065 }, + { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188 }, + { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966 }, + { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755 }, + { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658 }, + { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242 }, + { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369 }, + { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306 }, + { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394 }, + { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717 }, + { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897 }, + { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855 }, + { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464 }, +] + +[[package]] +name = "partd" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "locket" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905 }, +] + +[[package]] +name = "pdbufr" +version = "0.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "eccodes" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, + { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633 }, +] + +[[package]] +name = "pint" +version = "0.24.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "flexcache", marker = "python_full_version < '3.11'" }, + { name = "flexparser", marker = "python_full_version < '3.11'" }, + { name = "platformdirs", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029 }, +] + +[[package]] +name = "pint" +version = "0.25.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "flexcache", marker = "python_full_version >= '3.11'" }, + { name = "flexparser", marker = "python_full_version >= '3.11'" }, + { name = "platformdirs", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488 }, +] + +[[package]] +name = "platformdirs" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743 }, +] + +[[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 = "pproc-runtime" +source = { editable = "." } +dependencies = [ + { name = "array-api-compat" }, + { name = "code-meters" }, + { name = "earthkit-data", extra = ["fdb", "mars"] }, + { name = "earthkit-meteo" }, + { name = "eccodes" }, + { name = "fdb5lib" }, + { name = "mir-python" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "thermofeel" }, +] + +[package.dev-dependencies] +dev = [ + { name = "prek" }, + { name = "pytest" }, + { name = "ty" }, +] + +[package.metadata] +requires-dist = [ + { name = "array-api-compat" }, + { name = "code-meters" }, + { name = "earthkit-data", extras = ["fdb", "mars"] }, + { name = "earthkit-meteo" }, + { name = "eccodes" }, + { name = "fdb5lib" }, + { name = "mir-python" }, + { name = "numpy" }, + { name = "thermofeel" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "prek", specifier = ">=0.4.4" }, + { name = "pytest", specifier = ">=9.0.3" }, + { name = "ty", specifier = ">=0.0.44" }, +] + +[[package]] +name = "prek" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/13/3d71b3adbf385f7dc7fb6e16d6e25421fd8398b45d8f8410a328bf22bd3f/prek-0.4.4.tar.gz", hash = "sha256:4ec5771153d158a0e4473933b7fd9b51e1b1f57f2df50aeb7560ea6812226dc5", size = 470641 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/9f/68a577888edf7f2647a652b02899508ccd84e57ce1f79c51a44edfd308d7/prek-0.4.4-py3-none-linux_armv6l.whl", hash = "sha256:23cfd96a25de1c93e3c43c746643b80489e3b2fa49ca9c0ffd6022e51535c900", size = 5550271 }, + { url = "https://files.pythonhosted.org/packages/35/b8/5427a0023116343a8d787b446536a7fddfa5db7eec7713dd05618da2bdfe/prek-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a427b792c4436f49732b1f6ebccf221fdcc6390c148474280da9c2c6eaabc9c4", size = 5910136 }, + { url = "https://files.pythonhosted.org/packages/9d/4f/d751e90b7e768e472e054cd41cbe502589436ca9c1a13bfe4fa9513f9cde/prek-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b998038fc92c990e03147eb5b95b0f2c394517f8857ab911aac8e092f1b9b3ab", size = 5470124 }, + { url = "https://files.pythonhosted.org/packages/c6/fe/e73241c5777b6f9b6b95132febbd27f9be9e89912e9e93c0982680593af2/prek-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:9cebca8c15da4f1d6e3a25e6ae0611425c8596e926222050f2588c390e42df8a", size = 5732725 }, + { url = "https://files.pythonhosted.org/packages/ca/a3/329bd910e7e5d9d0eb5e571f3ba48023213744e78411afb81f5ef8356cab/prek-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8742ac26363e74c855df6215a709d5db183204d00ac0f1a722b13aed4da3cd0", size = 5457953 }, + { url = "https://files.pythonhosted.org/packages/3d/f8/d642990513d9707398506bad45d39173d84266231f7d919899f694aefe2c/prek-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2b7c8710546a1e894afa7ab022030cd4e21f1ee7ffb301b4360773d22f1f00f", size = 5860556 }, + { url = "https://files.pythonhosted.org/packages/8d/17/a2e29cb278503a8c18612d8a62a15020648dc768e2e94bc4b4d4c9411e07/prek-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e02bd4d5e05c500e4d9f70f024e30d13aa361dc490724b7f476d2e35542c239f", size = 6652492 }, + { url = "https://files.pythonhosted.org/packages/ab/10/ad3270b18135ee5d1af6f6cf4b0c8601b1cc2cb38d16e835081da820833a/prek-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a25041733de987a47e5a7bace47182a6f0e2ae5f960cb54c1d4630afd2591", size = 6113837 }, + { url = "https://files.pythonhosted.org/packages/59/d9/e8c201b9b41c4561673cea01c630ab604df89d13e952f87dbcb807d32588/prek-0.4.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:0b04a0f36d07474f2a9fc5b1ba1197a1b326b2b211f39cd74cf0d4613545f7f4", size = 5729155 }, + { url = "https://files.pythonhosted.org/packages/e8/cd/227b0494fcbc91e8fe15c2a4db9e6dfff95314ef38db3e40e6ea96db249d/prek-0.4.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f032ccbe2d6edc345f81a6d772c18cc169d63c27b5a8292bfe416b352bdfee57", size = 5590775 }, + { url = "https://files.pythonhosted.org/packages/cc/e0/9d750b9cf21ece884afdc15668d0f005a36588fe1b0bb5ff4a8112ab51cb/prek-0.4.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:bad3586fcea3e913f0edf2e8f132f97889e03976b7ee3d120fd294ad4e89a5eb", size = 5437864 }, + { url = "https://files.pythonhosted.org/packages/3a/48/e2e5c0299590ad18a253c0ac09508b615baa1b382010c511186572f711d3/prek-0.4.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4058638532c6dcbf0076d23b9264cbdd9f0f0e320762e237a6b9e4e4b854a766", size = 5718579 }, + { url = "https://files.pythonhosted.org/packages/54/48/7fb3d4e7f664d1ce8ae35ec553872ffddf9fab4c5081735fdaae610b1e7c/prek-0.4.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:619bab14071670249777deea0cc0b29d904c4a514cf33b20e583900a544f0399", size = 6231622 }, + { url = "https://files.pythonhosted.org/packages/46/c0/a4ddbf38034afe67cfa97c4bd81c86429ada098e7c323218d9f9fd061566/prek-0.4.4-py3-none-win32.whl", hash = "sha256:143154b329c05b2f9fa3230e604d02d9c4297dd43f96135a8ba166772e8ecd60", size = 5240317 }, + { url = "https://files.pythonhosted.org/packages/bc/8c/fe97b5b095187bb2f93bbe406bccf108c879e5e4c83f165809b0d16ce0fb/prek-0.4.4-py3-none-win_amd64.whl", hash = "sha256:c38c5140ae2ea55ebb02e6ca590a416664ea1af287cdd21f54daeec53a81015a", size = 5626104 }, + { url = "https://files.pythonhosted.org/packages/25/63/3586226d536796e65f8e725b531d6104e55caaa18659bdcb512661629586/prek-0.4.4-py3-none-win_arm64.whl", hash = "sha256:3efa28fb37b9ddbafb7759da8d497f0d36cf02a05816e15d6541f5669d5d2114", size = 5470399 }, +] + +[[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 = "pyfdb" +version = "0.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, + { name = "eccodes" }, + { name = "findlibs" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/b8/ee087c4bf0e8328eab5ddf738e1d9ee347a3463e6bbe3bf9d0c1b8b31379/pyfdb-0.1.3.tar.gz", hash = "sha256:b070f5dde8de850e82729d03c1e97a2f76281572624826383ac0049b3587352e", size = 17502 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/a8/b37e3e3398c54a33b994607e2808ef0de97809cbad3f0d784191862429eb/pyfdb-0.1.3-py3-none-any.whl", hash = "sha256:a9d3b69e19fbeb57bb0c6ccbe69d32fe3551e8b1eda4635c36ff6f88eacc2d66", size = 17202 }, +] + +[[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 = "pytest" +version = "9.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249 }, +] + +[[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 = "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 = "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/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227 }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019 }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646 }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793 }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293 }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872 }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828 }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415 }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561 }, + { 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/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063 }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973 }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116 }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011 }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870 }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089 }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181 }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159 }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626 }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613 }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115 }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814 }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809 }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454 }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355 }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175 }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228 }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194 }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108 }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641 }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901 }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132 }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261 }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272 }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923 }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +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.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075 }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +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/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490 }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751 }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696 }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136 }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699 }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022 }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522 }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579 }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305 }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503 }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322 }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792 }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901 }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823 }, + { 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/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086 }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053 }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763 }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951 }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622 }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492 }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080 }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680 }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589 }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289 }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737 }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120 }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782 }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463 }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868 }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887 }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904 }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945 }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783 }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021 }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589 }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025 }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895 }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799 }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731 }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027 }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020 }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139 }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224 }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645 }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443 }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375 }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850 }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812 }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841 }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149 }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843 }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507 }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949 }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790 }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217 }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806 }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341 }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768 }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099 }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192 }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080 }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841 }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670 }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005 }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112 }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049 }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661 }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606 }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126 }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371 }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298 }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604 }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391 }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868 }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747 }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795 }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330 }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194 }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340 }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765 }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834 }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470 }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630 }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148 }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030 }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570 }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532 }, + { 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 = "rpds-py" +version = "2026.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609 }, + { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460 }, + { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031 }, + { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121 }, + { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026 }, + { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865 }, + { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012 }, + { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111 }, + { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225 }, + { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487 }, + { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798 }, + { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053 }, + { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390 }, + { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097 }, + { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361 }, + { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040 }, + { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775 }, + { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329 }, + { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539 }, + { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674 }, + { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268 }, + { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280 }, + { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233 }, + { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009 }, + { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113 }, + { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838 }, + { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436 }, + { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734 }, + { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045 }, + { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967 }, + { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787 }, + { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179 }, + { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173 }, + { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162 }, + { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093 }, + { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829 }, + { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786 }, + { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920 }, + { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059 }, + { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030 }, + { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975 }, + { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178 }, + { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481 }, + { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519 }, + { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446 }, + { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287 }, + { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033 }, + { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891 }, + { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646 }, + { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830 }, + { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830 }, + { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613 }, + { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183 }, + { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578 }, + { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573 }, + { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861 }, + { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633 }, + { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074 }, + { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635 }, + { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756 }, + { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831 }, + { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127 }, + { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034 }, + { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823 }, + { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144 }, + { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959 }, + { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558 }, + { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789 }, + { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405 }, + { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975 }, + { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701 }, + { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806 }, + { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985 }, + { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219 }, + { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148 }, + { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196 }, + { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981 }, + { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961 }, + { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965 }, + { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526 }, + { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190 }, + { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921 }, + { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766 }, + { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343 }, + { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502 }, + { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916 }, + { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855 }, + { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422 }, + { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576 }, + { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640 }, + { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322 }, + { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066 }, + { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586 }, + { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415 }, + { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427 }, + { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615 }, + { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786 }, + { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583 }, + { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941 }, + { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349 }, + { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922 }, + { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003 }, + { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245 }, + { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015 }, + { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016 }, + { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775 }, + { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270 }, + { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285 }, + { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581 }, + { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041 }, + { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946 }, + { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526 }, + { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165 }, + { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778 }, + { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839 }, + { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866 }, + { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441 }, + { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151 }, + { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195 }, + { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850 }, + { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899 }, + { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618 }, + { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003 }, + { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778 }, + { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359 }, + { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820 }, + { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243 }, + { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541 }, + { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326 }, +] + +[[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 = "thermofeel" +version = "2.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/9b/467dc4de053aa5ba379ecc9ac000c62551520fc4bcc1a079ddbdbaebfa11/thermofeel-2.1.7.tar.gz", hash = "sha256:f034ffa8d8d096416cd94cc234a67db8afc2ae72ca872144c59e9fc104b09073", size = 38251 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/4b/90bb6dfe1828aae53d99c7fdbf5232f2a0037d9d30b2ac946c50366da319/thermofeel-2.1.7-py3-none-any.whl", hash = "sha256:ede7e3c4cb818803173468cb9a6b9ca9c91fc310fa93978eba24505bf9baa9e0", size = 42533 }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704 }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454 }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561 }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824 }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227 }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859 }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204 }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084 }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285 }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924 }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018 }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948 }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341 }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159 }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290 }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141 }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847 }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088 }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866 }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887 }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704 }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628 }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180 }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674 }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976 }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755 }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265 }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726 }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859 }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713 }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084 }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973 }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223 }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973 }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082 }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490 }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263 }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736 }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717 }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461 }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855 }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144 }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683 }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196 }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393 }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, +] + +[[package]] +name = "toolz" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093 }, +] + +[[package]] +name = "tqdm" +version = "4.67.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374 }, +] + +[[package]] +name = "ty" +version = "0.0.44" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/f4/fbb120226e4f239652525a664bad976a23fea58c646d1323f2296fee8a61/ty-0.0.44.tar.gz", hash = "sha256:5886229830ab77022842a1c55d2ef57405621a91fc465969fa6d538661898173", size = 5803665 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/c6/b5b8c4762efb4d85401652658786506867553ecfc2beac3bcf361a15937f/ty-0.0.44-py3-none-linux_armv6l.whl", hash = "sha256:272d31e7ad49b1dc5e8465a9fe700354e14c755b40d9c75f08f031d786903df3", size = 11607267 }, + { url = "https://files.pythonhosted.org/packages/1c/5c/f4b405570737f44ab0fc4214117fe43353f8f0825a1823d9e99e9c8e57be/ty-0.0.44-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b92c4ddd7a3daf2049715edec9dc70cf6fd31a5a318ee647258f90dd75495eed", size = 11382826 }, + { url = "https://files.pythonhosted.org/packages/9d/aa/fb9835aa492b148d7754cb4c3db07f31a7e2e09f0d8e0e8e297f01125dd2/ty-0.0.44-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4d42cfd84a690f6654b2a4f0515027c21b692cf2512d32e6433f754893a95609", size = 10809741 }, + { url = "https://files.pythonhosted.org/packages/47/f5/0b20ba6b66837a5a37bab7f74ac0732c66e766b5f0b2d55b30816b15f348/ty-0.0.44-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc47ae87e4cb7db2a9166bb23b78a905c3626e523296ec5bccf36b5e89bda6b", size = 11318153 }, + { url = "https://files.pythonhosted.org/packages/ca/bb/b82ea730774a4f950f06d355fbc120d51eac7da23b57fc79ef6ff7c79cbb/ty-0.0.44-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46d867e80f16f421ac72c9a85240dbf050d62d9b3fbd10a8b5b082fb21679e0b", size = 11403108 }, + { url = "https://files.pythonhosted.org/packages/8b/41/e2c83856165291049c702eda4e2ef3d3ebd875e8a0a77b8cc4ef3156aa1c/ty-0.0.44-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:411f5de0f96a4e4e5cccc3e0d55954c41f6a99ee6ca1fe5a7226cbc68406e053", size = 11944815 }, + { url = "https://files.pythonhosted.org/packages/66/95/1fa6a101eb9d5bec042b87e5ca9c8fc349b75961beca6306f95af5cd5539/ty-0.0.44-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b15f01ecb4e2b46c05a1769293f9d32c3d4a1e4e7dfccf37c604d705dc3e3f4", size = 12476121 }, + { url = "https://files.pythonhosted.org/packages/72/6a/da4b45b1229d39207c6140681c2aaf4f5691bcb1dc830b84450ca25c8f57/ty-0.0.44-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:edd32b7467af509c99c0244c2226a4e4c03400699003ec33373282ab931654d9", size = 12091340 }, + { url = "https://files.pythonhosted.org/packages/16/c7/e1c9260ea5188195962ff1214ace418b5d69187e8fa7c0a1ec4994b8071b/ty-0.0.44-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503a585f4007387c3afc58bae23a7ca1b9f236cbdb1a881dc36110655ceb1937", size = 11986201 }, + { url = "https://files.pythonhosted.org/packages/92/f9/312bb112da9b1a7da295bb0426be85e72ad48da4e4266c36d77256b4058d/ty-0.0.44-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d28bcfa83243d77c2316944e8cf197f73597bf17d1ddc047d0b10a762531252", size = 12168475 }, + { url = "https://files.pythonhosted.org/packages/02/de/64978d603f6c3e5dd7cb97eca2214567d8ad0c85fa4a7435b7852ae4b779/ty-0.0.44-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:56fd2dd0192def189715b25f5338f6222fb827884dc34111e50aa1c4e061cee5", size = 11292937 }, + { url = "https://files.pythonhosted.org/packages/64/63/a625d8a3c71dcaa01988d330f849c465fe72ead4b0bbab44fe4bd6e672b5/ty-0.0.44-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7f8d990489032de1984e73c159f3e760d754cf83a602b874827d943821f63595", size = 11421560 }, + { url = "https://files.pythonhosted.org/packages/99/96/61aeba0e629b0c91bd316ff94d00e38817ec493ae4316f39508988daa287/ty-0.0.44-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f61ffe72996a755432922fe90b28db593f572eb5cbf48e3ef4e67b282533d1b0", size = 11580282 }, + { url = "https://files.pythonhosted.org/packages/fa/f7/256e1538ce21cab67b381201444c42454de69d310059c4929d92a0ee9c48/ty-0.0.44-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2b237a143bac4f30cec9257d45f01e72da97030a80a09a2b69cfef065f09c37f", size = 12085723 }, + { url = "https://files.pythonhosted.org/packages/d3/76/ec3957c10872643a98db7a7895101ad89c5b7cba4bc6c4aebbbfc91756cc/ty-0.0.44-py3-none-win32.whl", hash = "sha256:6a24586c65419223ac5bab4822d49ab493a5d19ea2a897514284c232b9d6166a", size = 10892978 }, + { url = "https://files.pythonhosted.org/packages/a5/7d/ba24050432196e7d7f03945e5c379951593c48e04e5c5d5275cfc4624791/ty-0.0.44-py3-none-win_amd64.whl", hash = "sha256:8cccb27e348c89a9733fbad1b2efadfbad79b107c7e52adb52dfd8a70156a38d", size = 11987058 }, + { url = "https://files.pythonhosted.org/packages/71/34/16ec3f1fec75292d9c56a8b5fef037ceaba85a5c30562206c1a245a00a67/ty-0.0.44-py3-none-win_arm64.whl", hash = "sha256:58049504e7a12bf1957f24a5384a332c94d5590127083a80db5e5a1bed34190b", size = 11329961 }, +] + +[[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 = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087 }, +] + +[[package]] +name = "xarray" +version = "2025.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739 }, +] + +[[package]] +name = "xarray" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "pandas", version = "3.0.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326 }, +] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238 }, +] From bb84de9f32af5281126607846fdf65da3f5a1347 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 9 Jun 2026 09:24:18 +0000 Subject: [PATCH 09/95] Fix pproc tests and qa --- .github/workflows/ci.yml | 6 +- .../tests/ppcore/utils}/test_stepseq.py | 2 +- pproc/MANIFEST.in | 2 +- pproc/pyproject.toml | 137 +- pproc/src/pproc/Config.py | 4 +- pproc/src/pproc/__init__.py | 2 +- pproc/src/pproc/accum/__init__.py | 1 - pproc/src/pproc/accum/main.py | 4 +- pproc/src/pproc/anomaly.py | 2 - pproc/src/pproc/clustereps/__init__.py | 1 - pproc/src/pproc/clustereps/attribution.py | 3 +- pproc/src/pproc/clustereps/season.py | 26 +- pproc/src/pproc/clustereps/utils.py | 1 + pproc/src/pproc/common/__init__.py | 4 +- pproc/src/pproc/common/accumulation.py | 4 +- .../src/pproc/common/accumulation_manager.py | 2 +- pproc/src/pproc/common/grib_helpers.py | 2 - pproc/src/pproc/common/io.py | 2 - pproc/src/pproc/common/parallel.py | 11 +- pproc/src/pproc/common/param_requester.py | 1 - pproc/src/pproc/common/steps.py | 4 +- pproc/src/pproc/common/stepseq.py | 75 - pproc/src/pproc/config/accumulation.py | 6 +- pproc/src/pproc/config/factory.py | 4 +- pproc/src/pproc/config/log.py | 3 +- pproc/src/pproc/config/param.py | 1 - pproc/src/pproc/config/preprocessing.py | 1 - pproc/src/pproc/config/targets.py | 1 - pproc/src/pproc/config/types.py | 8 +- pproc/src/pproc/config/utils.py | 8 +- pproc/src/pproc/config_generation.py | 2 +- pproc/src/pproc/data/__init__.py | 1 - pproc/src/pproc/data/pts/__init__.py | 1 - pproc/src/pproc/ecpoint.py | 2 - pproc/src/pproc/ecpt/predictors.py | 3 - pproc/src/pproc/ensms.py | 1 - pproc/src/pproc/ensms_original.py | 215 - pproc/src/pproc/extreme_forecast_simple.py | 125 - pproc/src/pproc/extremes/__init__.py | 1 - pproc/src/pproc/extremes/grib.py | 7 +- pproc/src/pproc/flight_levels.py | 1 - pproc/src/pproc/monthly_stats.py | 1 - pproc/src/pproc/prob/parallel.py | 3 +- pproc/src/pproc/prob/threshold.py | 8 +- pproc/src/pproc/pts.md | 1 - pproc/src/pproc/pts.py | 3 +- pproc/src/pproc/quantiles.py | 4 +- pproc/src/pproc/signi/__init__.py | 1 - pproc/src/pproc/signi/clim.py | 5 +- pproc/src/pproc/significance.py | 1 - pproc/src/pproc/spectrum.py | 6 +- pproc/src/pproc/tcycl/__init__.py | 1 - pproc/src/pproc/tcycl/tcycl_evaluate.py | 542 +- pproc/src/pproc/tcycl/tcycl_run.py | 560 +- .../src/pproc/tcycl/tcycl_summarise_ibtks.py | 41 +- .../src/pproc/tcycl/tcycl_summarise_tcycl.py | 51 +- .../src/pproc/tcycl/tcycl_summarise_trckr.py | 307 +- pproc/src/pproc/tcycl/tcycl_tools.py | 90 +- pproc/src/pproc/thermal_indices.py | 51 +- pproc/src/pproc/thermo/__init__.py | 0 pproc/src/pproc/thermo/indices.py | 297 + pproc/src/pproc/wind.py | 138 - pproc/src/pproc/wind850.py | 296 - pproc/src/pproc/wind850.yaml | 28 - .../tests/common/test_accumulation_manager.py | 2 +- pproc/tests/common/test_io.py | 308 +- pproc/tests/config/test_accum.py | 4 +- pproc/tests/config/test_factory.py | 165 +- pproc/tests/config/test_io_models.py | 2 +- pproc/tests/conftest.py | 3 +- pproc/tests/ecpt/test_predictors.py | 1 - .../prob/test_prob_accumulation_manager.py | 4 +- pproc/tests/schema.yaml | 4852 +++++++++++++++++ pproc/tests/templates/clustereps.yaml | 2 +- pproc/tests/templates/ensms.yaml | 8 +- pproc/tests/templates/extreme.yaml | 8 +- pproc/tests/templates/fdb/schema | 1 - pproc/tests/templates/prob.yaml | 4 +- pproc/tests/templates/quantiles.yaml | 8 +- pproc/tests/templates/t850.yaml | 6 +- pproc/tests/templates/thermo.yaml | 14 +- pproc/tests/templates/wind.yaml | 7 +- pproc/tests/test_ensms.py | 53 - pproc/tests/test_ensms.yaml | 45 - pproc/tests/test_products.py | 3 +- pproc/uv.lock | 3721 +++++++++++++ 86 files changed, 10179 insertions(+), 2164 deletions(-) rename {pproc/tests/common => pproc-core/tests/ppcore/utils}/test_stepseq.py (98%) delete mode 100644 pproc/src/pproc/common/stepseq.py delete mode 100755 pproc/src/pproc/ensms_original.py delete mode 100755 pproc/src/pproc/extreme_forecast_simple.py create mode 100644 pproc/src/pproc/thermo/__init__.py create mode 100644 pproc/src/pproc/thermo/indices.py delete mode 100755 pproc/src/pproc/wind.py delete mode 100755 pproc/src/pproc/wind850.py delete mode 100644 pproc/src/pproc/wind850.yaml create mode 100644 pproc/tests/schema.yaml delete mode 100644 pproc/tests/test_ensms.py delete mode 100644 pproc/tests/test_ensms.yaml create mode 100644 pproc/uv.lock diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 70634600..fa9a4e59 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,7 @@ jobs: run: | cd pproc-runtime export UV_FROZEN=1 + export SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 uv sync --prerelease allow --python "${{ matrix.python_version }}" --all-packages uv run --prerelease allow prek --directory . --config ../.pre-commit-config.yaml uv run --prerelease allow ty check @@ -75,6 +76,9 @@ jobs: - name: Run pproc tests run: | cd pproc + export UV_FROZEN=1 + uv sync --python "${{ matrix.python_version }}" --all-packages + uv run prek --directory . --config ../.pre-commit-config.yaml if [ -d "tests" ]; then - uv run --active --locked --prerelease allow --with pytest -m tests/ -v + uv run --prerelease allow -m tests/ -v fi diff --git a/pproc/tests/common/test_stepseq.py b/pproc-core/tests/ppcore/utils/test_stepseq.py similarity index 98% rename from pproc/tests/common/test_stepseq.py rename to pproc-core/tests/ppcore/utils/test_stepseq.py index 51f7aa2e..7691e848 100644 --- a/pproc/tests/common/test_stepseq.py +++ b/pproc-core/tests/ppcore/utils/test_stepseq.py @@ -10,7 +10,7 @@ import pytest from datetime import datetime -from pproc.common import stepseq +from ppcore.utils import stepseq @pytest.mark.parametrize( diff --git a/pproc/MANIFEST.in b/pproc/MANIFEST.in index f5a2a159..1733a73d 100644 --- a/pproc/MANIFEST.in +++ b/pproc/MANIFEST.in @@ -1,2 +1,2 @@ include src/pproc/data/pts/*.grib1 -include src/pproc/templates/*.yaml \ No newline at end of file +include src/pproc/templates/*.yaml diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index fd157b76..68a8b4e9 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -1,84 +1,83 @@ [build-system] -requires = ["setuptools>=78", "setuptools-scm[toml]>=9.2"] build-backend = "setuptools.build_meta" +requires = [ "setuptools>=78", "setuptools-scm[toml]>=9.2" ] + [project] name = "pproc" description = "ECMWF Post-processing tools" readme = "README.md" license = "Apache-2.0" -license-files = ["LICENSE"] +license-files = [ "LICENSE" ] authors = [ - { name = "European Centre for Medium-Range Weather Forecasts (ECMWF)", email = "software.support@ecmwf.int" }, + { name = "European Centre for Medium-Range Weather Forecasts (ECMWF)", email = "software.support@ecmwf.int" }, ] requires-python = ">=3.10" -dependencies = [ - "code-meters >= 0.0.3", - "conflator >= 0.1.7", - "earthkit-data >= 0.19.0", - "earthkit-meteo >= 0.6.1", - "earthkit-time >= 0.1.3", - "earthkit-utils >= 0.2.1", - "eccodes >= 1.6.1", - "filelock >= 3.12.0", - "numexpr", - "numpy >= 1.21.2", - "pandas >= 1.3.3", - "pproc-core", - "psutil", - "pydantic", - "pyfdb", - "pyyaml", - "scikit-learn", - "scipy >= 1.8", - "thermofeel >= 2.1.0", - "xarray", +classifiers = [ + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] -dynamic = ["version"] +dynamic = [ "version" ] -[project.optional-dependencies] -tcycl = ["pyinfero >= 0.1.1", "wget"] -test = ["pytest", "requests"] - -[project.scripts] -pproc-extreme-forecast-simple = "pproc.extreme_forecast_simple:main" -pproc-extreme = "pproc.extreme:main" -pproc-interpol = "pproc.interpol:main" -pproc-pts = "pproc.pts:main" -pproc-probabilities = "pproc.probabilities:main" -pproc-ensms = "pproc.ensms:main" -pproc-wind = "pproc.wind:main" -pproc-spectrum = "pproc.spectrum:main" -pproc-clustereps = "pproc.clustereps.__main__:main" -pproc-clustereps-pca = "pproc.clustereps.pca:main" -pproc-clustereps-cluster = "pproc.clustereps.cluster:main" -pproc-clustereps-attr = "pproc.clustereps.attribution:main" -pproc-quantiles = "pproc.quantiles:main" -pproc-tcycl-run = "pproc.tcycl.tcycl_run:main" -pproc-tcycl-summarise-ibtks = "pproc.tcycl.tcycl_summarise_ibtks:main" -pproc-tcycl-summarise-tcycl = "pproc.tcycl.tcycl_summarise_tcycl:main" -pproc-tcycl-summarise-trckr = "pproc.tcycl.tcycl_summarise_trckr:main" -pproc-tcycl-evaluate = "pproc.tcycl.tcycl_evaluate:main" -pproc-thermal-indices = "pproc.thermal_indices:main" -pproc-histogram = "pproc.histogram:main" -pproc-accumulate = "pproc.accumulate:main" -pproc-significance = "pproc.significance:main" -pproc-anomaly = "pproc.anomaly:main" -pproc-monthly-stats = "pproc.monthly_stats:main" -pproc-config="pproc.config_generation:main" -pproc-ecpoint = "pproc.ecpoint:main" -pproc-flight-levels = "pproc.flight_levels:main" +dependencies = [ + "conflator>=0.1.7", + "earthkit-time>=0.1.3", + "earthkit-utils>=0.2.1", + "filelock>=3.12", + "numexpr", + "pproc-core", + "pproc-runtime", + "psutil", + "scikit-learn", + "scipy>=1.8", + "xarray", +] +optional-dependencies.tcycl = [ + "pyinfero @ git+ssh://git@github.com/ecmwf/infero.git@0.3.1#subdirectory=src/infero/api/pyinfero", + "wget", +] +scripts.pproc-accumulate = "pproc.accumulate:main" +scripts.pproc-anomaly = "pproc.anomaly:main" +scripts.pproc-clustereps = "pproc.clustereps.__main__:main" +scripts.pproc-clustereps-attr = "pproc.clustereps.attribution:main" +scripts.pproc-clustereps-cluster = "pproc.clustereps.cluster:main" +scripts.pproc-clustereps-pca = "pproc.clustereps.pca:main" +scripts.pproc-config = "pproc.config_generation:main" +scripts.pproc-ecpoint = "pproc.ecpoint:main" +scripts.pproc-ensms = "pproc.ensms:main" +scripts.pproc-extreme = "pproc.extreme:main" +scripts.pproc-extreme-forecast-simple = "pproc.extreme_forecast_simple:main" +scripts.pproc-flight-levels = "pproc.flight_levels:main" +scripts.pproc-histogram = "pproc.histogram:main" +scripts.pproc-interpol = "pproc.interpol:main" +scripts.pproc-monthly-stats = "pproc.monthly_stats:main" +scripts.pproc-probabilities = "pproc.probabilities:main" +scripts.pproc-pts = "pproc.pts:main" +scripts.pproc-quantiles = "pproc.quantiles:main" +scripts.pproc-significance = "pproc.significance:main" +scripts.pproc-spectrum = "pproc.spectrum:main" +scripts.pproc-tcycl-evaluate = "pproc.tcycl.tcycl_evaluate:main" +scripts.pproc-tcycl-run = "pproc.tcycl.tcycl_run:main" +scripts.pproc-tcycl-summarise-ibtks = "pproc.tcycl.tcycl_summarise_ibtks:main" +scripts.pproc-tcycl-summarise-tcycl = "pproc.tcycl.tcycl_summarise_tcycl:main" +scripts.pproc-tcycl-summarise-trckr = "pproc.tcycl.tcycl_summarise_trckr:main" +scripts.pproc-thermal-indices = "pproc.thermal_indices:main" -[tool.pytest.ini_options] -minversion = "6.0" -testpaths = ["tests"] +[dependency-groups] +dev = [ + "pytest>=9.0.3", + "requests>=2.34.2", +] [tool.setuptools] include-package-data = true [tool.setuptools.packages.find] -where = ["src"] +where = [ "src" ] [tool.setuptools_scm] write_to = "src/pproc/_version.py" @@ -86,14 +85,18 @@ write_to_template = '''# Do not change! Do not track in version control! __version__ = "{version}" ''' local_scheme = "no-local-version" -scm.git.describe_command = ['git', 'describe', '--dirty', '--tags', '--long', '--abbrev=40', '--match', '[0-9]*'] +scm.git.describe_command = [ 'git', 'describe', '--dirty', '--tags', '--long', '--abbrev=40', '--match', '[0-9]*' ] + +[tool.pytest.ini_options] +minversion = "6.0" +testpaths = [ "tests" ] -[tool.uv.source] -pproc-core = { workspace = true, git = https://github.com/ecmwf/pproc.git, branch = mono-repo, subdirectory = pproc-core } -pproc-runtime = { workspace = true, git = https://github.com/ecmwf/pproc.git, branch = mono-repo, subdirectory = pproc-runtime } +[tool.uv.sources] +pproc-core = { workspace = true } +pproc-runtime = { workspace = true } [tool.uv.workspace] members = [ - "../pproc-core", + "../pproc-core", "../pproc-runtime", -] \ No newline at end of file +] diff --git a/pproc/src/pproc/Config.py b/pproc/src/pproc/Config.py index f1b5e09d..1172109d 100644 --- a/pproc/src/pproc/Config.py +++ b/pproc/src/pproc/Config.py @@ -55,7 +55,7 @@ def id(self, key) -> int: p, t = map(int, "{:.3f}".format(float(key)).split(".")) assert 0 <= p < 1000 and t < 1000 return p if t == 128 else (1000 * t + p) - except: + except: # noqa: E722 pass # from shortName @@ -120,7 +120,7 @@ def main(): args = parser.parse_args() tree = VariableTree(args.file) - node = [int(p) if p.isdigit() else p for p in args.config_node] + [int(p) if p.isdigit() else p for p in args.config_node] print(tree.variables(*args.config_node)) diff --git a/pproc/src/pproc/__init__.py b/pproc/src/pproc/__init__.py index f4ac21de..162ef1d1 100644 --- a/pproc/src/pproc/__init__.py +++ b/pproc/src/pproc/__init__.py @@ -7,7 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from . import clustereps +from . import clustereps # noqa: F401 try: from ._version import __version__ diff --git a/pproc/src/pproc/accum/__init__.py b/pproc/src/pproc/accum/__init__.py index 6d947223..64e1349e 100644 --- a/pproc/src/pproc/accum/__init__.py +++ b/pproc/src/pproc/accum/__init__.py @@ -6,4 +6,3 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. - diff --git a/pproc/src/pproc/accum/main.py b/pproc/src/pproc/accum/main.py index 003c1663..97e41785 100644 --- a/pproc/src/pproc/accum/main.py +++ b/pproc/src/pproc/accum/main.py @@ -46,9 +46,7 @@ def main(cfg: Config, postproc_iteration: Any): cfg.inputs, param.total_fields, ) - postproc_partial = functools.partial( - postproc_iteration, param, cfg - ) + postproc_partial = functools.partial(postproc_iteration, param, cfg) for keys, data in parallel_data_retrieval( cfg.parallelisation.n_par_read, accum_manager.dims, diff --git a/pproc/src/pproc/anomaly.py b/pproc/src/pproc/anomaly.py index a7fa29c3..6edb9b39 100644 --- a/pproc/src/pproc/anomaly.py +++ b/pproc/src/pproc/anomaly.py @@ -36,9 +36,7 @@ def anomaly_iteration( window_id: str, accum: Accumulator, ): - with ResourceMeter(f"{param.name}, window {window_id}: Retrieve climatology"): - if "stepRange" in accum.grib_keys(): steprange = accum.grib_keys()["stepRange"] else: diff --git a/pproc/src/pproc/clustereps/__init__.py b/pproc/src/pproc/clustereps/__init__.py index 6d947223..64e1349e 100644 --- a/pproc/src/pproc/clustereps/__init__.py +++ b/pproc/src/pproc/clustereps/__init__.py @@ -6,4 +6,3 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. - diff --git a/pproc/src/pproc/clustereps/attribution.py b/pproc/src/pproc/clustereps/attribution.py index 3d5a11b5..03a26305 100644 --- a/pproc/src/pproc/clustereps/attribution.py +++ b/pproc/src/pproc/clustereps/attribution.py @@ -24,7 +24,6 @@ def read_clim_file(filePath: str, nRecords: int, dtype: str = ">f4"): - arr = list() with FortranFile(filePath, "r", header_dtype=">u4") as fin: for _ in range(nRecords): @@ -290,7 +289,7 @@ def main() -> int: fmt="%-3d", delimiter=3 * " ", ) - + cfg.clean() return 0 diff --git a/pproc/src/pproc/clustereps/season.py b/pproc/src/pproc/clustereps/season.py index 2205cdf0..23328d1a 100644 --- a/pproc/src/pproc/clustereps/season.py +++ b/pproc/src/pproc/clustereps/season.py @@ -9,7 +9,7 @@ from datetime import datetime, timedelta -from typing import List, Tuple +from typing import List import calendar @@ -17,9 +17,7 @@ class Season: - def __init__(self, startMonth, endMonth, baseYear): - self.baseYear = baseYear jumpYear = 0 if startMonth > endMonth: @@ -28,13 +26,15 @@ def __init__(self, startMonth, endMonth, baseYear): else: startYear = self.baseYear first_day = datetime.strptime(f"{startYear:04d}{startMonth:02d}01", "%Y%m%d") - end_day = datetime.strptime(f"{self.baseYear:04d}{endMonth:02d}{MONTH_DAYS[endMonth-1]}", "%Y%m%d") + end_day = datetime.strptime( + f"{self.baseYear:04d}{endMonth:02d}{MONTH_DAYS[endMonth-1]}", "%Y%m%d" + ) self.start = first_day self.end = end_day all_months = list(range(1, 13)) * 2 - self.months = all_months[startMonth - 1 : (endMonth + jumpYear*12)] + self.months = all_months[startMonth - 1 : (endMonth + jumpYear * 12)] self.leapday = None if startMonth > endMonth and endMonth >= 2: @@ -44,9 +44,14 @@ def __init__(self, startMonth, endMonth, baseYear): if calendar.isleap(startYear): self.leapday = self.leapday = datetime(baseYear, 2, 29) - self.name = ''.join([ - datetime.strptime(f"1970{mon:02d}01", "%Y%m%d").strftime("%b").lower()[0] for mon in self.months - ]) + self.name = "".join( + [ + datetime.strptime(f"1970{mon:02d}01", "%Y%m%d") + .strftime("%b") + .lower()[0] + for mon in self.months + ] + ) @property def ndays(self) -> int: @@ -57,7 +62,10 @@ def ndays(self) -> int: @property def doys(self) -> List[int]: - return [(self.start + timedelta(days=i)).timetuple().tm_yday - 1 for i in range(self.ndays)] + return [ + (self.start + timedelta(days=i)).timetuple().tm_yday - 1 + for i in range(self.ndays) + ] def dos(self, date: datetime) -> int: if self.leapday is not None and date >= self.leapday: diff --git a/pproc/src/pproc/clustereps/utils.py b/pproc/src/pproc/clustereps/utils.py index d477e6b0..ae67926f 100644 --- a/pproc/src/pproc/clustereps/utils.py +++ b/pproc/src/pproc/clustereps/utils.py @@ -9,6 +9,7 @@ import numpy as np + def gen_steps(start, end, delta, monthly=False): """Generate the list of steps diff --git a/pproc/src/pproc/common/__init__.py b/pproc/src/pproc/common/__init__.py index 3a6b13da..c891ee46 100644 --- a/pproc/src/pproc/common/__init__.py +++ b/pproc/src/pproc/common/__init__.py @@ -7,5 +7,5 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from .config import default_parser, Config -from .steps import AnyStep, Step, parse_step, step_to_coord +from .config import default_parser, Config # noqa: F401 +from .steps import AnyStep, Step, parse_step, step_to_coord # noqa: F401 diff --git a/pproc/src/pproc/common/accumulation.py b/pproc/src/pproc/common/accumulation.py index ad173bde..07004acf 100644 --- a/pproc/src/pproc/common/accumulation.py +++ b/pproc/src/pproc/common/accumulation.py @@ -49,7 +49,7 @@ def coords_name(coords: Coords, name_config: Optional[dict] = None) -> str: fcdate = datetime.datetime.strptime(name_config["date"], "%Y%m%d") end = int(end) seq = MonthlySequence(1) - first_month = seq.next(fcdate, False) + seq.next(fcdate, False) this_month = fcdate + datetime.timedelta(hours=end - 1) month_length = MonthInYear(this_month.year, this_month.month).length() * 24 start = end - month_length @@ -126,7 +126,7 @@ def grib_keys(self, dim: str) -> dict: ) # Don't override if set in config grib_header["stepRange"] = steprange else: - assert end == start, f"Start step can not be greater than end step" + assert end == start, "Start step can not be greater than end step" if "timeRangeIndicator" not in grib_header: if end >= 256: grib_header["timeRangeIndicator"] = 10 diff --git a/pproc/src/pproc/common/accumulation_manager.py b/pproc/src/pproc/common/accumulation_manager.py index 39eb77a8..a1fa5ec6 100644 --- a/pproc/src/pproc/common/accumulation_manager.py +++ b/pproc/src/pproc/common/accumulation_manager.py @@ -7,7 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Any, Callable, Dict, Iterator, List, Optional, Set, Tuple, Union +from typing import Any, Callable, Dict, Iterator, List, Optional, Set, Tuple import numpy as np diff --git a/pproc/src/pproc/common/grib_helpers.py b/pproc/src/pproc/common/grib_helpers.py index 4c0d02ad..f0ccc7eb 100644 --- a/pproc/src/pproc/common/grib_helpers.py +++ b/pproc/src/pproc/common/grib_helpers.py @@ -7,9 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Dict import numpy as np -import re import eccodes from earthkit.data.utils.message import CodesHandle diff --git a/pproc/src/pproc/common/io.py b/pproc/src/pproc/common/io.py index 01128fe5..a2ca2483 100644 --- a/pproc/src/pproc/common/io.py +++ b/pproc/src/pproc/common/io.py @@ -278,7 +278,6 @@ def fdb_read_to_file(fdb, request, file_out, mir_options=None, mode="wb"): def fdb_write_ufunc(data, coords, fdb, template): - message = ( template.copy() ) # are we always copying the full message with the data values? @@ -321,7 +320,6 @@ def write_message(target, template, data_array): def write(target, template, attributes, data_array): - message = template.copy() for key, value in attributes.items(): message[key] = value diff --git a/pproc/src/pproc/common/parallel.py b/pproc/src/pproc/common/parallel.py index 3ca05145..b7c3c955 100644 --- a/pproc/src/pproc/common/parallel.py +++ b/pproc/src/pproc/common/parallel.py @@ -217,10 +217,13 @@ def parallel_data_retrieval( ) with executor: delay = 0 if num_processes == 1 else num_processes - submit = lambda keys: ( - keys, - executor.submit(_retrieve, data_requesters, **keys), - ) + + def submit(keys): + return ( + keys, + executor.submit(_retrieve, data_requesters, **keys), + ) + requests = dict_product(dims) for keys, future in delayed_map(delay, submit, requests): yield keys, future.result() diff --git a/pproc/src/pproc/common/param_requester.py b/pproc/src/pproc/common/param_requester.py index f0b06d4f..d87dce12 100644 --- a/pproc/src/pproc/common/param_requester.py +++ b/pproc/src/pproc/common/param_requester.py @@ -14,7 +14,6 @@ from pproc.common.dataset import open_multi_dataset from pproc.common.io import missing_to_nan, GribMetadata -from pproc.common.steps import AnyStep from pproc.config.io import Input, InputsCollection from pproc.config.param import ParamConfig diff --git a/pproc/src/pproc/common/steps.py b/pproc/src/pproc/common/steps.py index 341aec9a..28a97635 100644 --- a/pproc/src/pproc/common/steps.py +++ b/pproc/src/pproc/common/steps.py @@ -17,7 +17,9 @@ class Step: end: int = None def __init__(self, start_or_step, end=None): - _set_frozen = lambda attr, val: object.__setattr__(self, attr, val) + def _set_frozen(attr, val): + return object.__setattr__(self, attr, val) + if isinstance(start_or_step, Step): _set_frozen("start", start_or_step.start) _set_frozen("end", start_or_step.end) diff --git a/pproc/src/pproc/common/stepseq.py b/pproc/src/pproc/common/stepseq.py deleted file mode 100644 index 4d056787..00000000 --- a/pproc/src/pproc/common/stepseq.py +++ /dev/null @@ -1,75 +0,0 @@ -# (C) Copyright 2021- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -import datetime -from typing import Iterator - -from earthkit.time.calendar import MonthInYear -from earthkit.time.sequence import MonthlySequence - - -def steprange_to_fcmonth(fcdate: datetime.datetime | str, steprange: str) -> int: - if isinstance(fcdate, str): - fcdate = datetime.datetime.strptime(str(fcdate), "%Y%m%d") - start, end = map(int, steprange.split("-")) - seq = MonthlySequence(1) - first_month = seq.next(fcdate, False) - this_month = fcdate + datetime.timedelta(hours=int(start)) - - month_length = MonthInYear(this_month.year, this_month.month).length() * 24 - assert month_length == ( - end - start - ), f"Expected month length {end - start} for {fcdate} and step range {steprange}. Got {month_length}." - - return ( - (this_month.year - first_month.year) * 12 - + this_month.month - - first_month.month - + 1 - ) - - -def fcmonth_to_steprange(fcdate: datetime.datetime | str, fcmonth: int) -> str: - if isinstance(fcdate, str): - fcdate = datetime.datetime.strptime(str(fcdate), "%Y%m%d") - seq = MonthlySequence(1) - month = seq.next(fcdate, False) - for _ in range(1, fcmonth): - month = seq.next(month, True) - date = datetime.datetime(month.year, month.month, month.day) - start = (date - fcdate).total_seconds() // 3600 - end = start + MonthInYear(date.year, date.month).length() * 24 - return f"{int(start)}-{int(end)}" - - -def stepseq_monthly(date: str, start: int, end: int, interval: int) -> Iterator: - fcdate = datetime.datetime.strptime(str(date), "%Y%m%d") - start_date = fcdate + datetime.timedelta(hours=start) - seq = MonthlySequence(1) - start_month = seq.next(start_date.date(), strict=False) - # Steps are in hours, from forecast date - step_start = (start_month - fcdate.date()).days * 24 - miny = MonthInYear(start_month.year, start_month.month) - while step_start < end: - delta = miny.length() * 24 - step_end = step_start + delta - - if step_end > end: - break - - yield range(step_start, step_end + 1, interval) - miny = miny.next() - step_start = step_end - - -def stepseq_ranges( - start: int, end: int, width: int, interval: int, by: int -) -> Iterator: - for start in range(start, end - width + 1, interval): - yield range(start, start + width + 1, by) diff --git a/pproc/src/pproc/config/accumulation.py b/pproc/src/pproc/config/accumulation.py index 28e61496..d7610706 100644 --- a/pproc/src/pproc/config/accumulation.py +++ b/pproc/src/pproc/config/accumulation.py @@ -17,7 +17,7 @@ from earthkit.time.sequence import Sequence from ppcore.utils.requests import extract_mars -from pproc.common.stepseq import stepseq_ranges, stepseq_monthly +from ppcore.utils.stepseq import stepseq_ranges, stepseq_monthly from pproc.common.accumulation import convert_coords, coords_name from pproc.config.utils import _get @@ -109,7 +109,7 @@ def out_mars(self, dim: str) -> dict: name = coords_name(coord, self.name) try: name = int(name) - except: + except ValueError: pass base[dim].append(name) if hasattr(self, "thresholds"): @@ -231,7 +231,7 @@ def out_mars(self, dim: str) -> list[dict]: name = coords_name(coord, self.name) try: name = int(name) - except: + except ValueError: pass base[dim].append(name) return [base] diff --git a/pproc/src/pproc/config/factory.py b/pproc/src/pproc/config/factory.py index 42b05a8e..ebdf27ce 100644 --- a/pproc/src/pproc/config/factory.py +++ b/pproc/src/pproc/config/factory.py @@ -8,11 +8,9 @@ # nor does it submit to any jurisdiction. import os -import pandas as pd -import numpy as np import logging -from ppcore.utils.requests import expand, squeeze +from ppcore.utils.requests import expand from ppcore.schema.schema import Schema from pproc.config import types diff --git a/pproc/src/pproc/config/log.py b/pproc/src/pproc/config/log.py index 717a02c6..4a05f1a4 100644 --- a/pproc/src/pproc/config/log.py +++ b/pproc/src/pproc/config/log.py @@ -8,8 +8,9 @@ # nor does it submit to any jurisdiction. import logging +from typing import Literal -from annotated_types import Annotated, Literal +from annotated_types import Annotated from conflator import CLIArg, ConfigModel, EnvVar from pydantic import Field diff --git a/pproc/src/pproc/config/param.py b/pproc/src/pproc/config/param.py index 339d1c7c..c24c0653 100644 --- a/pproc/src/pproc/config/param.py +++ b/pproc/src/pproc/config/param.py @@ -10,7 +10,6 @@ from typing import Any, Dict, Iterator, Optional from typing_extensions import Self import itertools -import os import logging import copy diff --git a/pproc/src/pproc/config/preprocessing.py b/pproc/src/pproc/config/preprocessing.py index 63141382..53f48780 100644 --- a/pproc/src/pproc/config/preprocessing.py +++ b/pproc/src/pproc/config/preprocessing.py @@ -9,7 +9,6 @@ from abc import ABC, abstractmethod from typing import Annotated, Any, List, Literal, Optional, Tuple, Union -from typing_extensions import Self import numexpr import numpy as np diff --git a/pproc/src/pproc/config/targets.py b/pproc/src/pproc/config/targets.py index 0a6433a1..fb8d1745 100644 --- a/pproc/src/pproc/config/targets.py +++ b/pproc/src/pproc/config/targets.py @@ -13,7 +13,6 @@ from typing_extensions import Self import yaml -import eccodes import pyfdb from annotated_types import Annotated from conflator import ConfigModel diff --git a/pproc/src/pproc/config/types.py b/pproc/src/pproc/config/types.py index dc7655aa..2694cbf9 100644 --- a/pproc/src/pproc/config/types.py +++ b/pproc/src/pproc/config/types.py @@ -9,7 +9,7 @@ import copy import os -from typing import Literal, Optional, List, Any, Annotated, ClassVar, Iterator +from typing import Literal, Optional, List, Any, Annotated, Iterator from typing_extensions import Self, Union from pydantic import ( field_validator, @@ -38,7 +38,7 @@ _get, ) from pproc.config.preprocessing import Reshape, Expression -from pproc.common.stepseq import steprange_to_fcmonth +from ppcore.utils.stepseq import steprange_to_fcmonth from pproc.extremes.indices import Index, SUPPORTED_INDICES, create_indices from pproc.flightlevel.mapping import FLIGHT_TO_PRESSURE_LEVEL @@ -590,7 +590,7 @@ def sort_inputs(cls, inputs: list[dict]) -> dict: if clim_step is not None: assert len(fc_step) == len( clim_step - ), f"Forecast and clim steps must be of the same length" + ), "Forecast and clim steps must be of the same length" for clim_inp in sorted_requests.get("clim", []): clim_inp["step"] = { fc_step[x]: clim_step[x] for x in range(len(fc_step)) @@ -932,7 +932,7 @@ def validate_inputs(self) -> Self: nsteps = list(map(lambda x: len(str(x).split("-")), steps)) assert np.all( np.asarray(nsteps) == 1 - ), f"Accumulation inputs required for step ranges." + ), "Accumulation inputs required for step ranges." return self @classmethod diff --git a/pproc/src/pproc/config/utils.py b/pproc/src/pproc/config/utils.py index fd541e9f..b5e9e7ed 100644 --- a/pproc/src/pproc/config/utils.py +++ b/pproc/src/pproc/config/utils.py @@ -7,13 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Any, Optional, Iterator -import copy -import numpy as np -import pandas as pd -import itertools - -from ppcore.utils.dicts import dict_product +from typing import Any def parse_vars(items): diff --git a/pproc/src/pproc/config_generation.py b/pproc/src/pproc/config_generation.py index 52cb4806..b5b64ece 100644 --- a/pproc/src/pproc/config_generation.py +++ b/pproc/src/pproc/config_generation.py @@ -66,7 +66,7 @@ def _to_mars(requests: list[dict]) -> str: for req in requests: source = req.pop("source", None) target = req.pop("target", None) - # Reverse source/target keys so request can be used to + # Reverse source/target keys so request can be used to # create/extract from the input/output files if source and source not in ["fdb", "mars", "fdbmars"]: req["target"] = f"'{source}'" diff --git a/pproc/src/pproc/data/__init__.py b/pproc/src/pproc/data/__init__.py index 6d947223..64e1349e 100644 --- a/pproc/src/pproc/data/__init__.py +++ b/pproc/src/pproc/data/__init__.py @@ -6,4 +6,3 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. - diff --git a/pproc/src/pproc/data/pts/__init__.py b/pproc/src/pproc/data/pts/__init__.py index 6d947223..64e1349e 100644 --- a/pproc/src/pproc/data/pts/__init__.py +++ b/pproc/src/pproc/data/pts/__init__.py @@ -6,4 +6,3 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. - diff --git a/pproc/src/pproc/ecpoint.py b/pproc/src/pproc/ecpoint.py index 25650153..9fc1b9f0 100644 --- a/pproc/src/pproc/ecpoint.py +++ b/pproc/src/pproc/ecpoint.py @@ -16,7 +16,6 @@ import logging import numexpr -import eccodes from meters import ResourceMeter from conflator import Conflator import earthkit.data @@ -281,7 +280,6 @@ def ecpoint_iteration( config.parallelisation.n_par_compute, ) ): - # Scale outputs, needed for grib 2 rainfall in metres if config.scale_outputs is not None: pt_bc_allwt *= config.scale_outputs diff --git a/pproc/src/pproc/ecpt/predictors.py b/pproc/src/pproc/ecpt/predictors.py index 51a2bcf8..f9d50916 100644 --- a/pproc/src/pproc/ecpt/predictors.py +++ b/pproc/src/pproc/ecpt/predictors.py @@ -2,11 +2,8 @@ import datetime import functools -import eccodes -import earthkit.data from earthkit.data import FieldList -from pproc.common.io import GribMetadata from pproc.config.param import ParamConfig from pproc.config.types import ECPointConfig from pproc.config.preprocessing import Expression diff --git a/pproc/src/pproc/ensms.py b/pproc/src/pproc/ensms.py index 21807b78..119f2d51 100755 --- a/pproc/src/pproc/ensms.py +++ b/pproc/src/pproc/ensms.py @@ -58,7 +58,6 @@ def ensms_iteration( accum: Accumulator, template_ens: eccodes.GRIBMessage, ): - ens = accum.values assert ens is not None diff --git a/pproc/src/pproc/ensms_original.py b/pproc/src/pproc/ensms_original.py deleted file mode 100755 index 48941cd9..00000000 --- a/pproc/src/pproc/ensms_original.py +++ /dev/null @@ -1,215 +0,0 @@ -#!/usr/bin/env python3 -# (C) Copyright 2021- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - - -from io import BytesIO - -from datetime import datetime -import numpy as np - -import eccodes -import mir - -# import pyfdb - - -def parse_range(r: str): - if not r: - return (None,) - - l = r.lower().split("/") - if len(l) == 5 and l[1] == "to" and l[3] == "by": - return range(int(l[0]), int(l[2]) + 1, int(l[4])) - - if len(l) == 3 and l[1] == "to": - return range(int(l[0]), int(l[2]) + 1, 1) - - return sorted(set(map(int, l))) - - -def mars(input: str = ""): - from os import environ - from subprocess import run - - p = run( - "mars", - capture_output=True, - text=True, - input=input, - env=environ, - ) - if p.returncode: - print(f"stdout:\n{p.stdout}\n") - print(f"stderr:\n{p.stderr}\n") - - return p.returncode == 0 - - -def main(args=None): - import argparse - from os import path - - from pproc.Config import VariableTree, postproc_keys - - # arguments - parser = argparse.ArgumentParser( - description="Calculate ensemble means and standard deviations", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - ) - - parser.add_argument("--config-file", help="Configuration file", required=True) - parser.add_argument( - "--config-node", help="Configuration node", required=True, nargs="+" - ) - - parser.add_argument("--no-mars", action="store_false", dest="mars") - parser.add_argument("--write-grib", action="store_true") - parser.add_argument("--write-fdb", action="store_true") - parser.add_argument( - "--std-corrected-sample", - help="corrected sample standard deviation", - action="store_true", - ) - parser.add_argument( - "--metkit-share-dir", - help="Metkit configuration directory", - default="/usr/local/apps/ecmwf-toolbox/2022.05.0.0/GNU/11.2/share/metkit", - ) - - parser.add_argument("--class", default="od", dest="klass") - parser.add_argument("--stream", default="enfo") - parser.add_argument("--expver", default=1) - parser.add_argument("--date", required=True) - parser.add_argument("--time", choices=(0, 6, 12, 18), default=0, type=int) - parser.add_argument("--number", default="1/to/50") - - parser.add_argument("--grid", default="O640") - parser.add_argument("--resol", default="av") - parser.add_argument("--intgrid", default=None) - parser.add_argument("--truncation", default=None) - - args = parser.parse_args() - print(args) - - date = datetime.strptime(args.date, "%Y%m%d") - pp_keys = postproc_keys(args.metkit_share_dir) - - # variables - tree = VariableTree(args.config_file) - var = tree.variables(*map(lambda n: int(n) if n.isdigit() else n, args.config_node)) - var.update(vars(args)) - var["class"] = var.pop("klass") - print(var) - - # assert one parameter only - assert "/" not in str(var["param"]) - - # assert fdb or mars-client - fdb = None # pyfdb.FDB() - assert bool(fdb) != bool(var["mars"]) - - tens = len(parse_range(var["number"])) + 1 # nens + 1 - - for levelist in parse_range(var["levelist"]): - for step in parse_range(var["step"]): - - if var["mars"]: - target = f"""param={var["param"]},levtype={var["levtype"]}{("",f",levelist={levelist}")[bool(levelist)]},step={step}""" - request = f""" -retrieve, - class = {var["class"]}, - type = pf, - stream = {var["stream"]}, - param = {var["param"]}, - date = {var["date"]}, - time = {var["time"]}, - levtype = {var["levtype"]}, - levelist = {levelist}, - expver = {var["expver"]}, - step = {step}, - number = {var["number"]}, - target = '{target}' - -retrieve, - type = cf, - number = off -""" - - print(request) - assert mars(request) - assert path.exists(target) - - # post-process - pp = {key: var[key] for key in pp_keys if var.get(key, None)} - if pp: - out = BytesIO() - inp = mir.GribFileInput(target) - - job = mir.Job(**pp) - job.execute(inp, out) - - out.seek(0) - eccodes_reader = eccodes.StreamReader(out) - else: - eccodes_reader = eccodes.FileReader(target) - - messages = list(eccodes_reader) - - # check data - # - for expected number of messages - # - for absence of missing values (otherwise need to convert to/from nan and use np.nanmean/np.nanstd) - assert tens == len(messages) - assert not any(m["missingValuesPresent"] for m in messages) - - data = np.asarray([m.get_array("values") for m in messages]) - - # mean across forecast ensemble members (perturbed and control) - # copy template GRIB message, modify headers and write/archive - mean = np.mean(data, axis=0) - - out_grib = messages[0].copy() - out_grib.set("type", "em") - out_grib.set("perturbationNumber", 0) - out_grib.set("numberOfForecastsInEnsemble", tens) - out_grib.set_array("values", mean) - - if var["write_grib"]: - assert not path.exists("em.grib") - with open("em.grib", "wb") as fout: - out_grib.write_to(fout) - - if var["write_fdb"]: - fdb.archive(out_grib.get_buffer()) - - # standard deviation across forecast ensemble members (perturbed and control) - # copy template GRIB message, modify headers and write/archive - stddev = np.std(data, axis=0, ddof=int(var["std_corrected_sample"])) - - out_grib = messages[0].copy() - out_grib.set("type", "es") - out_grib.set("perturbationNumber", 0) - out_grib.set("numberOfForecastsInEnsemble", tens) - out_grib.set_array("values", stddev) - - if var["write_grib"]: - assert not path.exists("es.grib") - with open("es.grib", "wb") as fout: - out_grib.write_to(fout) - - if var["write_fdb"]: - fdb.archive(out_grib.get_buffer()) - - # fdb.flush() - - -if __name__ == "__main__": - import sys - - main(sys.argv) diff --git a/pproc/src/pproc/extreme_forecast_simple.py b/pproc/src/pproc/extreme_forecast_simple.py deleted file mode 100755 index 79a2c548..00000000 --- a/pproc/src/pproc/extreme_forecast_simple.py +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env python3 -# (C) Copyright 2021- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -# -# (C) Copyright 1996- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation nor -# does it submit to any jurisdiction. - -import os -import argparse -import numpy as np - -import eccodes -from earthkit.meteo import extreme - - -def compute_efi(fcs, clim, eps): - - efi = extreme.efi(clim, fcs, eps) - - return efi - - -def compute_sot(fcs, clim, sot_values, eps): - - sot = {} - for perc in sot_values: - sot[perc] = extreme.sot(clim, fcs, perc, eps=eps) - - return sot - - -def read_grib(in_file): - reader = eccodes.FileReader(in_file) - - data = [] - for message in reader: - data_array = message.get_array("values") - - # handle missing values and replace by nan - if message.get('bitmapPresent'): - missing = message.get('missingValue') - data_array[data_array == missing] = np.nan - - data.append(data_array) - - return np.asarray(data) - - -def write_grib(template, data, out_dir, out_name): - reader = eccodes.FileReader(template) - messages = list(reader) - message = messages[0] - - # replace missing values if any - missing = -9999 - is_missing = np.isnan(data).any() - if is_missing: - data[np.isnan(data)] = missing - message.set('missingValue', missing) - message.set('bitmapPresent', 1) - - message.set_array('values', data) - - if is_missing: - n_missing1 = len(data[data==missing]) - n_missing2 = message.get('numberOfMissing') - if n_missing1 != n_missing2: - raise Exception(f'Number of missing values in the message not consistent, is {n_missing1} and should be {n_missing2}') - - out_file = os.path.join(out_dir, out_name) - with open(out_file,"ab") as outfile: - message.write_to(outfile) - - -def main(args=None): - - parser = argparse.ArgumentParser(description='Small python EFI test') - parser.add_argument('fc_file', help='Forecast input file') - parser.add_argument('clim_file', help='Climatology input file') - parser.add_argument('template', help='GRIB template') - parser.add_argument('out_dir', help='Output directory') - parser.add_argument('--sot', nargs="+", type=int, help='SOT percentiles values') - parser.add_argument('--eps', type=float, help='epsilon factor') - - args = parser.parse_args(args) - - sot_num = args.sot - if not isinstance(sot_num, list): - sot_num = [sot_num] - - fcs = read_grib(args.fc_file) - clim = read_grib(args.clim_file) - print(np.mean(fcs)) - print(np.mean(clim)) - - fc_name = os.path.basename(args.fc_file).split('_')[0] - - efi = compute_efi(fcs, clim, eps=args.eps) - print(np.mean(efi)) - - efifile = 'efi' + os.path.basename(args.fc_file)[3:] - write_grib(args.template, efi, args.out_dir, efifile) - - if fc_name == 'eps': - sot = compute_sot(fcs, clim, sot_num, eps=args.eps) - for val in sot_num: - sotfile = 'sot' + str(val) + os.path.basename(args.fc_file)[3:] - write_grib(args.template, sot[val], args.out_dir, sotfile) - - -if __name__ == "__main__": - main() diff --git a/pproc/src/pproc/extremes/__init__.py b/pproc/src/pproc/extremes/__init__.py index 6d947223..64e1349e 100644 --- a/pproc/src/pproc/extremes/__init__.py +++ b/pproc/src/pproc/extremes/__init__.py @@ -6,4 +6,3 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. - diff --git a/pproc/src/pproc/extremes/grib.py b/pproc/src/pproc/extremes/grib.py index 2ed84ad2..c89e006a 100644 --- a/pproc/src/pproc/extremes/grib.py +++ b/pproc/src/pproc/extremes/grib.py @@ -13,7 +13,6 @@ def extreme_template(accum, template_fc, template_clim, allow_grib1_to_grib2=False): - template_ext = construct_message(template_fc, accum.grib_keys()) grib_keys = {} @@ -209,9 +208,9 @@ def sot_metadata(template, sot, metadata) -> dict: def cpf_metadata(template, metadata) -> dict: metadata = metadata.copy() - metadata[ - "marsType" - ] = 27 # FIXME: this corresponds to efi, should be a new value for cpf + metadata["marsType"] = ( + 27 # FIXME: this corresponds to efi, should be a new value for cpf + ) metadata["bitsPerValue"] = 24 edition = metadata.get("edition", template["edition"]) diff --git a/pproc/src/pproc/flight_levels.py b/pproc/src/pproc/flight_levels.py index eebf333a..1f7eab6a 100644 --- a/pproc/src/pproc/flight_levels.py +++ b/pproc/src/pproc/flight_levels.py @@ -20,7 +20,6 @@ import functools import signal import sys -import earthkit import logging import numpy as np diff --git a/pproc/src/pproc/monthly_stats.py b/pproc/src/pproc/monthly_stats.py index a767d180..8470d543 100644 --- a/pproc/src/pproc/monthly_stats.py +++ b/pproc/src/pproc/monthly_stats.py @@ -9,7 +9,6 @@ import sys from datetime import datetime, timedelta -from typing import Optional import numpy as np import eccodes diff --git a/pproc/src/pproc/prob/parallel.py b/pproc/src/pproc/prob/parallel.py index 7579fce0..99066e75 100644 --- a/pproc/src/pproc/prob/parallel.py +++ b/pproc/src/pproc/prob/parallel.py @@ -8,7 +8,7 @@ # nor does it submit to any jurisdiction. from meters import ResourceMeter -from typing import Union, Optional +from typing import Optional import numpy as np import numexpr @@ -73,7 +73,6 @@ def prob_iteration( with ResourceMeter( f"Param {param.name}, window {window_id}, computing threshold probs" ): - ens = accum.values assert ens is not None diff --git a/pproc/src/pproc/prob/threshold.py b/pproc/src/pproc/prob/threshold.py index ef09f555..987068cb 100644 --- a/pproc/src/pproc/prob/threshold.py +++ b/pproc/src/pproc/prob/threshold.py @@ -61,13 +61,13 @@ def grib_keys(self, edition: int) -> dict: if edition != 2: raise ValueError("Threshold ranges are only supported for GRIB edition 2") return { - f"scaleFactorOfLowerLimit": self.lower_scale_factor, - f"scaledValueOfLowerLimit": round( + "scaleFactorOfLowerLimit": self.lower_scale_factor, + "scaledValueOfLowerLimit": round( self.lower_value * 10**self.lower_scale_factor, 0 ), "probabilityType": 2, - f"scaleFactorOfUpperLimit": self.upper_scale_factor, - f"scaledValueOfUpperLimit": round( + "scaleFactorOfUpperLimit": self.upper_scale_factor, + "scaledValueOfUpperLimit": round( self.upper_value * 10**self.upper_scale_factor, 0 ), } diff --git a/pproc/src/pproc/pts.md b/pproc/src/pproc/pts.md index a0578153..c1e4e82d 100644 --- a/pproc/src/pproc/pts.md +++ b/pproc/src/pproc/pts.md @@ -85,4 +85,3 @@ Filtering --- For filtering wind, check if *any* of the start/end track segment points exceed a minimum. - diff --git a/pproc/src/pproc/pts.py b/pproc/src/pproc/pts.py index b191c31a..d5c97d25 100755 --- a/pproc/src/pproc/pts.py +++ b/pproc/src/pproc/pts.py @@ -241,7 +241,8 @@ def main(args=None): } # regex: fixed size (n) " "-padded right-flushed integers - rd = lambda n: "|".join(" " * i + r"\d" * (n - i) for i in range(n)) + def rd(n): + return "|".join(" " * i + r"\d" * (n - i) for i in range(n)) re_filename = re.compile(r"^....(\d{10})_(\d{3}|..)_\d+_.{3}$") re_split = re.compile(r"^..... ( TD| TS|HR\d)$") diff --git a/pproc/src/pproc/quantiles.py b/pproc/src/pproc/quantiles.py index 5be583c1..8056fd04 100644 --- a/pproc/src/pproc/quantiles.py +++ b/pproc/src/pproc/quantiles.py @@ -116,9 +116,7 @@ def main(): cfg.inputs, param.total_fields, ) - quantiles_partial = functools.partial( - quantiles_iteration, cfg, param - ) + quantiles_partial = functools.partial(quantiles_iteration, cfg, param) for keys, data in parallel_data_retrieval( cfg.parallelisation.n_par_read, accum_manager.dims, diff --git a/pproc/src/pproc/signi/__init__.py b/pproc/src/pproc/signi/__init__.py index 6d947223..64e1349e 100644 --- a/pproc/src/pproc/signi/__init__.py +++ b/pproc/src/pproc/signi/__init__.py @@ -6,4 +6,3 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. - diff --git a/pproc/src/pproc/signi/clim.py b/pproc/src/pproc/signi/clim.py index 7581b41c..cdbacd65 100644 --- a/pproc/src/pproc/signi/clim.py +++ b/pproc/src/pproc/signi/clim.py @@ -7,12 +7,12 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Optional, Tuple, List +from typing import Optional, Tuple import eccodes from meters import ResourceMeter -from pproc.common.param_requester import ParamConfig, ParamRequester, IndexFunc +from pproc.common.param_requester import ParamRequester, IndexFunc from pproc.common.accumulation import Accumulator from pproc.common.accumulation_manager import AccumulationManager from pproc.common.parallel import parallel_data_retrieval @@ -28,7 +28,6 @@ def retrieve_clim( index_func: Optional[IndexFunc] = None, **additional_dims, ) -> Tuple[Accumulator, eccodes.GRIBMessage]: - accums = param.accumulations.copy() for dim, value in additional_dims.items(): accums[dim] = {"operation": "aggregation", "coords": [[value]]} diff --git a/pproc/src/pproc/significance.py b/pproc/src/pproc/significance.py index 5e9edc33..e4bd1c1b 100644 --- a/pproc/src/pproc/significance.py +++ b/pproc/src/pproc/significance.py @@ -117,7 +117,6 @@ def signi_iteration( window_id: str, accum: Accumulator, ): - with ResourceMeter(f"{param.name}, window {window_id}: Retrieve climatology"): steprange = accum.grib_keys()["stepRange"] clim_accum, clim_template = retrieve_clim( diff --git a/pproc/src/pproc/spectrum.py b/pproc/src/pproc/spectrum.py index 988b6417..b9573800 100755 --- a/pproc/src/pproc/spectrum.py +++ b/pproc/src/pproc/spectrum.py @@ -33,8 +33,8 @@ def spectrum(T, sh): def norm(m, n, r, i): zmet = zlam * (1 if m == 0 else 2) - zfact = 1.0 if n == 0 else ra ** 2 / (n * (n + 1)) - return zmet * zfact * (r ** 2 if m == 0 else (r ** 2 + i ** 2)) + zfact = 1.0 if n == 0 else ra**2 / (n * (n + 1)) + return zmet * zfact * (r**2 if m == 0 else (r**2 + i**2)) sp = np.zeros(T + 1) i = 0 @@ -78,7 +78,7 @@ def main(): rot = spectrum(T, sh_vo) div = spectrum(T, sh_d) - ke = (rot + div) * np.array([n ** 1.6666 for n in range(T + 1)]) + ke = (rot + div) * np.array([n**1.6666 for n in range(T + 1)]) if not args.linear: rot = np.log10(rot) div = np.log10(div) diff --git a/pproc/src/pproc/tcycl/__init__.py b/pproc/src/pproc/tcycl/__init__.py index 6d947223..64e1349e 100644 --- a/pproc/src/pproc/tcycl/__init__.py +++ b/pproc/src/pproc/tcycl/__init__.py @@ -6,4 +6,3 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. - diff --git a/pproc/src/pproc/tcycl/tcycl_evaluate.py b/pproc/src/pproc/tcycl/tcycl_evaluate.py index f1001a68..e46e54b3 100644 --- a/pproc/src/pproc/tcycl/tcycl_evaluate.py +++ b/pproc/src/pproc/tcycl/tcycl_evaluate.py @@ -21,32 +21,23 @@ class TropicalCyclone: Simply a TC with name and lat/lon """ - allowed_params = [ - "p", - "wind", - "step" - ] - + allowed_params = ["p", "wind", "step"] + def __init__(self, name, lat, lon, **kwargs): - self.name = name self.lat = lat self.lon = lon self.params = kwargs - + # check other TC params self._check_params(kwargs) - + def _check_params(self, params): - for p in params: assert p in self.allowed_params, f"Parameter {p} not allowed!" - + def distance_from(self, tc_other): - return self._haversine_dist(self.lat, - self.lon, - tc_other.lat, - tc_other.lon) + return self._haversine_dist(self.lat, self.lon, tc_other.lat, tc_other.lon) @staticmethod def _haversine_dist(lat1, lon1, lat2, lon2): @@ -54,25 +45,27 @@ def _haversine_dist(lat1, lon1, lat2, lon2): Haversine distance """ p = math.pi / 180 - - a = 0.5 - \ - math.cos((lat2 - lat1) * p) / 2 + \ - math.cos(lat1 * p) * math.cos(lat2 * p) * \ - (1 - math.cos((lon2 - lon1) * p)) / 2 + + a = ( + 0.5 + - math.cos((lat2 - lat1) * p) / 2 + + math.cos(lat1 * p) + * math.cos(lat2 * p) + * (1 - math.cos((lon2 - lon1) * p)) + / 2 + ) # 2 * R * asin... distance = 12742 * math.asin(math.sqrt(a)) - + return distance - + def __str__(self): - """ - - """ - + """ """ + min_req_str = f"{self.name:15} lat: {self.lat:7.2f} lon: {self.lon:7.2f}, " - params_str = ", ".join([f'{k}: {w:7.2f}' for k, w in self.params.items()]) - + params_str = ", ".join([f"{k}: {w:7.2f}" for k, w in self.params.items()]) + return min_req_str + params_str @@ -82,9 +75,8 @@ class TC_Forecast: dictionary of tropical cyclones grouped according to forecast step """ - + def __init__(self, *args, **kwargs): - # Structure of self.data # { # : [ @@ -99,13 +91,13 @@ def __init__(self, *args, **kwargs): # ... # } self.data = self._parse() - + def _parse(self): raise NotImplementedError - + def __getitem__(self, item): return self.data.get(item, []) - + @property def steps(self): return sorted(list(self.data.keys())) @@ -118,7 +110,7 @@ def print(self): for _tc in tc_s: print(_tc) - + class TC_Observation(TC_Forecast): """ Similar to TC forecast but with no @@ -131,18 +123,18 @@ class TC_Observation(TC_Forecast): # , # ... # ] - + def __getitem__(self, item): """ Always return the data, regardless of the "step", as there is no concept of "step" for tc observation """ return self.data - + @property def steps(self): return [] - + def print(self): """ Print TC's @@ -150,75 +142,72 @@ def print(self): for tc_s in self.data: for _tc in tc_s: print(_tc) - + class TRCKR_Forecast(TC_Forecast): """ Reference TC data from CSV """ - - required_fields = [ - "name", - "step", - "lat_p", - "lon_p" - ] - - def __init__(self, - reference_tc_path, - min_wind_speed=None, # 34 knots = 17.47 m/s - search_steps=None): - + + required_fields = ["name", "step", "lat_p", "lon_p"] + + def __init__( + self, + reference_tc_path, + min_wind_speed=None, # 34 knots = 17.47 m/s + search_steps=None, + ): # Reference TC predictions read from CSV self.df = pd.read_csv(reference_tc_path) - + if min_wind_speed is not None: self._filter_out_low_wind_tc(min_wind_speed) - + # Check data self._check_csv_data() - + if search_steps is not None: self.search_steps = search_steps else: self.search_steps = sorted(set(self.df.step)) - + super().__init__() - + def _filter_out_low_wind_tc(self, min_wind_speed): - self.df = self.df.loc[self.df['wind'] >= min_wind_speed] - + self.df = self.df.loc[self.df["wind"] >= min_wind_speed] + def _check_csv_data(self): """ Check that required fields are in CSV """ - + for req in self.required_fields: assert req in self.df, f"Error, field {req} not found in CSV!" - + def _parse(self): - # Collect TC tracker prediction data tc_predictions = {} for step in self.search_steps: - tc_predictions[step] = [TropicalCyclone(name, lat, lon, wind=w, p=p, step=step) - for name, lat, lon, w, p in self._tc_step_prediction(step)] - + tc_predictions[step] = [ + TropicalCyclone(name, lat, lon, wind=w, p=p, step=step) + for name, lat, lon, w, p in self._tc_step_prediction(step) + ] + return tc_predictions def _tc_step_prediction(self, step): """ Single step-data """ - - tc_id = self.df.loc[self.df['step'] == step].name - lats = self.df.loc[self.df['step'] == step].lat_p - lons = self.df.loc[self.df['step'] == step].lon_p - wind = self.df.loc[self.df['step'] == step].wind - pres = self.df.loc[self.df['step'] == step].pres - + + tc_id = self.df.loc[self.df["step"] == step].name + lats = self.df.loc[self.df["step"] == step].lat_p + lons = self.df.loc[self.df["step"] == step].lon_p + wind = self.df.loc[self.df["step"] == step].wind + pres = self.df.loc[self.df["step"] == step].pres + step_lats_lons = list(zip(tc_id, lats, lons, wind, pres)) - + return step_lats_lons @@ -226,62 +215,54 @@ class TCYCL_Forecast(TRCKR_Forecast): """ Predicted TC's from TCYCL tool """ - - required_fields = [ - "name", - "step", - "lat", - "lon" - ] - + + required_fields = ["name", "step", "lat", "lon"] + additional_fields = [ "P_min", "P_min_lat", "P_min_lon", "V10_max", "V10_max_lat", - "V10_max_lon" + "V10_max_lon", ] - - def __init__(self, - reference_tc_path, - min_wind_speed=None, - search_steps=None): - - super().__init__(reference_tc_path, - min_wind_speed=min_wind_speed, - search_steps=search_steps) - + + def __init__(self, reference_tc_path, min_wind_speed=None, search_steps=None): + super().__init__( + reference_tc_path, min_wind_speed=min_wind_speed, search_steps=search_steps + ) + def _filter_out_low_wind_tc(self, min_wind_speed): - self.df = self.df.loc[self.df['V10_max'] >= min_wind_speed] + self.df = self.df.loc[self.df["V10_max"] >= min_wind_speed] def _parse(self): # Collect TC tracker prediction data tc_predictions = {} for step in self.search_steps: - tc_predictions[step] = [TropicalCyclone(name, lat, lon, wind=w, p=p, step=step) - for name, lat, lon, w, p in self._tc_step_prediction(step)] - + tc_predictions[step] = [ + TropicalCyclone(name, lat, lon, wind=w, p=p, step=step) + for name, lat, lon, w, p in self._tc_step_prediction(step) + ] + return tc_predictions def _tc_step_prediction(self, step): """ Single step-data """ - - tc_id = self.df.loc[self.df['step'] == step].name - lats = self.df.loc[self.df['step'] == step].lat - lons = self.df.loc[self.df['step'] == step].lon - wind = self.df.loc[self.df['step'] == step].V10_max - pres = self.df.loc[self.df['step'] == step].P_min - + + tc_id = self.df.loc[self.df["step"] == step].name + lats = self.df.loc[self.df["step"] == step].lat + lons = self.df.loc[self.df["step"] == step].lon + wind = self.df.loc[self.df["step"] == step].V10_max + pres = self.df.loc[self.df["step"] == step].P_min + step_lats_lons = list(zip(tc_id, lats, lons, wind, pres)) - + return step_lats_lons class IBTKS_Data(TC_Observation): - required_fields = [ "ISO_TIME", "SID", @@ -295,13 +276,10 @@ class IBTKS_Data(TC_Observation): "wind", "pres", ] - + additional_fields = [] - def __init__(self, - reference_tc_path, - min_wind_speed=None): - + def __init__(self, reference_tc_path, min_wind_speed=None): self.df = pd.read_csv(reference_tc_path) if min_wind_speed is not None: @@ -309,33 +287,34 @@ def __init__(self, # Check data self._check_csv_data() - + super().__init__() def _filter_out_low_wind_tc(self, min_wind_speed): - self.df = self.df.loc[self.df['wind'] >= min_wind_speed] + self.df = self.df.loc[self.df["wind"] >= min_wind_speed] def _check_csv_data(self): """ Check that required fields are in CSV """ - + for req in self.required_fields: assert req in self.df, f"Error, field {req} not found in CSV!" def _parse(self): - # Collect TC tracker prediction data - tc_data = [TropicalCyclone(name, lat, lon, wind=w, p=p) - for name, lat, lon, w, p in self._tc_step_prediction()] - + tc_data = [ + TropicalCyclone(name, lat, lon, wind=w, p=p) + for name, lat, lon, w, p in self._tc_step_prediction() + ] + return tc_data def _tc_step_prediction(self): """ Single step-data """ - + # here we take ALL the values in the df (step not usable as # ibtracks are historical data and not FC). Also, it is assumed # that ibtracks summary contains ONLY the data we want to compare @@ -344,9 +323,9 @@ def _tc_step_prediction(self): lons = self.df.LON wind = self.df.wind pres = self.df.pres - + step_lats_lons = list(zip(tc_id, lats, lons, wind, pres)) - + return step_lats_lons @@ -354,16 +333,16 @@ class Scorer: """ Gives a score to TC prediction(s) """ - + def __init__(self, *args, **kwargs): self._score = None - + def run(self): raise NotImplementedError - + def score(self): return self._score - + def summary(self): raise NotImplementedError @@ -373,7 +352,7 @@ class ConfusionMatrix(Scorer): Calculates confusion matrix from reference and TCYCL data by approximating a match between real and predicted TC """ - + # ====== Confusion matrix ======== # # ___________________ # # _________| P_pred | N_pred | # @@ -382,227 +361,228 @@ class ConfusionMatrix(Scorer): # ---------------------------- # # # # ================================ # - - def __init__(self, - ref_data, - tcycl_data, - threshold, - compare_at_steps=None): - + + def __init__(self, ref_data, tcycl_data, threshold, compare_at_steps=None): self.ref_data = ref_data self.tcycl_data = tcycl_data self.threshold = threshold - + if compare_at_steps is None: self.compare_at_steps = self.tcycl_data.steps else: self.compare_at_steps = compare_at_steps - + super().__init__() - + def summary(self): """ Print a summary """ - + sums = {k: len(v) for k, v in self._score.items()} - avgs = {k: len(v)/len(self.compare_at_steps) for k, v in self._score.items()} + avgs = {k: len(v) / len(self.compare_at_steps) for k, v in self._score.items()} - print(f"\n") - print(f"#################################") - print(f"##### Summary #####") - print(f"#################################") - print(f"\n") + print("\n") + print("#################################") + print("##### Summary #####") + print("#################################") + print("\n") self._print_score() - print(f"") - print(f" ================ SUM ================") + print("") + print(" ================ SUM ================") if sums: self._print_matrix(sums) else: print("No predictions found.") - print(f" ================ AVG ================") + print(" ================ AVG ================") if avgs: self._print_matrix(avgs) else: print("No predictions found.") - print(f"") + print("") @staticmethod def _print_matrix(vals): """ Print a confusion matrix """ - + tp = f"{vals['true-positives']:^12.2f}" fp = f"{vals['false-positives']:^12.2f}" fn = f"{vals['false-negatives']:^12.2f}" - na = f" N/A " - - print(f"") - print(f" --------------------------- ") - print(f" | P_pred | N_pred | ") - print(f" -----------------------------------| ") + na = " N/A " + + print("") + print(" --------------------------- ") + print(" | P_pred | N_pred | ") + print(" -----------------------------------| ") print(f" | P_real |{tp}|{fn}| ") - print(f" |----------------------------------| ") + print(" |----------------------------------| ") print(f" | N_real |{fp}|{na}| ") - print(f" ------------------------------------ ") - print(f"") - + print(" ------------------------------------ ") + print("") + def _print_score(self): - if self._score is None: - print(f"Score cannot be printed. Invoke Run first.") + print("Score cannot be printed. Invoke Run first.") raise ValueError - + # print the score for k, v in self._score.items(): print(f"{k} [{len(v)}]:") - print(*[str(t) for t in v], sep='\n') - + print(*[str(t) for t in v], sep="\n") + def run(self): - - print(f"\n") - print(f"#################################") - print(f"##### Starting evaluation.. #####") - print(f"#################################") - print(f"\n") - + print("\n") + print("#################################") + print("##### Starting evaluation.. #####") + print("#################################") + print("\n") + # Calculate confusion matrix for all the steps self._score = {} for step in self.compare_at_steps: - s_trckr = self.ref_data[step] s_tcycl = self.tcycl_data[step] print(f"#### Step {step}:") - print(f"--> TRACK-cyclones ({len(s_trckr)}):", *[str(t) for t in s_trckr], sep='\n') - print(f"--> TCYCL-cyclones ({len(s_tcycl)}):", *[str(t) for t in s_tcycl], sep='\n') - + print( + f"--> TRACK-cyclones ({len(s_trckr)}):", + *[str(t) for t in s_trckr], + sep="\n", + ) + print( + f"--> TCYCL-cyclones ({len(s_tcycl)}):", + *[str(t) for t in s_tcycl], + sep="\n", + ) + step_scores = self._run_step(s_trckr, s_tcycl, self.threshold) - + # Extend tp, fp, fn for k, v in step_scores.items(): self._score.setdefault(k, []).extend(v) @staticmethod def _run_step(ref_step_data, tcycl_data_step, threshold): - matched = [] if len(ref_step_data): - print(f"\n# Matching TC's..") - + print("\n# Matching TC's..") + for trckr_tc in ref_step_data: - print(f"Processing TRACKR cyclone:\n{trckr_tc}") - + min_dist = 1e10 closest_tcycl = None for tcycl_tc in tcycl_data_step: dist = trckr_tc.distance_from(tcycl_tc) - + print(f"TCYCL cyclone: [{tcycl_tc}] is {dist:.2f} Km away.") if dist < min_dist: min_dist = dist closest_tcycl = tcycl_tc - + if min_dist < threshold and closest_tcycl not in [p[1] for p in matched]: matched.append((trckr_tc, closest_tcycl)) if len(matched): print(f"\n# {len(matched)} TC's matched") - + for tcr, tcp in matched: print("--------------") print(f"REAL: {tcr}") print(f"PRED: {tcp}") print("--------------") - + true_positives = [p[0] for p in matched] false_negatives = [tc for tc in ref_step_data if tc not in true_positives] - + tcycl_matched = [p[1] for p in matched] false_positives = [tc for tc in tcycl_data_step if tc not in tcycl_matched] - + # tp, fp, fn scores = { "true-positives": true_positives, "false-positives": false_positives, "false-negatives": false_negatives, } - + return scores - - + + class TCPlotter(Scorer): """ Compares and plots a TCYCL vs TRCKR predictions """ - def __init__(self, - trckr_pred, - tcycl_pred, - plot_steps_str, - output_dir, - ibtracks=None): - + def __init__( + self, trckr_pred, tcycl_pred, plot_steps_str, output_dir, ibtracks=None + ): self.trckr_prediction = trckr_pred self.tcycl_prediction = tcycl_pred self.plot_steps = [int(s) for s in plot_steps_str.split(",")] self.output_dir = output_dir self.ibtracks = ibtracks - + super().__init__() def run(self): """Run the actual plotting""" import matplotlib - matplotlib.use('Agg') + + matplotlib.use("Agg") import matplotlib.pyplot as plt import matplotlib.colors as plt_cols - + this_dir = os.path.dirname(os.path.realpath(__file__)) - + marker_size = 100 - trckr_cmap = plt.cm.get_cmap('plasma') + trckr_cmap = plt.cm.get_cmap("plasma") p_min, p_max = 900, 1000 - + # create output dir if not os.path.exists(self.output_dir): os.makedirs(self.output_dir) - + # make plots for each step for step in self.plot_steps: - plt.figure(step, figsize=(12, 6)) title_str = f"TC-Tracker and TCYCL data (step {step})" if self.ibtracks: title_str += " + IBtracks" plt.title(title_str) - trckr_style = {"c": [tc.params["p"] for tc in self.trckr_prediction[step]], - "cmap": trckr_cmap, - "s": int(marker_size*2), - "marker": "o", - "vmin": p_min, - "vmax": p_max} - - tcycl_style = {"c": "k", - "s": marker_size, - "marker": "x"} - - ibtks_style = {"c": "k", - "s": marker_size, - "marker": "+", - "facecolors": "none" - } + trckr_style = { + "c": [tc.params["p"] for tc in self.trckr_prediction[step]], + "cmap": trckr_cmap, + "s": int(marker_size * 2), + "marker": "o", + "vmin": p_min, + "vmax": p_max, + } + + tcycl_style = {"c": "k", "s": marker_size, "marker": "x"} + + ibtks_style = { + "c": "k", + "s": marker_size, + "marker": "+", + "facecolors": "none", + } # background map - bk_cmap = plt_cols.ListedColormap([[0.3, 0.4, 0.2, 0.8], [0.7, 0.7, 0.9, 0.9]]) - plt.imshow(np.load(os.path.join(this_dir, "map.npy")), extent=[0, 360, -90, 90], cmap=bk_cmap) - + bk_cmap = plt_cols.ListedColormap( + [[0.3, 0.4, 0.2, 0.8], [0.7, 0.7, 0.9, 0.9]] + ) + plt.imshow( + np.load(os.path.join(this_dir, "map.npy")), + extent=[0, 360, -90, 90], + cmap=bk_cmap, + ) + plt.xlim([0, 360]) plt.ylim([-90, 90]) plt.grid() @@ -610,67 +590,90 @@ def run(self): # plot TC's trckr_lats = [coords.lat for coords in self.trckr_prediction[step]] trckr_lons = [coords.lon for coords in self.trckr_prediction[step]] - - tcycl_lats = [coords.lat for coords in self.tcycl_prediction[step]] - tcycl_lons = [coords.lon if coords.lon >= 0 else coords.lon+360 - for coords in self.tcycl_prediction[step]] - im_trckr = plt.scatter(trckr_lons, trckr_lats, label="TC-tracker", **trckr_style) + tcycl_lats = [coords.lat for coords in self.tcycl_prediction[step]] + tcycl_lons = [ + coords.lon if coords.lon >= 0 else coords.lon + 360 + for coords in self.tcycl_prediction[step] + ] + + im_trckr = plt.scatter( + trckr_lons, trckr_lats, label="TC-tracker", **trckr_style + ) _ = plt.scatter(tcycl_lons, tcycl_lats, label="TCYCL", **tcycl_style) - + if self.ibtracks: ibtks_lats = [coords.lat for coords in self.ibtracks[step]] - ibtks_lons = [coords.lon if coords.lon >= 0 else coords.lon+360 - for coords in self.ibtracks[step]] - _ = plt.scatter(ibtks_lons, ibtks_lats, label="IB-Tracks", **ibtks_style) - + ibtks_lons = [ + coords.lon if coords.lon >= 0 else coords.lon + 360 + for coords in self.ibtracks[step] + ] + _ = plt.scatter( + ibtks_lons, ibtks_lats, label="IB-Tracks", **ibtks_style + ) + cbar = plt.colorbar(im_trckr, shrink=0.75) cbar.set_ticks(np.linspace(p_min, p_max, 6)) cbar.set_ticklabels(np.linspace(p_min, p_max, 6)) cbar.set_label("$P_{min}$") - + # axes - plt.gca().set_aspect('equal') + plt.gca().set_aspect("equal") plt.xticks(list(range(0, 361, 40))) plt.xlabel("Lon") plt.yticks(list(range(-90, 91, 20))) plt.ylabel("Lat") - + plt.legend() - + save_path = os.path.join(self.output_dir, f"plot_step_{step:03}.png") - + print(f"Saving plot in {save_path}") plt.savefig(save_path) plt.close() - + def score(self): return None def summary(self): pass - -def main(): + +def main(): parser = argparse.ArgumentParser() - parser.add_argument("trckr_summary_path", help=f"Path to CSV with Tracker summary") - parser.add_argument("tcycl_summary_path", help=f"Path to CSV with Tcycl summary") - - parser.add_argument("--dist_threshold", help=f"TC distance threshold [Km]", type=int, default=300) - - parser.add_argument("--trckr_w_min", help=f"TC-Tracker TC's with wind speed >= threshold", type=float) - parser.add_argument("--tcycl_w_min", help=f"TC-Tracker TC's with wind speed >= threshold", type=float) - - parser.add_argument("--plot_steps", help=f"Make plots for steps (comma-separated list - e.g. '6,12,18')") - parser.add_argument("--output_dir", help=f"Directory where plots are saved", default="/var/tmp/plots") - - parser.add_argument("--ibtracks_summary_path", help=f"Path to IBTracks CSV summary") - + parser.add_argument("trckr_summary_path", help="Path to CSV with Tracker summary") + parser.add_argument("tcycl_summary_path", help="Path to CSV with Tcycl summary") + + parser.add_argument( + "--dist_threshold", help="TC distance threshold [Km]", type=int, default=300 + ) + + parser.add_argument( + "--trckr_w_min", help="TC-Tracker TC's with wind speed >= threshold", type=float + ) + parser.add_argument( + "--tcycl_w_min", help="TC-Tracker TC's with wind speed >= threshold", type=float + ) + + parser.add_argument( + "--plot_steps", + help="Make plots for steps (comma-separated list - e.g. '6,12,18')", + ) + parser.add_argument( + "--output_dir", help="Directory where plots are saved", default="/var/tmp/plots" + ) + + parser.add_argument("--ibtracks_summary_path", help="Path to IBTracks CSV summary") + args = parser.parse_args() - + # # TC tracker and TCYCL data - trckr_prediction = TRCKR_Forecast(args.trckr_summary_path, min_wind_speed=args.trckr_w_min) - tcycl_prediction = TCYCL_Forecast(args.tcycl_summary_path, min_wind_speed=args.tcycl_w_min) + trckr_prediction = TRCKR_Forecast( + args.trckr_summary_path, min_wind_speed=args.trckr_w_min + ) + tcycl_prediction = TCYCL_Forecast( + args.tcycl_summary_path, min_wind_speed=args.tcycl_w_min + ) # print confusion matrix (TC tracker and TCYCL data) scorer = ConfusionMatrix(trckr_prediction, tcycl_prediction, args.dist_threshold) @@ -680,28 +683,33 @@ def main(): # Compare TCYCL VS IBTRACKS if requested ibtks_data = None if args.ibtracks_summary_path: - - ibtks_data = IBTKS_Data(args.ibtracks_summary_path, min_wind_speed=args.tcycl_w_min) + ibtks_data = IBTKS_Data( + args.ibtracks_summary_path, min_wind_speed=args.tcycl_w_min + ) # compare at first step only compare_step = tcycl_prediction.steps[0] - scorer = ConfusionMatrix(ibtks_data, - tcycl_prediction, - args.dist_threshold, - compare_at_steps=[compare_step]) + scorer = ConfusionMatrix( + ibtks_data, + tcycl_prediction, + args.dist_threshold, + compare_at_steps=[compare_step], + ) scorer.run() scorer.summary() # make plots if args.plot_steps: - plotter = TCPlotter(trckr_prediction, - tcycl_prediction, - args.plot_steps, - args.output_dir, - ibtracks=ibtks_data) + plotter = TCPlotter( + trckr_prediction, + tcycl_prediction, + args.plot_steps, + args.output_dir, + ibtracks=ibtks_data, + ) plotter.run() plotter.summary() if __name__ == "__main__": - sys.exit(main()) \ No newline at end of file + sys.exit(main()) diff --git a/pproc/src/pproc/tcycl/tcycl_run.py b/pproc/src/pproc/tcycl/tcycl_run.py index f99482a8..2efa4587 100644 --- a/pproc/src/pproc/tcycl/tcycl_run.py +++ b/pproc/src/pproc/tcycl/tcycl_run.py @@ -7,7 +7,6 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -import os import sys import json import copy @@ -27,7 +26,7 @@ class Utils: """ A collection of generic TC utils """ - + @staticmethod def ifs_steps(max_step): """ @@ -35,51 +34,53 @@ def ifs_steps(max_step): :param max_step: :return: """ - - return list(range(1, min(90, max_step + 1), 1)) + \ - list(range(90, min(144, max_step + 1), 3)) + \ - list(range(144, min(246, max_step + 1), 6)) - + + return ( + list(range(1, min(90, max_step + 1), 1)) + + list(range(90, min(144, max_step + 1), 3)) + + list(range(144, min(246, max_step + 1), 6)) + ) + @staticmethod def pxl_2_lat_lon(pixel_indexes, fields_metadata): """ From pixel indexes (+ fields info) to lat/lon coordinates """ - + coords = [] field_shape = fields_metadata["field_shape"] lat_min, lat_max = fields_metadata["latitude_range"] lon_min, lon_max = fields_metadata["longitude_range"] - + for tc in pixel_indexes: lat = lat_max - tc[0] / field_shape[0] * (lat_max - lat_min) lon = lon_min + tc[1] / field_shape[1] * (lon_max - lon_min) lon = lon - lon // 180 * 360 coords.append((lat, lon)) - + return coords - + @staticmethod def lat_lon_2_pxl(lat_lon, fields_metadata): """ Function that maps lat/lon to pixel indexes (according to size and area range) """ - + shape_y, shape_x = fields_metadata["field_shape"] lat_min, lat_max = fields_metadata["latitude_range"] lon_min, lon_max = fields_metadata["longitude_range"] - + pxl_idxs = [] for lat, lon in lat_lon: pxl_x = int((lon - lon_min) / (lon_max - lon_min) * shape_x) pxl_x = min(max(0, pxl_x), shape_x - 1) - + pxl_y = int((lat_max - lat) / (lat_max - lat_min) * shape_y) pxl_y = min(max(0, pxl_y), shape_y - 1) - + pxl_idxs.append((pxl_y, pxl_x)) - + return pxl_idxs @@ -87,56 +88,55 @@ class JSONConfigurable: """ A class configurable by JSON """ - + # default config _default_config = {} _required_config_params = [] - + def __init__(self, *args, **kwargs): - # class own copy of config params self._config = copy.deepcopy(self._default_config) self._config.update(kwargs.get("config")) - + # check required params self.check_required_params() - + # Attribute first-level key/values for k, v in self._config.items(): setattr(self, k, v) - + @classmethod def from_json(cls, json_file): - if json_file is None: return cls({}) - + try: with open(json_file, "r") as f: json_data = json.load(f) except FileNotFoundError: print(f"Json file {json_file} not found!") raise FileNotFoundError - + return cls(json_data) - + def check_required_params(self): """ Check for needed parameters """ - + for p in self._required_config_params: - assert p in self._config.keys(), \ - f"Parameter {p} needed by {self.__class__}, " \ + assert p in self._config.keys(), ( + f"Parameter {p} needed by {self.__class__}, " f"but NOT found in configuration!" - + ) + def save(self, file_path): """ Save the configuration """ with open(file_path, "w") as f: json.dump(self._config, f, indent=2, sort_keys=True) - + def summary(self): """ Print a summary @@ -148,62 +148,59 @@ class TCYCLConfig(JSONConfigurable): """ Tcycl default configuration """ - + _required_config_params = [ "data_fetching", "annotations", "pre_processing", "inference", - "cyclone_localizer" + "cyclone_localizer", ] - + _default_config = { - "data_fetching": { - "retriever": "fdb", - "variables": ["tcw", "100u", "100v", "sp", "sst", "lat", "lon"], - "grid_resolution": [0.25, 0.25], - "n_prev_steps": 3 - }, - "annotations": { - "retriever": "fdb", - "variables": ["10u", "10v", "sp"], - "grid_resolution": [0.25, 0.25], - "n_prev_steps": 1, - "search_radius": 10 - }, - "pre_processing": { - "lon_crop_pxl": 40, - "lat_crop_pxl": 16, - "norm_factor": { - "tcw": 55, - "100u": 25, - "100v": 25, - "sp": 100000, - "sst": 300, - "lat": 90, - "lon": 180 + "data_fetching": { + "retriever": "fdb", + "variables": ["tcw", "100u", "100v", "sp", "sst", "lat", "lon"], + "grid_resolution": [0.25, 0.25], + "n_prev_steps": 3, }, - "shift_factor": { - "tcw": 55, - "100u": 0, - "100v": 0, - "sp": 100000, - "sst": 150, - "lat": 0, - "lon": 0 - } - }, - "inference": { - "model_path": "model.tflite", - "model_type": "tflite", - "model_output_shape": [1, 640, 1408, 1] - }, - "cyclone_localizer": { - "label_threshold": 0.6, - "label_radius": 25 - } + "annotations": { + "retriever": "fdb", + "variables": ["10u", "10v", "sp"], + "grid_resolution": [0.25, 0.25], + "n_prev_steps": 1, + "search_radius": 10, + }, + "pre_processing": { + "lon_crop_pxl": 40, + "lat_crop_pxl": 16, + "norm_factor": { + "tcw": 55, + "100u": 25, + "100v": 25, + "sp": 100000, + "sst": 300, + "lat": 90, + "lon": 180, + }, + "shift_factor": { + "tcw": 55, + "100u": 0, + "100v": 0, + "sp": 100000, + "sst": 150, + "lat": 0, + "lon": 0, + }, + }, + "inference": { + "model_path": "model.tflite", + "model_type": "tflite", + "model_output_shape": [1, 640, 1408, 1], + }, + "cyclone_localizer": {"label_threshold": 0.6, "label_radius": 25}, } - + def __init__(self, config): super().__init__(config=config) @@ -212,7 +209,7 @@ class FieldData: """ Single-field Data """ - + required_keys = [ "name", "date", @@ -221,25 +218,24 @@ class FieldData: "values", "resolution", ] - + def __init__(self, **kwargs): - self._dict = kwargs - + for k in self.required_keys: try: setattr(self, k, kwargs[k]) except KeyError: print(f"Key {k} is required but not found in {kwargs}!") raise KeyError - + @classmethod def from_dict(cls, dict_entry): """ From a dictionary """ return FieldData(**dict_entry) - + def to_dict(self): return self._dict @@ -248,7 +244,7 @@ class FieldsData: """ A list of FieldData with equal shape and resolution """ - + # All fields MUST comply with the metadata metadata_fields = [ "resolution", @@ -256,69 +252,71 @@ class FieldsData: "latitude_range", "longitude_range", ] - + def __init__(self, fields, metadata): self.fields = fields self.metadata = metadata self._check_metadata() - + def _check_metadata(self): """ Check for required metadata """ for p in self.metadata_fields: assert p in self.metadata, f"Parameter {p} missing from metadata!" - + def _check_data(self): """ Check data against corresponding metadata """ - + for field in self.fields: assert field.values.shape == self.metadata["field_shape"] assert field.resolution == self.metadata["resolution"] - + def to_numpy(self): """ Returns the concatenated fields as numpy """ - + n = np.zeros((*self.metadata["field_shape"], len(self.fields))) for ff, field_data in enumerate(self.fields): n[:, :, ff] = field_data.values - + return n - + def update_metadata(self): """ Attempt to update metadata after operating on values """ - + # update field shape self.metadata["field_shape"] = self.fields[0].values.shape - + # update lat/lon range (if known) for f in self.fields: if f.name == "lat": self.metadata["latitude_range"] = np.min(f.values), np.max(f.values) if f.name == "lon": self.metadata["longitude_range"] = np.min(f.values), np.max(f.values) - + # check again all fields for consistency self._check_data() - + def get_fields(self, **kwargs): """ Get fields with matching params """ for k in kwargs.keys(): - assert k in FieldData.required_keys, f"Searching field by non-existent param {k}" - + assert ( + k in FieldData.required_keys + ), f"Searching field by non-existent param {k}" + fields = [] for f in self.fields: if all([f.to_dict()[k] == v for k, v in kwargs.items()]): fields.append(f) - + return fields @@ -326,16 +324,12 @@ class DataRetriever(JSONConfigurable): """ Retrieve data """ - - _required_config_params = [ - "variables", - "grid_resolution", - "n_prev_steps" - ] - + + _required_config_params = ["variables", "grid_resolution", "n_prev_steps"] + def __init__(self, config): super().__init__(config=config) - + def get_data(self, request): """ Get data @@ -347,7 +341,7 @@ class FDBDataRetriever(DataRetriever): """ Retrieve data from an FDB """ - + # parameter name-id map p_map = { "tcw": "136", @@ -356,9 +350,9 @@ class FDBDataRetriever(DataRetriever): "100u": "228246", "100v": "228247", "sp": "134", - "sst": "34" + "sst": "34", } - + # request template _req_template_base = { "date": None, @@ -369,96 +363,77 @@ class FDBDataRetriever(DataRetriever): "step": None, "stream": None, "type": None, - "domain": "g" - } - - _req_template_hres = { - "stream": "oper", - "type": "fc" + "domain": "g", } - - _req_template_ens_pf = { - "number": None, - "stream": "enfo", - "type": "pf" - } - - _req_template_ens_cf = { - "stream": "enfo", - "type": "cf" - } - + + _req_template_hres = {"stream": "oper", "type": "fc"} + + _req_template_ens_pf = {"number": None, "stream": "enfo", "type": "pf"} + + _req_template_ens_cf = {"stream": "enfo", "type": "cf"} + # required keys in GRIB message - required_grib_keys = [ - "shortName", - "Ni", - "Nj", - "dataDate", - "dataTime", - "stepRange" - ] - + required_grib_keys = ["shortName", "Ni", "Nj", "dataDate", "dataTime", "stepRange"] + # required keys in user request - _required_user_req_params = [ - "date", - "time", - "ens", - "step" - ] - + _required_user_req_params = ["date", "time", "ens", "step"] + def __init__(self, config): super().__init__(config) - + # add necessary config params to request template - self._req_template_base["param"] = [self.p_map.get(p) - for p in config["variables"] - if self.p_map.get(p)] - + self._req_template_base["param"] = [ + self.p_map.get(p) for p in config["variables"] if self.p_map.get(p) + ] + @classmethod def _check_user_request(cls, request): """ Check request params """ for p in cls._required_user_req_params: - assert p in request.keys(), \ - f"Parameter {p} needed by {cls}, " \ + assert p in request.keys(), ( + f"Parameter {p} needed by {cls}, " f"but NOT found in request {request}!" - + ) + def get_data_from_json_request(self, request_path): """ Get data, from json request file name """ with open(request_path, "r") as f: request = json.load(f) - + return self.get_data(request) - + def _compose_fdb_request(self, user_request): """ Compose full FDB request """ - + self._check_user_request(user_request) request = copy.deepcopy(self._req_template_base) - + assert isinstance(user_request["ens"], int), "ens field must be an int!" - assert -1 <= user_request["ens"] <= 51, "Request ens must be in range [-1,50]. " \ - " Legend (-1:HRES, 0:cf, 1,50:pf)!" - + assert -1 <= user_request["ens"] <= 51, ( + "Request ens must be in range [-1,50]. " " Legend (-1:HRES, 0:cf, 1,50:pf)!" + ) + # date and time request["date"] = user_request["date"] request["time"] = user_request["time"] - + # fill-in required steps - assert int(user_request["step"]) >= 3, f"Min step is 3." \ - f"Requested step {user_request['step']}!" - + assert int(user_request["step"]) >= 3, ( + f"Min step is 3." f"Requested step {user_request['step']}!" + ) + steps = Utils.ifs_steps(int(user_request["step"])) - + # We might need to request few other steps before the selected steps # this is what the "self.n_prev_steps" parameter is for - request["step"] = [str(s) for s in steps[-self.n_prev_steps:]] - + request["step"] = [str(s) for s in steps[-self.n_prev_steps :]] + # -1 means HRES if user_request["ens"] == -1: request.update(self._req_template_hres) @@ -467,107 +442,106 @@ def _compose_fdb_request(self, user_request): else: request.update(self._req_template_ens_pf) request["number"] = str(user_request["ens"]) - + # No None fields must be left for k, v in request.items(): assert v is not None, f"Request field {k} is None!" - + return request - + def get_data(self, user_request): """ Get data, from json request """ - + print("Retrieving data..") - + # generate full FDB request request = self._compose_fdb_request(user_request) print(f"Executing FDB request:\n{json.dumps(request, indent=2)}") - + # Expected N messages n_messages = len(request["param"]) * len(request["step"]) _data = [] - + fdb = pyfdb.FDB() reader = fdb.retrieve(request) - + grid_res_str = "/".join([str(v) for v in self.grid_resolution]) stream = BytesIO() - + job = mir.Job(grid=str(grid_res_str)) job.execute(reader, stream) - + stream.seek(0) ecc_reader = eccodes.StreamReader(stream) - + # # ====== With no MIR (for testing only) ====== # fdb = pyfdb.FDB() # result = fdb.retrieve(request) # ecc_reader = eccodes.StreamReader(result) # # ============================================ - + metadata = {} for mm, message in enumerate(range(n_messages)): - try: message = next(ecc_reader) except StopIteration: print("ERROR: Failed to get the expected messages from FDB!") raise StopIteration - + _msg_data = self._grib_msg_to_field_data(message) _data.append(_msg_data) - + # append lat/lon at last if mm == n_messages - 1: lat_msg, lon_msg = self._grib_msg_to_latlon_data(message) _data.append(lat_msg) _data.append(lon_msg) - + metadata = { "resolution": self.grid_resolution, "field_shape": lat_msg.values.shape, "latitude_range": (np.min(lat_msg.values), np.max(lat_msg.values)), - "longitude_range": (np.min(lon_msg.values), np.max(lon_msg.values)) + "longitude_range": (np.min(lon_msg.values), np.max(lon_msg.values)), } - + # Compose FieldsData data = FieldsData(_data, metadata) - + return data - + def _grib_msg_to_field_data(self, grib_msg): """ Read data from a GRIB message and return a FieldData object """ - + value_shape = grib_msg.get("Nj"), grib_msg.get("Ni") val = grib_msg.get_array("values") field_values = np.asarray(val).reshape(value_shape) - + data_entry_dict = { "name": grib_msg.get("shortName"), "date": grib_msg.get("dataDate"), "time": grib_msg.get("dataTime"), "step": grib_msg.get("stepRange"), "values": field_values, - "resolution": self.grid_resolution + "resolution": self.grid_resolution, } - + return FieldData.from_dict(data_entry_dict) - + def _grib_msg_to_latlon_data(self, grib_msg): """ Read lat/lon from a GRIB message and return 2 FieldData objects """ - + _data = grib_msg.get_data_points() - + value_shape = grib_msg.get("Nj"), grib_msg.get("Ni") - + lat, lon = zip(*[(elem["lat"], elem["lon"]) for elem in _data]) lat_values = np.asarray(lat).reshape(value_shape) lon_values = np.asarray(lon).reshape(value_shape) @@ -579,9 +553,9 @@ def _grib_msg_to_latlon_data(self, grib_msg): "time": grib_msg.get("dataTime"), "step": grib_msg.get("stepRange"), "values": lat_values, - "resolution": self.grid_resolution + "resolution": self.grid_resolution, } - + # lon dict lon_entry_dict = { "name": "lon", @@ -589,64 +563,64 @@ def _grib_msg_to_latlon_data(self, grib_msg): "time": grib_msg.get("dataTime"), "step": grib_msg.get("stepRange"), "values": lon_values, - "resolution": self.grid_resolution + "resolution": self.grid_resolution, } - + lat_field_data = FieldData.from_dict(lat_entry_dict) lon_field_data = FieldData.from_dict(lon_entry_dict) - + return lat_field_data, lon_field_data # factory of data retrievers -data_retrievers = { - "fdb": FDBDataRetriever -} +data_retrievers = {"fdb": FDBDataRetriever} class PreProcessor(JSONConfigurable): """ Preprocess data """ - + _required_config_params = [ "lon_crop_pxl", "lat_crop_pxl", "norm_factor", - "shift_factor" + "shift_factor", ] - + def __init__(self, config): super().__init__(config=config) - + def run(self, input_data): print("Pre-processing data..") - + nj, ni = input_data.metadata["field_shape"] - + # field boundaries after cropping y0, y1 = self.lat_crop_pxl, ni - self.lat_crop_pxl x0, x1 = self.lon_crop_pxl, nj - self.lon_crop_pxl - 1 - + # Crop fields fields = [] for mm, field_data in enumerate(input_data.fields): processed_field = copy.deepcopy(field_data) processed_field.values = processed_field.values[x0:x1, y0:y1] fields.append(processed_field) - + # Update metadata for new shape and lat/lon range processed_metadata = copy.deepcopy(input_data.metadata) processed_data = FieldsData(fields, processed_metadata) processed_data.update_metadata() - + # Finally apply normalization/shift factors for mm, field_data in enumerate(processed_data.fields): param_name = field_data.name norm_factor = self.norm_factor[param_name] shift_factor = self.shift_factor[param_name] - processed_data.fields[mm].values = (field_data.values - shift_factor) / norm_factor - + processed_data.fields[mm].values = ( + field_data.values - shift_factor + ) / norm_factor + return processed_data @@ -654,35 +628,31 @@ class Inference(JSONConfigurable): """ Handle the execution of ML inference """ - - _required_config_params = [ - "model_path", - "model_type", - "model_output_shape" - ] - + + _required_config_params = ["model_path", "model_type", "model_output_shape"] + def __init__(self, config): super().__init__(config=config) - + def run(self, input_data, save_to=None): """ Runs Infero for inference """ - + # add the outer (batch) dimension to tensor input_tensor = input_data.to_numpy() input_tensor = input_tensor[np.newaxis, ...] - + # inference infero = pyinfero.Infero(self.model_path, self.model_type) infero.initialise() output_tensor = infero.infer(input_tensor, self.model_output_shape) infero.finalise() - + # save when required if save_to is not None: np.save(save_to, output_tensor) - + return output_tensor @@ -690,58 +660,53 @@ class CycloneLocalizer_DBSCAN(JSONConfigurable): """ Uses DBSCAN algorithm """ - - _required_config_params = [ - "label_threshold", - "label_radius" - ] - + + _required_config_params = ["label_threshold", "label_radius"] + def __init__(self, config): super().__init__(config=config) - + def find(self, prediction_data, metadata, save_to=None): """ Apply kmeans to find cyclone centers """ - + # remove 1-dimensions from prediction tensor prediction_data = np.squeeze(prediction_data) - + # points above threshold eye_mask = np.argwhere(prediction_data > self.label_threshold) if eye_mask.shape[0] <= 1: - print("not enough points to attempt clustering..") clusters_lat_lon = [] - + # save if required if save_to is not None: self._write_json(clusters_lat_lon, save_to) - + return clusters_lat_lon - + # Attempt clustering eye_weights = prediction_data[eye_mask[:, 0], eye_mask[:, 1]] dbscan = DBSCAN(self.label_radius).fit(eye_mask, sample_weight=eye_weights) - + clusters = [] for label in set(dbscan.labels_): - if label != -1: label_idxs = np.where(dbscan.labels_ == label) cluster_x = np.mean(eye_mask[label_idxs, 0]) cluster_y = np.mean(eye_mask[label_idxs, 1]) clusters.append((cluster_x, cluster_y)) - + # transform to lat/lon clusters_lat_lon = Utils.pxl_2_lat_lon(clusters, metadata) - + # save when required if save_to is not None: self._write_json(clusters_lat_lon, save_to) - + return clusters_lat_lon - + @staticmethod def _write_json(clusters, save_path): with open(save_path, "w") as f: @@ -753,86 +718,87 @@ class TCAnnotator(JSONConfigurable): Produce annotations to TCYCL predictions (e.g. P_min, UV_max within a radius, etc..) """ - + _required_config_params = [ "retriever", "variables", "grid_resolution", "n_prev_steps", - "search_radius" + "search_radius", ] - - required_vars = [ - "10u", - "10v", - "sp" - ] - + + required_vars = ["10u", "10v", "sp"] + def __init__(self, config): super().__init__(config=config) - + # Variables required for annotation for var in self.required_vars: assert var in self.variables - + def run(self, predictions, data, save_to=None): """ Find P_min and U_10 max within self.search_radius from TC's """ - + tc_annotations = [] predictions_pxl = Utils.lat_lon_2_pxl(predictions, data.metadata) - + values_sp = self._get_field(data, "sp") values_10u = self._get_field(data, "10u") values_10v = self._get_field(data, "10v") values_lat = self._get_field(data, "lat") values_lon = self._get_field(data, "lon") - + y_len, x_len = data.metadata["field_shape"] mesh_grid = np.meshgrid(np.arange(x_len), np.arange(y_len)) mesh_zipped = np.stack((mesh_grid[0], mesh_grid[1]), axis=2) - + for pred in predictions_pxl: p = np.flip(np.asarray(pred)).reshape((1, 1, 2)) # pt coords - diff = mesh_zipped - np.tile(p, (*data.metadata["field_shape"], 1)) # coord diff - - d2 = np.sum(diff ** 2, axis=2) # square distance - mask_idxs = np.where(d2 < self.search_radius ** 2) # within-circle mask - + diff = mesh_zipped - np.tile( + p, (*data.metadata["field_shape"], 1) + ) # coord diff + + d2 = np.sum(diff**2, axis=2) # square distance + mask_idxs = np.where(d2 < self.search_radius**2) # within-circle mask + lats_in_mask = values_lat[mask_idxs] lons_in_mask = values_lon[mask_idxs] u10_in_mask = values_10u[mask_idxs] v10_in_mask = values_10v[mask_idxs] - vabs_in_mask = (u10_in_mask ** 2 + v10_in_mask ** 2) ** 0.5 + vabs_in_mask = (u10_in_mask**2 + v10_in_mask**2) ** 0.5 sp_in_mask = values_sp[mask_idxs] - + # P_min p_min_idx = np.argmin(sp_in_mask) p_min = sp_in_mask[p_min_idx] p_min_lat = lats_in_mask[p_min_idx] p_min_lon = lons_in_mask[p_min_idx] print(f"p_min {p_min:.2f} (in lat:{p_min_lat:.2f}, lon:{p_min_lon:.2f})") - + # U10_max vabs_max_idx = np.argmax(vabs_in_mask) vabs_max = vabs_in_mask[vabs_max_idx] vabs_max_lat = lats_in_mask[vabs_max_idx] vabs_max_lon = lons_in_mask[vabs_max_idx] - print(f"v_max {vabs_max:.2f} (in lat:{vabs_max_lat:.2f}, lon:{vabs_max_lon:.2f})") - - tc_annotations.append([p_min, p_min_lat, p_min_lon, vabs_max, vabs_max_lat, vabs_max_lon]) - + print( + f"v_max {vabs_max:.2f} (in lat:{vabs_max_lat:.2f}, lon:{vabs_max_lon:.2f})" + ) + + tc_annotations.append( + [p_min, p_min_lat, p_min_lon, vabs_max, vabs_max_lat, vabs_max_lon] + ) + # save when required if save_to is not None: with open(save_to, "w") as f: json.dump(tc_annotations, f, indent=2, sort_keys=True) - + return tc_annotations - + @staticmethod def _get_field(data, name): - fields = data.get_fields(name=name) assert len(fields) == 1, "only 1 field expected!" return np.asarray(fields[0].values) @@ -840,44 +806,50 @@ def _get_field(data, name): def main(): parser = argparse.ArgumentParser() - parser.add_argument("json_request", help=f"Path to JSON data request") - - parser.add_argument("--config", help=f"JSON of tcycl user-configuration") - parser.add_argument("--save_ml_output", help=f"Path to numpy ML prediction file") - parser.add_argument("--save_prediction", help=f"Path to JSON prediction file") - parser.add_argument("--annotate_prediction", help=f"Path to JSON annotation file") - + parser.add_argument("json_request", help="Path to JSON data request") + + parser.add_argument("--config", help="JSON of tcycl user-configuration") + parser.add_argument("--save_ml_output", help="Path to numpy ML prediction file") + parser.add_argument("--save_prediction", help="Path to JSON prediction file") + parser.add_argument("--annotate_prediction", help="Path to JSON annotation file") + args = parser.parse_args() - + # Tcycl configuration config = TCYCLConfig.from_json(args.config) config.summary() - + # Get input data retriever_type = data_retrievers[config.data_fetching["retriever"]] retriever = retriever_type(config.data_fetching) retrieved_data = retriever.get_data_from_json_request(args.json_request) - + # Pre-process input data pre_processor = PreProcessor(config.pre_processing) pre_proc_data = pre_processor.run(retrieved_data) - + # Run Inference inference_runner = Inference(config.inference) output_data = inference_runner.run(pre_proc_data, save_to=args.save_ml_output) - + # Run Clustering localizer = CycloneLocalizer_DBSCAN(config.cyclone_localizer) - prediction = localizer.find(output_data, pre_proc_data.metadata, save_to=args.save_prediction) - + prediction = localizer.find( + output_data, pre_proc_data.metadata, save_to=args.save_prediction + ) + # Annotate prediction if args.annotate_prediction: - annotation_data_retriever = data_retrievers[config.data_fetching["retriever"]](config.annotations) - annotation_data = annotation_data_retriever.get_data_from_json_request(args.json_request) + annotation_data_retriever = data_retrievers[config.data_fetching["retriever"]]( + config.annotations + ) + annotation_data = annotation_data_retriever.get_data_from_json_request( + args.json_request + ) annotator = TCAnnotator(config.annotations) - annotations = annotator.run(prediction, annotation_data, save_to=args.annotate_prediction) - - print(f"All done.") + annotator.run(prediction, annotation_data, save_to=args.annotate_prediction) + + print("All done.") if __name__ == "__main__": diff --git a/pproc/src/pproc/tcycl/tcycl_summarise_ibtks.py b/pproc/src/pproc/tcycl/tcycl_summarise_ibtks.py index 82cc3bce..b1aaa74c 100644 --- a/pproc/src/pproc/tcycl/tcycl_summarise_ibtks.py +++ b/pproc/src/pproc/tcycl/tcycl_summarise_ibtks.py @@ -26,7 +26,7 @@ class IBtracksSummary: ibtracks_file = "ibtracs.last3years.list.v04r00.csv" ibtracks_url = os.path.join(noaa_url, ibtracks_sub_url, ibtracks_file) - + winds = [ "WMO_WIND", "USA_WIND", @@ -41,7 +41,7 @@ class IBtracksSummary: "NEUMANN_WIND", "MLC_WIND", ] - + pres = [ "WMO_PRES", "USA_PRES", @@ -72,9 +72,9 @@ class IBtracksSummary: "LAT", "LON", "wind", - "pres" + "pres", ] - + def __init__(self, df): self.df = df @@ -92,7 +92,7 @@ def download(cls, download_path): def from_file(cls, file_name): df = cls.readIBTracs(file_name) return cls(df) - + @classmethod def readIBTracs(cls, file): """ @@ -113,9 +113,9 @@ def readIBTracs(cls, file): # sort fields by time df.sort_values(by=["ISO_TIME"]) - + return df - + @classmethod def has_numbers(cls, input_string): return any(char.isdigit() for char in input_string) @@ -136,7 +136,7 @@ def bestWind(cls, row): break return pd.Series(dict(wind=result)) - + @classmethod def bestPres(cls, row): """ @@ -153,7 +153,7 @@ def bestPres(cls, row): break return pd.Series(dict(pres=result)) - + def save(self, csv_filename, only_time=None): """ Saves to CSV @@ -161,18 +161,27 @@ def save(self, csv_filename, only_time=None): if only_time: time_ = pd.to_datetime(only_time) - self.df.loc[pd.to_datetime(self.df['ISO_TIME']) == time_].to_csv(csv_filename, index=None, header=True) + self.df.loc[pd.to_datetime(self.df["ISO_TIME"]) == time_].to_csv( + csv_filename, index=None, header=True + ) else: self.df.to_csv(csv_filename, index=None, header=True) - -def main(): + +def main(): parser = argparse.ArgumentParser() - parser.add_argument("--ibtracks_file", help=f"Path to downloaded CSV file", default="ibtracks.csv") - parser.add_argument("--output", help=f"Path to summary CSV file", default="ibtracks-summary.csv") - parser.add_argument("--only_time", help=f"Data only at date/time (format 'YYYYMMDD TT', e.g. '20211004 00')") + parser.add_argument( + "--ibtracks_file", help="Path to downloaded CSV file", default="ibtracks.csv" + ) + parser.add_argument( + "--output", help="Path to summary CSV file", default="ibtracks-summary.csv" + ) + parser.add_argument( + "--only_time", + help="Data only at date/time (format 'YYYYMMDD TT', e.g. '20211004 00')", + ) args = parser.parse_args() - + # Make summary file IBtracksSummary.download(args.ibtracks_file) IBtracksSummary.from_file(args.ibtracks_file).save(args.output, args.only_time) diff --git a/pproc/src/pproc/tcycl/tcycl_summarise_tcycl.py b/pproc/src/pproc/tcycl/tcycl_summarise_tcycl.py index 43caea71..cc9c19a6 100644 --- a/pproc/src/pproc/tcycl/tcycl_summarise_tcycl.py +++ b/pproc/src/pproc/tcycl/tcycl_summarise_tcycl.py @@ -18,14 +18,14 @@ class SummaryWriter: Combine TCycl predictions and annotations in a human-readable Summary format (e.g. CSV file) """ - + fields_base = [ "name", "step", "lat", "lon", ] - + fields_annot = [ "P_min", "P_min_lat", @@ -34,7 +34,7 @@ class SummaryWriter: "V10_max_lat", "V10_max_lon", ] - + def __init__(self, prediction_files, annotation_files=None): """ Writes a easily readable CSV summary with Tcycl prediction data @@ -45,23 +45,26 @@ def __init__(self, prediction_files, annotation_files=None): # prediction data self.prediction_titles = self.fields_base - predictions_files_dict = {int(pred_name.split(".")[1].split("step")[1]): pred_name - for pred_name in prediction_files.split(";")} + predictions_files_dict = { + int(pred_name.split(".")[1].split("step")[1]): pred_name + for pred_name in prediction_files.split(";") + } # annotation data (if available) annotations_files_dict = {} if annotation_files is not None: self.prediction_titles += self.fields_annot - annotations_files_dict = {int(anno_name.split(".")[1].split("step")[1]): anno_name - for anno_name in annotation_files.split(";")} + annotations_files_dict = { + int(anno_name.split(".")[1].split("step")[1]): anno_name + for anno_name in annotation_files.split(";") + } # compose overall data structure self.prediction_data = {} for step, pred_name in predictions_files_dict.items(): - with open(pred_name, "r") as f: prediction_content = json.load(f) - + if annotation_files is not None: with open(annotations_files_dict[step], "r") as f: annotation_content = json.load(f) @@ -73,7 +76,7 @@ def __init__(self, prediction_files, annotation_files=None): if annotation_files is not None: tc_content.extend(annotation_content[tc_idx]) step_content.append(tc_content) - + # step: [name, step, lat, lon] self.prediction_data.update({step: step_content}) @@ -81,26 +84,36 @@ def write(self, output=None): """ Write summary output """ - + print(f"Writing output CSV file {output}") - - with open(output, 'w') as f: + + with open(output, "w") as f: _writer = csv.writer(f) _writer.writerow(self.prediction_titles) for step, pred in self.prediction_data.items(): for tc in pred: _writer.writerow(tc) - + def main(): parser = argparse.ArgumentParser() - parser.add_argument("prediction_files", help=f";-separated list of prediction files (as prediction.step.json)") - parser.add_argument("--annotation_files", help=f";-separated list of annotation files (as annotation.step.json)") - parser.add_argument("--output", help=f"Path to output CSV file", default="output.csv") + parser.add_argument( + "prediction_files", + help=";-separated list of prediction files (as prediction.step.json)", + ) + parser.add_argument( + "--annotation_files", + help=";-separated list of annotation files (as annotation.step.json)", + ) + parser.add_argument( + "--output", help="Path to output CSV file", default="output.csv" + ) args = parser.parse_args() - + # Make summary file - writer = SummaryWriter(args.prediction_files, annotation_files=args.annotation_files) + writer = SummaryWriter( + args.prediction_files, annotation_files=args.annotation_files + ) writer.write(output=args.output) diff --git a/pproc/src/pproc/tcycl/tcycl_summarise_trckr.py b/pproc/src/pproc/tcycl/tcycl_summarise_trckr.py index f03d45e2..9760529a 100644 --- a/pproc/src/pproc/tcycl/tcycl_summarise_trckr.py +++ b/pproc/src/pproc/tcycl/tcycl_summarise_trckr.py @@ -22,17 +22,8 @@ class Experiment: for which we need to retrieve TC data """ - basin_list = [ - 'wnp', - 'spc', - 'sin', - 'nin', - 'enp', - 'cnp', - 'aus', - 'atl' - ] - + basin_list = ["wnp", "spc", "sin", "nin", "enp", "cnp", "aus", "atl"] + name = None exp_version = "" exp_class = None @@ -40,115 +31,122 @@ class Experiment: exp_stream = None max_member = None max_step = None - + # tar file retrieved from ECFS ecfs_tar_file = "tcyc.tar" - + def __init__(self, out_dir): self.out_dir = out_dir self.tmp_dir = os.path.join(self.out_dir, "tmp") self.outdir = os.path.join(self.out_dir, self.exp_version) - + def get_data(self, date_from, date_to): """ Get Experiment data """ - + date_a = pd.to_datetime(date_from) date_b = pd.to_datetime(date_to) by_day = 0.5 - - dates = pd.date_range(date_a, date_b, freq=str(by_day) + 'D') - + + dates = pd.date_range(date_a, date_b, freq=str(by_day) + "D") + if not os.path.exists(self.outdir): print(f"Creating dir: {self.outdir}") os.system(f"mkdir -p {self.outdir}") - + # get data self._get_tar_data(dates) - + # write a summary CSV file self._write_csv(date_from, date_to) - + def _get_tar_data(self, dates): """ Retrieve the tar file from ECFS """ - + for _date in dates: - yyyy = _date.strftime('%Y') - mm = _date.strftime('%m') - dd = _date.strftime('%d') - hh = _date.strftime('%H') - + yyyy = _date.strftime("%Y") + mm = _date.strftime("%m") + dd = _date.strftime("%d") + hh = _date.strftime("%H") + # ECFS path - ecfs_dir = '/emos/tc/' + self.exp_version + '/' + yyyy + mm + '/' + dd + hh + ecfs_dir = "/emos/tc/" + self.exp_version + "/" + yyyy + mm + "/" + dd + hh ecfs_path = os.path.join(ecfs_dir, self.ecfs_tar_file) - + # target path target_path = os.path.join(self.tmp_dir, self.ecfs_tar_file) - + print(f"Copying {ecfs_path} from ECFS..") os.system(f"ecp -n ec:{ecfs_path} {self.tmp_dir + '/'}") - + print(f"Un-tarring {target_path} in {self.tmp_dir}") os.system(f"tar -xf {target_path} -C {self.tmp_dir + '/'}") - + print(f"Tar finished. Cleaning up {target_path}") # os.system(f"rm -f {target_path}") - + self._extract_inner_tar(_date) - + def _extract_inner_tar(self, date): """ Un-tar the data file within the ecfs tar """ - + data_tar = self._data_tar_file(date) - + print(f"Un-tarring {data_tar} in {self.outdir}") os.system(f"tar -xf {data_tar} -C {self.outdir + '/'}") - + def _data_tar_file(self, date): """ Path of datafile tar (inside the retrieved tar) Each experiment type has its own path/names.. """ - + raise NotImplementedError def _write_csv(self, date_from, date_to): - - print(f"Generating summary CSV..") - + print("Generating summary CSV..") + dd_from = pd.to_datetime(date_from) dd_to = pd.to_datetime(date_to) by_day = 1 - - datelist_all = pd.date_range(dd_from, dd_to, freq=str(by_day) + 'D') - + + datelist_all = pd.date_range(dd_from, dd_to, freq=str(by_day) + "D") + df = pd.DataFrame() for basin in self.basin_list: for date1 in datelist_all: - - filename = self.out_dir + "/" \ - + self.exp_version + "/" \ - + self.exp_version + \ - date1.strftime('%Y%m%d%H') + \ - "_" + self.exp_stream + \ - "_000" + str(self.max_step) + \ - "_" + basin + filename = ( + self.out_dir + + "/" + + self.exp_version + + "/" + + self.exp_version + + date1.strftime("%Y%m%d%H") + + "_" + + self.exp_stream + + "_000" + + str(self.max_step) + + "_" + + basin + ) # NB obsfile must be set to "none" # => no tc-name matching allowed ["vitals", "bt", "ib"] df1 = read_oper_fc(filename, date1, basin, True, obsfile="none") - + for ind in df1: # df = df.append(df1[ind]) df = pd.concat([df, df1[ind]]) - csv_summary_path = os.path.join(self.out_dir, f"tc_tracker_data_{self.name}.csv") - + csv_summary_path = os.path.join( + self.out_dir, f"tc_tracker_data_{self.name}.csv" + ) + print(f"Writing summary CSV file {csv_summary_path}") df.to_csv(csv_summary_path) @@ -157,7 +155,7 @@ class HRES_Experiment(Experiment): """ HRES experiment """ - + name = "HRES" exp_version = "0001" exp_class = "od" @@ -165,26 +163,44 @@ class HRES_Experiment(Experiment): exp_stream = "da" max_member = 1 max_step = 240 - + def __init__(self, out_dir): super().__init__(out_dir) - + def _data_tar_file(self, date): - yyyy = date.strftime('%Y') - mm = date.strftime('%m') - dd = date.strftime('%d') - hh = date.strftime('%H') - - tar_dir = self.tmp_dir + \ - '/tcyc_' + str(self.max_step) + \ - '/' + self.exp_version + \ - '/' + yyyy + mm + dd + hh + \ - '/' + self.exp_type - - tar_file = self.exp_version + yyyy + mm + dd + hh + \ - '_' + self.exp_type + \ - '_' + '000' + str(self.max_step) - + yyyy = date.strftime("%Y") + mm = date.strftime("%m") + dd = date.strftime("%d") + hh = date.strftime("%H") + + tar_dir = ( + self.tmp_dir + + "/tcyc_" + + str(self.max_step) + + "/" + + self.exp_version + + "/" + + yyyy + + mm + + dd + + hh + + "/" + + self.exp_type + ) + + tar_file = ( + self.exp_version + + yyyy + + mm + + dd + + hh + + "_" + + self.exp_type + + "_" + + "000" + + str(self.max_step) + ) + return os.path.join(tar_dir, tar_file) @@ -192,7 +208,7 @@ class CF_Experiment(Experiment): """ CF experiment """ - + name = "CF" exp_version = "0001" exp_class = "od" @@ -200,28 +216,44 @@ class CF_Experiment(Experiment): exp_stream = "000" max_member = 1 max_step = 240 - + def __init__(self, out_dir): super().__init__(out_dir) - + def _data_tar_file(self, date): - yyyy = date.strftime('%Y') - mm = date.strftime('%m') - dd = date.strftime('%d') - hh = date.strftime('%H') - - tar_dir = self.tmp_dir + \ - '/tcyc_' + str(self.max_step) + \ - '/' + self.exp_version + \ - '/' + yyyy + mm + dd + hh + \ - '/' + self.exp_type - - tar_file = self.exp_version + \ - yyyy + mm + dd + hh + \ - '_' + "000" + \ - '_' + '000' + \ - str(self.max_step) - + yyyy = date.strftime("%Y") + mm = date.strftime("%m") + dd = date.strftime("%d") + hh = date.strftime("%H") + + tar_dir = ( + self.tmp_dir + + "/tcyc_" + + str(self.max_step) + + "/" + + self.exp_version + + "/" + + yyyy + + mm + + dd + + hh + + "/" + + self.exp_type + ) + + tar_file = ( + self.exp_version + + yyyy + + mm + + dd + + hh + + "_" + + "000" + + "_" + + "000" + + str(self.max_step) + ) + return os.path.join(tar_dir, tar_file) @@ -229,7 +261,7 @@ class PF_Experiment(Experiment): """ PF experiment """ - + name = "PF" exp_version = "0001" exp_class = "od" @@ -237,52 +269,75 @@ class PF_Experiment(Experiment): exp_stream = "001" max_member = 50 max_step = 240 - + def __init__(self, out_dir): super().__init__(out_dir) - + def _extract_inner_tar(self, date): - yyyy = date.strftime('%Y') - mm = date.strftime('%m') - dd = date.strftime('%d') - hh = date.strftime('%H') - + yyyy = date.strftime("%Y") + mm = date.strftime("%m") + dd = date.strftime("%d") + hh = date.strftime("%H") + for number in np.arange(1, self.max_member + 1): - ens_number = '{:03}'.format(number) - - tar_dir = self.tmp_dir + \ - '/tcyc_' + str(self.max_step) + \ - '/' + self.exp_version + \ - '/' + yyyy + mm + dd + hh + \ - '/' + self.exp_type + \ - '/' + ens_number + '/' - - tar_file = self.exp_version + \ - yyyy + mm + dd + hh + \ - '_' + ens_number + \ - '_000' + str(self.max_step) - + ens_number = "{:03}".format(number) + + tar_dir = ( + self.tmp_dir + + "/tcyc_" + + str(self.max_step) + + "/" + + self.exp_version + + "/" + + yyyy + + mm + + dd + + hh + + "/" + + self.exp_type + + "/" + + ens_number + + "/" + ) + + tar_file = ( + self.exp_version + + yyyy + + mm + + dd + + hh + + "_" + + ens_number + + "_000" + + str(self.max_step) + ) + tar_file_path = os.path.join(tar_dir, tar_file) - + print(f"Un-tarring {tar_file_path} in {self.outdir}") os.system(f"tar -xf {tar_file_path} -C {self.outdir + '/'}") -exp_types = { - "hres": HRES_Experiment, - "pf": PF_Experiment, - "cf": CF_Experiment -} +exp_types = {"hres": HRES_Experiment, "pf": PF_Experiment, "cf": CF_Experiment} def main(): parser = argparse.ArgumentParser() - parser.add_argument("date_from", help=f"Requested data from (format 'YYYYMMDD TT', e.g. '20211004 00')") - parser.add_argument("date_to", help=f"Requested data to (format 'YYYYMMDD TT', e.g. '20211004 12')") - parser.add_argument("--output_dir", help=f"Output directory", default="/var/tmp/tc_tracker_data") - parser.add_argument("--data_types", help=f"Data types requested (e.g. hres,pf,cf)", default="hres") + parser.add_argument( + "date_from", + help="Requested data from (format 'YYYYMMDD TT', e.g. '20211004 00')", + ) + parser.add_argument( + "date_to", help="Requested data to (format 'YYYYMMDD TT', e.g. '20211004 12')" + ) + parser.add_argument( + "--output_dir", help="Output directory", default="/var/tmp/tc_tracker_data" + ) + parser.add_argument( + "--data_types", help="Data types requested (e.g. hres,pf,cf)", default="hres" + ) args = parser.parse_args() - + for t in args.data_types.split(","): print(f"Retrieving data for {t} - from {args.date_from} to {args.date_to}") exp = exp_types[t](args.output_dir) diff --git a/pproc/src/pproc/tcycl/tcycl_tools.py b/pproc/src/pproc/tcycl/tcycl_tools.py index 66e3c630..a5a01712 100644 --- a/pproc/src/pproc/tcycl/tcycl_tools.py +++ b/pproc/src/pproc/tcycl/tcycl_tools.py @@ -14,28 +14,26 @@ def calc_dist(latdiff, londiff, lat): - radius = 6371000 dlat = np.radians(latdiff) dlon = np.radians(londiff) - a = (np.sin(dlat / 2) * np.sin(dlat / 2) + - np.cos(np.radians(lat)) * np.cos(np.radians(lat+latdiff)) * - np.sin(dlon / 2) * np.sin(dlon / 2)) + a = np.sin(dlat / 2) * np.sin(dlat / 2) + np.cos(np.radians(lat)) * np.cos( + np.radians(lat + latdiff) + ) * np.sin(dlon / 2) * np.sin(dlon / 2) c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1 - a)) dist = radius * c - + return dist def calc_speed3(my_pd): - latdiff = my_pd["lat_p"].diff() londiff = my_pd["lon_p"].diff() lat = my_pd["lat_p"] - + dist = calc_dist(latdiff, londiff, lat) speed = dist / (my_pd["step"].diff() * 3600) # in m/s - speedcum = dist.cumsum() / 1000. # km + speedcum = dist.cumsum() / 1000.0 # km return [speed, speedcum] @@ -51,22 +49,22 @@ def check_name(pd_fc, pd_bt, n_tc, tol=5): def read_oper_fc(filename, date1, basin, Pall, obsfile="none"): - # here "read_oper_fc" can only be used with no obsfile! - assert obsfile == "none", "Error, for tcycl validation purposes " \ - "obsfile must be set to 'none'" - + assert obsfile == "none", ( + "Error, for tcycl validation purposes " "obsfile must be set to 'none'" + ) + dict_of_tc = {} - recon = date1.strftime('%Y') - + recon = date1.strftime("%Y") + if obsfile != "none": - df_bt = read_besttrack_date(date1, obsfile) - + read_besttrack_date(date1, obsfile) + if (basin == "aus") or (basin == "spc") or (basin == "sin"): - lat_mult = -1. + lat_mult = -1.0 else: lat_mult = 1 - fp = open(filename, 'r') + fp = open(filename, "r") line = fp.readline() cnt = 1 ar = [] # Array for properties from file @@ -79,12 +77,12 @@ def read_oper_fc(filename, date1, basin, Pall, obsfile="none"): month = line[11:13] day = line[14:16] time = line[17:19] - lat1 = lat_mult * float(line[20:23]) / 10. + 0.05 - lon1 = float(line[23:27]) / 10. + 0.05 + lat1 = lat_mult * float(line[20:23]) / 10.0 + 0.05 + lon1 = float(line[23:27]) / 10.0 + 0.05 wind = float(line[28:31]) pres = float(line[32:36]) - lat2 = lat_mult * float(line[37:40]) / 10. + 0.05 - lon2 = float(line[40:44]) / 10. + 0.05 + lat2 = lat_mult * float(line[37:40]) / 10.0 + 0.05 + lon2 = float(line[40:44]) / 10.0 + 0.05 # print([year,month,day,time]) # if time=="00" or time=="12": ard.append([year, month, day, time]) @@ -93,15 +91,26 @@ def read_oper_fc(filename, date1, basin, Pall, obsfile="none"): # print("Finish TC",s1[0]) np_ard = np.asarray(ard) np_ar = np.asarray(ar) - my_dates = pd.to_datetime({'year': np_ard[:, 0], - 'month': np_ard[:, 1], - 'day': np_ard[:, 2], - 'hour': np_ard[:, 3]}) # - d = {"datetime": my_dates, "lat_p": np_ar[:, 0], "lon_p": np_ar[:, 1], "wind": np_ar[:, 2], - "pres": np_ar[:, 3], "lat_w": np_ar[:, 4], "lon_w": np_ar[:, 5]} + my_dates = pd.to_datetime( + { + "year": np_ard[:, 0], + "month": np_ard[:, 1], + "day": np_ard[:, 2], + "hour": np_ard[:, 3], + } + ) # + d = { + "datetime": my_dates, + "lat_p": np_ar[:, 0], + "lon_p": np_ar[:, 1], + "wind": np_ar[:, 2], + "pres": np_ar[:, 3], + "lat_w": np_ar[:, 4], + "lon_w": np_ar[:, 5], + } df1 = pd.DataFrame(d) # print(df1) - + # ============================================================== # Check if the cyclone is observed at the initialisation time, # and extract name from observation file in that case @@ -115,12 +124,17 @@ def read_oper_fc(filename, date1, basin, Pall, obsfile="none"): # No name matching used name1 = str(n_tc) # ============================================================== - + # Calculate additional diagnostics - df1["step"] = (df1["datetime"] - date1).values.astype("timedelta64[h]").astype(int) - df1["windrad"] = calc_dist(df1.lat_p - df1.lat_w, df1.lon_p - df1.lon_w, df1.lat_p) / 1000. + df1["step"] = ( + (df1["datetime"] - date1).values.astype("timedelta64[h]").astype(int) + ) + df1["windrad"] = ( + calc_dist(df1.lat_p - df1.lat_w, df1.lon_p - df1.lon_w, df1.lat_p) + / 1000.0 + ) df1["wind"] = df1["wind"] * 0.514444 - + speed = calc_speed3(df1) df1["speed"] = speed[0] df1["accdist"] = speed[1] @@ -137,17 +151,17 @@ def read_oper_fc(filename, date1, basin, Pall, obsfile="none"): df1["name"] = nameTmp if Pall: dict_of_tc[nameTmp] = df1 - + # Add DataFrame to Dictionary only if the cyclone is in observation file. Can be changed. - + # if str(n_tc)!=name1: # dict_of_tc[name1] = df1 - + n_tc += 1 ar = [] ard = [] - + line = fp.readline() cnt += 1 - + return dict_of_tc diff --git a/pproc/src/pproc/thermal_indices.py b/pproc/src/pproc/thermal_indices.py index b22f3a82..e0fa9a63 100755 --- a/pproc/src/pproc/thermal_indices.py +++ b/pproc/src/pproc/thermal_indices.py @@ -24,19 +24,20 @@ import sys import functools import signal +from typing import Optional import earthkit.data -from earthkit.data.readers.grib.metadata import GribFieldMetadata import numpy as np import thermofeel as thermofeel from meters import metered from conflator import Conflator -from pproc.common.accumulation import Accumulator +from ppruntime.thermo import helpers from pproc.common.accumulation_manager import AccumulationManager from pproc.common.parallel import create_executor, sigterm_handler +from pproc.common.io import write_grib from pproc.config.types import ThermoConfig, ThermoParamConfig -from pproc.thermo import helpers +from pproc.config.targets import Target from pproc.thermo.indices import ComputeIndices logger = logging.getLogger(__name__) @@ -79,6 +80,24 @@ def is_target_param(out_params: list[str], valid_names: set[str]) -> bool: return bool(set(out_params) & valid_names) +def write( + target: Target, + ds: "earthkit.data.FieldList | earthkit.data.core.fieldlist.Field", + metadata: Optional[dict] = None, +): + if isinstance(ds, earthkit.data.core.fieldlist.Field): + ds = [ds] + metadata = metadata or {} + for f in ds: + field_metadata = f.metadata() + updates = metadata.copy() + # Handle wrapped metadata + if hasattr(field_metadata, "extra"): + updates.update(field_metadata.extra) + message = f.metadata()._handle + write_grib(target, message, f.values, updates) + + @metered("Process step", out=logger.info) def process_step( config: ThermoConfig, @@ -102,7 +121,7 @@ def process_step( # Mean Radiant Temperature - shortName mrt - ECMWF product if is_target_param(param.out_params, {"mrt", 261002}): mrt = indices.calc_field("mrt", indices.calc_mrt, fields) - helpers.write(indices_target, mrt) + write(indices_target, mrt) # Univeral Thermal Climate Index - shortName utci - ECMWF product if is_target_param(param.out_params, {"utci", 261001}): @@ -113,58 +132,58 @@ def process_step( print_misses=config.utci_misses, validate=config.validateutci, ) - helpers.write(indices_target, utci) + write(indices_target, utci) # Heat Index (adjusted) - shortName heatx - ECMWF product if is_target_param(param.out_params, {"heatx", 260004}): heatx = indices.calc_field("heatx", indices.calc_heatx, fields) - helpers.write(indices_target, heatx) + write(indices_target, heatx) # Wind Chill factor - shortName wcf - ECMWF product if is_target_param(param.out_params, {"wcf", 260005}): wcf = indices.calc_field("wcf", indices.calc_wcf, fields) - helpers.write(indices_target, wcf) + write(indices_target, wcf) # Apparent Temperature - shortName aptmp - ECMWF product if is_target_param(param.out_params, {"aptmp", 260255}): aptmp = indices.calc_field("aptmp", indices.calc_aptmp, fields) - helpers.write(indices_target, aptmp) + write(indices_target, aptmp) # Relative humidity percent at 2m - shortName 2r - ECMWF product if is_target_param(param.out_params, {"2r", 260242}): rhp = indices.calc_field("2r", indices.calc_rhp, fields) - helpers.write(indices_target, rhp) + write(indices_target, rhp) # Humidex - shortName hmdx if is_target_param(param.out_params, {"hmdx", 261016}): hmdx = indices.calc_field("hmdx", indices.calc_hmdx, fields) - helpers.write(indices_target, hmdx) + write(indices_target, hmdx) # Normal Effective Temperature - shortName nefft if is_target_param(param.out_params, {"nefft", 261018}): nefft = indices.calc_field("nefft", indices.calc_nefft, fields) - helpers.write(indices_target, nefft) + write(indices_target, nefft) # Globe Temperature - shortName gt if is_target_param(param.out_params, {"gt", 261015}): gt = indices.calc_field("gt", indices.calc_gt, fields) - helpers.write(indices_target, gt) + write(indices_target, gt) # Wet-bulb temperature - shortName wbt if is_target_param(param.out_params, {"wbt", 261023}): wbt = indices.calc_field("wbt", indices.calc_wbt, fields) - helpers.write(indices_target, wbt) + write(indices_target, wbt) # Wet Bulb Globe Temperature - shortName wbgt if is_target_param(param.out_params, {"wbgt", 261014}): # wbgt = indices.calc_field("wbgt", indices.calc_wbgt, fields) - helpers.write(indices_target, wbgt) + write(indices_target, wbgt) # Write out intermediate fields for field in ["10si", "cossza", "dsrp"]: sel = indices.results.sel(param=field) if len(sel) != 0: - helpers.write( + write( config.outputs.intermediate.target, sel, metadata=config.outputs.intermediate.metadata, @@ -227,7 +246,7 @@ def main(): for x in accum_fields.metadata() ], ) - helpers.write( + write( cfg.outputs.accum.target, accum_fields, metadata=cfg.outputs.accum.metadata, diff --git a/pproc/src/pproc/thermo/__init__.py b/pproc/src/pproc/thermo/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pproc/src/pproc/thermo/indices.py b/pproc/src/pproc/thermo/indices.py new file mode 100644 index 00000000..72d77b66 --- /dev/null +++ b/pproc/src/pproc/thermo/indices.py @@ -0,0 +1,297 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from datetime import timedelta +import logging +import numpy as np +import copy +from typing import Optional + +import earthkit.data +import earthkit.meteo.solar +import thermofeel +from meters import metered + +from ppruntime.thermo.helpers import ( + compute_ehPa, + field_values, + find_utci_missing_values, + get_datetime, + latlon, + step_interval, + validate_utci, +) +from ppruntime.thermal_indices import metadata_intensity, metadata_accumulation + +logger = logging.getLogger(__name__) + + +class ComputeIndices: + def __init__(self, out_keys: Optional[dict] = None): + self.out_keys = out_keys or {} + self.results = None + + def create_output(self, values, template, **overrides): + grib_set = copy.deepcopy(self.out_keys) + grib_set.update(overrides) + template = [x.override(**grib_set) for x in template] + return earthkit.data.FieldList.from_array(values, template) + + def create_surface_output(self, values, template, **overrides): + grib_set = copy.deepcopy(self.out_keys) + grib_set.update(overrides) + template = [ + x.override( + **grib_set, + typeOfFirstFixedSurface=1, + scaleFactorOfFirstFixedSurface="MISSING", + scaledValueOfFirstFixedSurface="MISSING", + ) + for x in template + ] + return earthkit.data.FieldList.from_array(values, template) + + @metered("cossza", out=logger.debug) + def calc_cossza_int(self, fields): + lats, lons = latlon(fields) + + basetime, validtime = get_datetime(fields) + + delta = step_interval(fields) + + dtbegin = validtime - timedelta(hours=delta) + dtend = validtime + + cossza = earthkit.meteo.solar.cos_solar_zenith_angle_integrated( + latitudes=lats, + longitudes=lons, + begin_date=dtbegin, + end_date=dtend, + integration_order=2, + ) + + return self.create_output( + cossza, metadata_intensity(fields)[:1], paramId="214001" + ) + + @metered("ws", out=logger.debug) + def calc_ws(self, fields): + if "10si" in fields.indices()["param"]: + return fields.sel(param="10si") + + u10 = field_values(fields, "10u") # m/s + v10 = field_values(fields, "10v") # m/s + + ws = np.sqrt(u10**2 + v10**2) # m/s + template = fields.sel(param="10u").metadata() + return self.create_output(ws, template, paramId="207") + + @metered("hmdx", out=logger.debug) + def calc_hmdx(self, fields): + t2m = field_values(fields, "2t") # Kelvin + td = field_values(fields, "2d") # Kelvin + + hmdx = thermofeel.calculate_humidex(t2_k=t2m, td_k=td) # Kelvin + + return self.create_surface_output( + hmdx, metadata_intensity(fields), paramId="261016" + ) + + @metered("rhp", out=logger.debug) + def calc_rhp(self, fields): + t2m = field_values(fields, "2t") # Kelvin + td = field_values(fields, "2d") # Kelvin + + rhp = thermofeel.calculate_relative_humidity_percent(t2_k=t2m, td_k=td) # % + + return self.create_output(rhp, metadata_intensity(fields), paramId="260242") + + @metered("heatx", out=logger.debug) + def calc_heatx(self, fields): + t2m = field_values(fields, "2t") # Kelvin + td = field_values(fields, "2d") # Kelvin + + heatx = thermofeel.calculate_heat_index_adjusted(t2_k=t2m, td_k=td) # Kelvin + + return self.create_surface_output( + heatx, metadata_intensity(fields), paramId="260004" + ) + + @metered("dsrp", out=logger.debug) + def calc_dsrp(self, fields): + """ + In the absence of dsrp, approximate it with fdir and cossza. + Note this introduces some amount of error as cossza approaches zero + """ + # Will use dsrp if available, otherwise approximate it + if "dsrp" in fields.indices()["param"]: + return fields.sel(param="dsrp") + + fdir = field_values(fields, "fdir") # W/m2 + cossza = self.calc_field("cossza", self.calc_cossza_int, fields).to_array() + + dsrp = thermofeel.approximate_dsrp(fdir, cossza) + + return self.create_output(dsrp, metadata_accumulation(fields), paramId="47") + + def calc_field(self, name, func, fields, **kwargs): + if self.results is not None: + sel = self.results.sel(param=name) + if len(sel) != 0: + return sel + + res = func(fields, **kwargs) + + if self.results is None: + self.results = res + else: + self.results += res + field_values(self.results, name) + + return res + + @metered("utci", out=logger.debug) + def calc_utci(self, fields, *, print_misses=True, validate=True): + lats, lons = latlon(fields) + + t2m = field_values(fields, "2t") # Kelvin + t2d = field_values(fields, "2d") # Kelvin + + ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s + mrt = self.calc_field("mrt", self.calc_mrt, fields).to_array() # Kelvin + + ehPa = compute_ehPa(t2m, t2d) + + utci = thermofeel.calculate_utci(t2_k=t2m, va=ws, mrt=mrt, ehPa=ehPa) # Kelvin + + for index in range(len(utci)): + missing = find_utci_missing_values( + t2m[index], + ws[index], + mrt[index], + ehPa[index], + utci[index], + print_misses, + ) + + if validate: + validate_utci(utci[index], missing, lats, lons) + + utci[index][missing] = np.nan + + return self.create_surface_output( + utci, metadata_intensity(fields), paramId="261001" + ) + + @metered("wbgt", out=logger.debug) + def calc_wbgt(self, fields): + t2m = field_values(fields, "2t") # Kelvin + t2d = field_values(fields, "2d") # Kelvin + + ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s + mrt = self.calc_field("mrt", self.calc_mrt, fields).to_array() # Kelvin + + wbgt = thermofeel.calculate_wbgt(t2m, mrt, ws, t2d) # Kelvin + + return self.create_surface_output( + wbgt, metadata_intensity(fields), paramId="261014" + ) + + @metered("gt", out=logger.debug) + def calc_gt(self, fields): + t2m = field_values(fields, "2t") # Kelvin + + ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s + mrt = self.calc_field("mrt", self.calc_mrt, fields).to_array() # Kelvin + + gt = thermofeel.calculate_bgt(t2m, mrt, ws) # Kelvin + + return self.create_surface_output( + gt, metadata_intensity(fields), paramId="261015" + ) + + @metered("wbt", out=logger.debug) + def calc_wbt(self, fields): + t2m = field_values(fields, "2t") # Kelvin + + rhp = self.calc_field("2r", self.calc_rhp, fields).to_array() # % + + wbt = thermofeel.calculate_wbt(t2_k=t2m, rh=rhp) # Kelvin + + return self.create_surface_output( + wbt, metadata_intensity(fields), paramId="261023" + ) + + @metered("nefft", out=logger.debug) + def calc_nefft(self, fields): + t2m = field_values(fields, "2t") # Kelvin + ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s + rhp = self.calc_field("2r", self.calc_rhp, fields).to_array() # % + + nefft = thermofeel.calculate_normal_effective_temperature( + t2m, ws, rhp + ) # Kelvin + + return self.create_surface_output( + nefft, metadata_intensity(fields), paramId="261018" + ) + + @metered("wcf", out=logger.debug) + def calc_wcf(self, fields): + t2m = field_values(fields, "2t") # Kelvin + + ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s + + wcf = thermofeel.calculate_wind_chill(t2m, ws) # Kelvin + + return self.create_surface_output( + wcf, metadata_intensity(fields), paramId="260005" + ) + + @metered("aptmp", out=logger.debug) + def calc_aptmp(self, fields): + t2m = field_values(fields, "2t") # Kelvin + rhp = self.calc_field("2r", self.calc_rhp, fields).to_array() # % + ws = self.calc_field("10si", self.calc_ws, fields).to_array() # m/s + + aptmp = thermofeel.calculate_apparent_temperature( + t2_k=t2m, va=ws, rh=rhp + ) # Kelvin + + return self.create_surface_output( + aptmp, metadata_intensity(fields), paramId="260255" + ) + + @metered("mrt", out=logger.debug) + def calc_mrt(self, fields): + cossza = self.calc_field("cossza", self.calc_cossza_int, fields).to_array() + dsrp = self.calc_field("dsrp", self.calc_dsrp, fields).to_array() + + delta = step_interval(fields) + seconds_in_time_step = delta * 3600 # steps are in hours + + f = 1.0 / float(seconds_in_time_step) + + ssrd = field_values(fields, "ssrd") # W/m2 + fdir = field_values(fields, "fdir") # W/m2 + strd = field_values(fields, "strd") # W/m2 + strr = field_values(fields, "str") # W/m2 + ssr = field_values(fields, "ssr") # W/m2 + + # remove negative values from deaccumulated solar fields + for v in ssrd, fdir, strd, ssr: + v[v < 0] = 0 + + mrt = thermofeel.calculate_mean_radiant_temperature( + ssrd * f, ssr * f, dsrp * f, strd * f, fdir * f, strr * f, cossza + ) # Kelvin + + return self.create_surface_output( + mrt, metadata_intensity(fields), paramId="261002" + ) diff --git a/pproc/src/pproc/wind.py b/pproc/src/pproc/wind.py deleted file mode 100755 index e62771bd..00000000 --- a/pproc/src/pproc/wind.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python3 -# (C) Copyright 2021- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -# -# (C) Copyright 1996- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation nor -# does it submit to any jurisdiction. -import functools -import sys -import numpy as np -import signal - -import eccodes -from meters import ResourceMeter -from conflator import Conflator -from ppcore.utils.dicts import dict_product - -from pproc import common -from pproc.common.accumulation_manager import AccumulationManager -from pproc.common.parallel import parallel_processing, sigterm_handler -from pproc.common.param_requester import ParamRequester -from pproc.config.param import ParamConfig -from pproc.config.types import WindConfig -from pproc.config.targets import NullTarget - - -def wind_metadata(step: int, **out_keys) -> dict: - grib_sets = { - "bitsPerValue": 24, - "step": step, - **out_keys, - } - if step == 0: - grib_sets["timeRangeIndicator"] = 1 - elif step > 255: - grib_sets["timeRangeIndicator"] = 10 - else: - grib_sets["timeRangeIndicator"] = 0 - - return grib_sets - - -def wind_iteration( - config: WindConfig, - param: ParamConfig, - dims: dict, -): - requester = ParamRequester( - param, - config.inputs, - src_name="fc", - total=param.total_fields, - ) - metadata, ens = requester.retrieve_data(**dims) - template = metadata[0] - with ResourceMeter(f"Param {param.name}, {dims}"): - if not isinstance(config.outputs.ws.target, NullTarget): - for number in range(ens.shape[0]): - marstype = ( - "pf" - if number > 0 and template.get("type") in ["cf", "fc"] - else template.get("type") - ) - metadata = wind_metadata( - **dims, - number=number, - type=marstype, - **config.outputs.ws.metadata, - **param.metadata, - ) - common.io.write_grib( - config.outputs.ws.target, template, ens[number], metadata - ) - - mean_keys = wind_metadata( - **dims, - **config.outputs.mean.metadata, - **param.metadata, - ) - common.io.write_grib( - config.outputs.mean.target, template, np.mean(ens, axis=0), mean_keys - ) - - std_keys = wind_metadata( - **dims, - **config.outputs.std.metadata, - **param.metadata, - ) - common.io.write_grib( - config.outputs.std.target, template, np.std(ens, axis=0), std_keys - ) - - for name in config.outputs.names: - getattr(config.outputs, name).target.flush() - config.recovery.add_checkpoint(param=param.name, **dims) - - -def main(): - sys.stdout.reconfigure(line_buffering=True) - signal.signal(signal.SIGTERM, sigterm_handler) - - cfg = Conflator(app_name="pproc-wind", model=WindConfig).load() - cfg.initialise() - cfg.print() - - plan = [] - for param in cfg.parameters: - accum_manager = AccumulationManager.create(param.accumulations) - for dims in dict_product(accum_manager.dims): - if cfg.recovery.existing_checkpoint(param=param.name, **dims): - print(f"Recovery: skipping dims: {param.name} {dims}") - continue - plan.append((param, dims)) - - iteration = functools.partial(wind_iteration, cfg) - parallel_processing( - iteration, - plan, - cfg.parallelisation, - ) - - cfg.clean() - - -if __name__ == "__main__": - main() diff --git a/pproc/src/pproc/wind850.py b/pproc/src/pproc/wind850.py deleted file mode 100755 index c77864e9..00000000 --- a/pproc/src/pproc/wind850.py +++ /dev/null @@ -1,296 +0,0 @@ -#!/usr/bin/env python3 -# (C) Copyright 2021- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - - -from os import path - -import eccodes -# import pyfdb - - -def parse_range(r: str): - if not r: - return (None,) - - if isinstance(r, list): - return sorted(set(r)) - - l = r.lower().split("/") - if len(l) == 5 and l[1] == "to" and l[3] == "by": - return range(int(l[0]), int(l[2]) + 1, int(l[4])) - - if len(l) == 3 and l[1] == "to": - return range(int(l[0]), int(l[2]) + 1, 1) - - return sorted(set(map(int, l))) - - -class Wind: - def __init__(self, vo, d, u, v) -> None: - self.vo = vo - self.d = d - self.u = u - self.v = v - - -def parse_wind_paramids(param: str, metkit_share_dir) -> Wind: - from pproc.Config import ParamId - - uv = param.split("/") - assert len(uv) == 2 - - paramid = ParamId(metkit_share_dir) - u, v = map(lambda p: paramid.id(int(p) if p.isdigit() else p), uv) - vo, d = paramid.vod((u, v)) - - return Wind(vo, d, u, v) - - -def mars(input: str = ""): - from os import environ - from subprocess import run - - p = run( - "mars", - capture_output=True, - text=True, - input=input, - env=environ, - ) - if p.returncode: - print(f"stdout:\n{p.stdout}\n") - print(f"stderr:\n{p.stderr}\n") - - return p.returncode == 0 - - -def wind_mean_sd_eps(wind, levelist, step, expver, var: dict, pp: dict) -> list: - """ - Calculate ensemble (type=cf/pf) mean and standard deviation of wind speed - """ - - assert var["mars"] - - target = f"param=vo_d,levelist={levelist},step={step}.eps.grib" - request = f""" -retrieve, - date = {var["date"]}, - time = {var["time"]}, - number = {var["number"]}, - stream = enfo, - levelist = {levelist}, - levtype = pl, - expver = {expver}, - type = pf, - step = {step}, - class = {var["class"]}, - param = {"/".join((str(wind.vo), str(wind.d)))}, - target = '{target}' -retrieve, - type = cf, - number = off -""" - from io import BytesIO - import numpy as np - import mir - - print(request) - # assert mars(request) - assert path.exists(target) - - out = BytesIO() - inp = mir.MultiDimensionalGribFileInput(target, 2) - - job = mir.Job(vod2uv="1", **pp) - job.execute(inp, out) - - out.seek(0) - reader = eccodes.StreamReader(out) - messages = list(reader) - - tens = (len(parse_range(var["number"])) + 1) * 2 # (nens + 1)*(vo, d) - assert len(messages) == tens - - u = np.asarray([m.get_array("values") for m in messages if m["paramId"] == wind.u]) - v = np.asarray([m.get_array("values") for m in messages if m["paramId"] == wind.v]) - assert u.shape == v.shape - assert u.shape[0] + v.shape[0] == tens - - ws = np.sqrt(u * u + v * v) - mean = np.mean(ws, axis=0) - stddev = np.std(ws, axis=0, ddof=int(var["std_corrected_sample"])) - - em = messages[0].copy() - em.set("marsType", "em") - em.set("indicatorOfParameter", "010") # FIXME check? - em.set("gribTablesVersionNo", 128) - em.set_array("values", mean) - - es = messages[0].copy() - es.set("marsType", "es") - es.set("indicatorOfParameter", "010") # FIXME check? - es.set("gribTablesVersionNo", 128) - es.set_array("values", stddev) - - return em, es - - -def wind_norm_det(wind, levelist, step, expver, var: dict, pp: dict) -> eccodes.Message: - """ - Calculate deterministic (type=fc) wind speed - """ - from io import BytesIO - import numpy as np - import mir - - assert var["mars"] - - target = f"param=vo_d,levelist={levelist},step={step}.det.grib" - request = f""" -retrieve, - date = {var["date"]}, - time = {var["time"]}, - levelist = {levelist}, - levtype = pl, - expver = {expver}, - type = fc, - step = {step}, - class = {var["class"]}, - param = {"/".join((str(wind.vo), str(wind.d)))}, - target = '{target}' -""" - - print(request) - # assert mars(request) - assert path.exists(target) - - out = BytesIO() - inp = mir.MultiDimensionalGribFileInput(target, 2) - - job = mir.Job(vod2uv="1", **pp) - job.execute(inp, out) - - out.seek(0) - reader = eccodes.StreamReader(out) - messages = list(reader) - - assert len(messages) == 2 - assert messages[0]["paramId"] == wind.u - assert messages[1]["paramId"] == wind.v - - uv = np.asarray([m.get_array("values") for m in messages]) - ws = np.linalg.norm(uv, axis=0) - - ws = messages[0].copy() - ws.set_array("values", ws) - - return ws - - -def calculate_normalized_stddev_last_30_days(): - assert False - - -def main(args=None): - from datetime import datetime - import argparse - - from pproc.Config import VariableTree, postproc_keys - - # arguments - parser = argparse.ArgumentParser( - description="Calculate wind speed mean/standard deviation", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - ) - - parser.add_argument("--config-file", help="Configuration file", required=True) - parser.add_argument( - "--config-node", help="Configuration node", required=True, nargs="+" - ) - - parser.add_argument("--no-mars", action="store_false", dest="mars") - parser.add_argument("--write-grib", action="store_true") - parser.add_argument("--write-fdb", action="store_true") - parser.add_argument( - "--std-corrected-sample", - help="corrected sample standard deviation", - action="store_true", - ) - parser.add_argument( - "--metkit-share-dir", - help="Metkit configuration directory", - default="/usr/local/apps/ecmwf-toolbox/2022.05.0.0/GNU/11.2/share/metkit", - ) - - parser.add_argument("--param", default="u/v") - parser.add_argument("--class", default="od", dest="klass") - parser.add_argument("--expver", default=1) - parser.add_argument("--expver-da", default=None) - parser.add_argument("--date", required=True) - parser.add_argument("--time", choices=(0, 6, 12, 18), default=0, type=int) - parser.add_argument("--number", default="1/to/50") - - parser.add_argument("--grid", default="O640") - parser.add_argument("--resol", default="av") - parser.add_argument("--intgrid", default=None) - parser.add_argument("--truncation", default=None) - - args = parser.parse_args() - print(args) - - date = datetime.strptime(args.date, "%Y%m%d") - - # assert fdb or mars-client - fdb = None # pyfdb.FDB() - assert bool(fdb) != args.mars - - # variables - tree = VariableTree(args.config_file) - var = tree.variables(*map(lambda n: int(n) if n.isdigit() else n, args.config_node)) - var.update(vars(args)) - var["class"] = var.pop("klass") - print(var) - - # wind paramids - wind = parse_wind_paramids(var["param"], args.metkit_share_dir) - - # post-processing keys - pp_keys = postproc_keys(args.metkit_share_dir) - pp = {key: var[key] for key in pp_keys if var.get(key, None)} - - for levelist in parse_range(var["levelist"]): - for step in parse_range(var["step"]): - - # calculate mean/stddev of wind speed for type=pf/cf (eps) - em, es = wind_mean_sd_eps(wind, levelist, step, var["expver"], var, pp) - - # calculate wind speed for type=fc (deterministic) - expver = var.get("expver_da", None) - if not expver: - expver = var["expver"] - - det = wind_norm_det(wind, levelist, step, expver, var, pp) - - for message, filename in zip((em, es, det), ("em.grib", "es.grib", "det.grib")): - if var["write_grib"]: - assert not path.exists(filename) - with open(filename, "wb") as fout: - message.write_to(fout) - - if var["write_fdb"]: - fdb.archive(message.get_buffer()) - -# # fdb.flush() - - -if __name__ == "__main__": - import sys - - main(sys.argv) diff --git a/pproc/src/pproc/wind850.yaml b/pproc/src/pproc/wind850.yaml deleted file mode 100644 index 0eadfc70..00000000 --- a/pproc/src/pproc/wind850.yaml +++ /dev/null @@ -1,28 +0,0 @@ ---- - -ws: - levelist: [250, 850] - param: u/v - grid: O640 - 12: { step: 0/to/12/by/3 } - 24: { step: 15/to/24/by/3 } - 36: { step: 27/to/36/by/3 } - 48: { step: 39/to/48/by/3 } - 60: { step: 51/to/60/by/3 } - 72: { step: 63/to/72/by/3 } - 84: { step: 75/to/84/by/3 } - 96: { step: 87/to/96/by/3 } - 108: { step: 99/to/108/by/3 } - 120: { step: 111/to/120/by/3 } - 132: { step: 123/to/132/by/3 } - 144: { step: 135/to/144/by/3 } - 168: { step: 150/to/168/by/6 } - 192: { step: 174/to/192/by/6 } - 216: { step: 198/to/216/by/6 } - 240: { step: 222/to/240/by/6 } - 264: { step: 246/to/264/by/6 } - 288: { step: 270/to/288/by/6 } - 312: { step: 394/to/312/by/6 } - 336: { step: 318/to/336/by/6 } - 360: { step: 342/to/360/by/6 } - diff --git a/pproc/tests/common/test_accumulation_manager.py b/pproc/tests/common/test_accumulation_manager.py index 313c4853..f0a9938d 100644 --- a/pproc/tests/common/test_accumulation_manager.py +++ b/pproc/tests/common/test_accumulation_manager.py @@ -248,7 +248,7 @@ def test_create(config, accums, coords): matched = False continue for dim in acc.dims: - if type(dim.accumulation) != accums[dim.key][0]: + if type(dim.accumulation) is not accums[dim.key][0]: matched = False break if dim.accumulation.coords != acc_coords[dim.key]: diff --git a/pproc/tests/common/test_io.py b/pproc/tests/common/test_io.py index bca69093..bae4d671 100644 --- a/pproc/tests/common/test_io.py +++ b/pproc/tests/common/test_io.py @@ -1,154 +1,154 @@ -# (C) Copyright 2021- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -import eccodes -from functools import partial -import os -import pytest -import numpy as np - -from pproc.common import dataset, io, parallel -from conftest import DATA_DIR - - -request = { - "class": "od", - "expver": "0001", - "stream": "enfo", - "date": "20240507", - "domain": "g", - "time": 12, - "type": "cf", - "levtype": "pl", - "levelist": 250, - "param": [138, 155], - "step": range(0, 7, 3), -} - - -def test_fdb_read(fdb): - data = io.fdb_read(fdb, request) - assert len(data.coords["param"]) == 2 - assert len(data.coords["step"]) == 3 - assert isinstance(data.grib_template, eccodes.highlevel.message.GRIBMessage) - assert not np.any(np.isnan(data)) - - -def test_fdb_read_to_file(tmpdir, fdb): - io.fdb_read_to_file(fdb, request, f"{tmpdir}/test.grib") - data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test.grib")] - assert len(data) == 6 - - -@pytest.mark.parametrize( - "func", - [ - io.fdb_read, - io.fdb_read_to_file, - ], -) -def test_fdb_no_data(tmpdir, fdb, func): - no_data = request.copy() - no_data["date"] = "20240508" - if func == io.fdb_read_to_file: - func = partial(func, file_out=f"{tmpdir}/test.grib") - with pytest.raises(RuntimeError): - func(fdb, no_data) - - -def test_fdb_missing_values(fdb): - has_missing = request.copy() - has_missing.pop("levelist") - has_missing.update( - {"stream": "waef", "param": 140232, "step": 12, "levtype": "sfc"} - ) - data = io.fdb_read(fdb, has_missing) - assert np.any(np.isnan(data)) - assert not np.any(data == 9999) - - -def test_fdb_target(): - target = io.target_from_location("fdb:") - for msg in eccodes.FileReader(f"{DATA_DIR}/wind.grib"): - msg.set("type", "em") - target.write(msg) - target.flush() - req = request.copy() - req["type"] = "em" - data = list(eccodes.StreamReader(target.fdb.retrieve(req))) - assert len(data) == 6 - - -def test_file_target(tmpdir): - target = io.target_from_location(f"file:{tmpdir}/test.grib") - messages = [ - msg - for index, msg in enumerate(eccodes.FileReader(f"{DATA_DIR}/wind.grib")) - if index < 5 - ] - assert len(messages) == 5 - for msg in messages: - target.write(msg) - data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test.grib")] - assert len(data) == 5 - - -def test_fileset_target(tmpdir): - target = io.target_from_location(f"fileset:{tmpdir}" + "/test_{step}.grib") - for msg in eccodes.FileReader(f"{DATA_DIR}/2t_ens.grib"): - target.write(msg) - files = os.listdir(tmpdir) - assert set(x for x in files if x.endswith(".grib")) == set( - f"test_{x}.grib" for x in range(12, 37, 6) - ) - data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test_12.grib")] - assert len(data) == 6 - - -def _write(target, message): - # Modify parameter to distinguish from data already in FDB - message.set("paramId", "228") - target.write(message) - target.flush() - - -@pytest.mark.parametrize( - "loc, out_loc, reqs", - [ - ["file:TMPDIR/test.grib", None, [{}]], - [ - "fileset:TMPDIR/test_{step}.grib", - "fileset:test", - [{"step": x} for x in range(12, 37, 6)], - ], - ], -) -def test_target_parallel(tmpdir, fdb, loc, out_loc, reqs): - loc = loc.replace("TMPDIR", str(tmpdir)) - if out_loc is None: - out_loc = loc - target = io.target_from_location(loc) - target.enable_parallel() - parallel.parallel_processing( - _write, - [ - (target, io.GribMetadata(x._handle)) - for x in eccodes.FileReader(f"{DATA_DIR}/2t_ens.grib") - ], - 4, - ) - - type_, path = loc.split(":") - num_messages = 0 - for req in reqs: - if type_ == "fileset": - req["location"] = path - reader = dataset.open_dataset({type_: {"test": req}}, out_loc) - num_messages += len(list(reader)) - assert num_messages == 30 +# # (C) Copyright 2021- ECMWF. +# # +# # This software is licensed under the terms of the Apache Licence Version 2.0 +# # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# # +# # In applying this licence, ECMWF does not waive the privileges and immunities +# # granted to it by virtue of its status as an intergovernmental organisation +# # nor does it submit to any jurisdiction. + +# import eccodes +# from functools import partial +# import os +# import pytest +# import numpy as np + +# from pproc.common import dataset, io, parallel +# from conftest import DATA_DIR + + +# request = { +# "class": "od", +# "expver": "0001", +# "stream": "enfo", +# "date": "20240507", +# "domain": "g", +# "time": 12, +# "type": "cf", +# "levtype": "pl", +# "levelist": 250, +# "param": [138, 155], +# "step": range(0, 7, 3), +# } + + +# def test_fdb_read(fdb): +# data = io.fdb_read(fdb, request) +# assert len(data.coords["param"]) == 2 +# assert len(data.coords["step"]) == 3 +# assert isinstance(data.grib_template, eccodes.highlevel.message.GRIBMessage) +# assert not np.any(np.isnan(data)) + + +# def test_fdb_read_to_file(tmpdir, fdb): +# io.fdb_read_to_file(fdb, request, f"{tmpdir}/test.grib") +# data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test.grib")] +# assert len(data) == 6 + + +# @pytest.mark.parametrize( +# "func", +# [ +# io.fdb_read, +# io.fdb_read_to_file, +# ], +# ) +# def test_fdb_no_data(tmpdir, fdb, func): +# no_data = request.copy() +# no_data["date"] = "20240508" +# if func == io.fdb_read_to_file: +# func = partial(func, file_out=f"{tmpdir}/test.grib") +# with pytest.raises(RuntimeError): +# func(fdb, no_data) + + +# def test_fdb_missing_values(fdb): +# has_missing = request.copy() +# has_missing.pop("levelist") +# has_missing.update( +# {"stream": "waef", "param": 140232, "step": 12, "levtype": "sfc"} +# ) +# data = io.fdb_read(fdb, has_missing) +# assert np.any(np.isnan(data)) +# assert not np.any(data == 9999) + + +# def test_fdb_target(): +# target = io.target_from_location("fdb:") +# for msg in eccodes.FileReader(f"{DATA_DIR}/wind.grib"): +# msg.set("type", "em") +# target.write(msg) +# target.flush() +# req = request.copy() +# req["type"] = "em" +# data = list(eccodes.StreamReader(target.fdb.retrieve(req))) +# assert len(data) == 6 + + +# def test_file_target(tmpdir): +# target = io.target_from_location(f"file:{tmpdir}/test.grib") +# messages = [ +# msg +# for index, msg in enumerate(eccodes.FileReader(f"{DATA_DIR}/wind.grib")) +# if index < 5 +# ] +# assert len(messages) == 5 +# for msg in messages: +# target.write(msg) +# data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test.grib")] +# assert len(data) == 5 + + +# def test_fileset_target(tmpdir): +# target = io.target_from_location(f"fileset:{tmpdir}" + "/test_{step}.grib") +# for msg in eccodes.FileReader(f"{DATA_DIR}/2t_ens.grib"): +# target.write(msg) +# files = os.listdir(tmpdir) +# assert set(x for x in files if x.endswith(".grib")) == set( +# f"test_{x}.grib" for x in range(12, 37, 6) +# ) +# data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test_12.grib")] +# assert len(data) == 6 + + +# def _write(target, message): +# # Modify parameter to distinguish from data already in FDB +# message.set("paramId", "228") +# target.write(message) +# target.flush() + + +# @pytest.mark.parametrize( +# "loc, out_loc, reqs", +# [ +# ["file:TMPDIR/test.grib", None, [{}]], +# [ +# "fileset:TMPDIR/test_{step}.grib", +# "fileset:test", +# [{"step": x} for x in range(12, 37, 6)], +# ], +# ], +# ) +# def test_target_parallel(tmpdir, fdb, loc, out_loc, reqs): +# loc = loc.replace("TMPDIR", str(tmpdir)) +# if out_loc is None: +# out_loc = loc +# target = io.target_from_location(loc) +# target.enable_parallel() +# parallel.parallel_processing( +# _write, +# [ +# (target, io.GribMetadata(x._handle)) +# for x in eccodes.FileReader(f"{DATA_DIR}/2t_ens.grib") +# ], +# 4, +# ) + +# type_, path = loc.split(":") +# num_messages = 0 +# for req in reqs: +# if type_ == "fileset": +# req["location"] = path +# reader = dataset.open_dataset({type_: {"test": req}}, out_loc) +# num_messages += len(list(reader)) +# assert num_messages == 30 diff --git a/pproc/tests/config/test_accum.py b/pproc/tests/config/test_accum.py index 699cac57..209d06f9 100644 --- a/pproc/tests/config/test_accum.py +++ b/pproc/tests/config/test_accum.py @@ -742,7 +742,7 @@ ], "name": { "type": "default", - "suffix": f"_2", + "suffix": "_2", "prefix": "", }, "metadata": { @@ -811,7 +811,7 @@ "name": { "type": "default", "prefix": "", - "suffix": f"_0", + "suffix": "_0", }, "metadata": {}, "sequential": True, diff --git a/pproc/tests/config/test_factory.py b/pproc/tests/config/test_factory.py index 769aaab9..1c793153 100644 --- a/pproc/tests/config/test_factory.py +++ b/pproc/tests/config/test_factory.py @@ -7,11 +7,10 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -import os import pytest from ppcore.utils.dicts import deep_update -from ppcore.utils.requests import expand, extract_mars +from ppcore.utils.requests import extract_mars from ppcore.schema.schema import Schema from pproc.config import types @@ -58,8 +57,9 @@ def default_config(name: str, param: str): "request": [ { **DEFAULT_REQUEST, + "stream": "oper", "param": param, - "type": "cf", + "type": "fc", }, { **DEFAULT_REQUEST, @@ -85,20 +85,22 @@ def default_config(name: str, param: str): }, "parameters": { "130_pl": { - "total_fields": 102, + "total_fields": 202, "dtype": "float64", "inputs": { "fc": { "request": [ { **DEFAULT_REQUEST, + "stream": "eefo", "type": "cf", "levelist": [250, 500], }, { **DEFAULT_REQUEST, + "stream": "eefo", "type": "pf", - "number": list(range(1, 51)), + "number": list(range(1, 101)), "levelist": [250, 500], }, ], @@ -110,7 +112,15 @@ def default_config(name: str, param: str): "windows": [ { "operation": "mean", - "metadata": {"type": "fcmean"}, + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, + "type": "fcmean", + }, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -122,7 +132,15 @@ def default_config(name: str, param: str): }, { "operation": "standard_deviation", - "metadata": {"type": "fcstdev"}, + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, + "type": "fcstdev", + }, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -134,7 +152,15 @@ def default_config(name: str, param: str): }, { "operation": "minimum", - "metadata": {"type": "fcmin"}, + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, + "type": "fcmin", + }, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -146,7 +172,15 @@ def default_config(name: str, param: str): }, { "operation": "maximum", - "metadata": {"type": "fcmax"}, + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, + "type": "fcmax", + }, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -181,8 +215,14 @@ def default_config(name: str, param: str): "dtype": "float64", "metadata": { "bitsPerValue": 16, + "legBaseDate": 20241001, + "legBaseTime": 0, + "legNumber": 1, + "localDefinitionNumber": 30, "numberOfForecastsInEnsemble": "{num_fields}:int", + "oceanAtmosphereCoupling": 2, "perturbationNumber": 0, + "stream": "enfo", }, "accumulations": { "levelist": {"coords": [[250], [500]]}, @@ -306,7 +346,8 @@ def default_config(name: str, param: str): { **DEFAULT_REQUEST, "expver": "9998", - "type": "cf", + "stream": "oper", + "type": "fc", "levelist": [250, 500], }, { @@ -320,13 +361,22 @@ def default_config(name: str, param: str): } }, "dtype": "float64", + "metadata": {"stream": "enfo"}, "accumulations": { "step": { "type": "legacywindow", "windows": [ { "operation": "mean", - "metadata": {"type": "fcmean"}, + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, + "type": "fcmean", + }, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -338,7 +388,15 @@ def default_config(name: str, param: str): }, { "operation": "standard_deviation", - "metadata": {"type": "fcstdev"}, + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, + "type": "fcstdev", + }, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -350,7 +408,15 @@ def default_config(name: str, param: str): }, { "operation": "minimum", - "metadata": {"type": "fcmin"}, + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, + "type": "fcmin", + }, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -362,7 +428,15 @@ def default_config(name: str, param: str): }, { "operation": "maximum", - "metadata": {"type": "fcmax"}, + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, + "type": "fcmax", + }, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -388,10 +462,11 @@ def default_config(name: str, param: str): [ { **DEFAULT_REQUEST, + "stream": "eefo", "levelist": [250, 500], "step": ["0-168", "24-192"], "type": ["fcmean", "fcstdev", "fcmin", "fcmax"], - "number": list(range(0, 51)), + "number": list(range(0, 101)), }, "130", ], @@ -434,7 +509,7 @@ def test_from_outputs(request, output_request, input_param): overrides, cfg_type, updates = TEST_CASES[request.node.callspec.id] config = ConfigFactory.from_outputs(test_schema, [output_request], **overrides) - assert type(config) == cfg_type + assert type(config) is cfg_type check = default_config(f"{input_param}_{output_request['levtype']}", input_param) deep_update(check, updates) assert config.model_dump(by_alias=True) == cfg_type(**check).model_dump( @@ -467,16 +542,18 @@ def test_from_outputs(request, output_request, input_param): [ { **DEFAULT_REQUEST, + "stream": "eefo", "levelist": [250, 500], "step": list(range(0, 193, 6)), "type": "cf", }, { **DEFAULT_REQUEST, + "stream": "eefo", "levelist": [250, 500], "step": list(range(0, 193, 6)), "type": "pf", - "number": list(range(1, 51)), + "number": list(range(1, 101)), }, ], { @@ -484,43 +561,15 @@ def test_from_outputs(request, output_request, input_param): "windows": [ { "operation": "mean", - "metadata": {"type": "fcmean"}, - "coords": [ - {"from": 12, "to": 168, "by": 12}, - {"from": 36, "to": 192, "by": 12}, - ], - "name": { - "type": "default", - "length": 168, + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 0, + "legNumber": 0, + "numberIncludedInAverage": "{num_coords}:int", + "stepType": "avg", + "timeRangeIndicator": 3, + "type": "fcmean", }, - }, - { - "operation": "standard_deviation", - "metadata": {"type": "fcstdev"}, - "coords": [ - {"from": 12, "to": 168, "by": 12}, - {"from": 36, "to": 192, "by": 12}, - ], - "name": { - "type": "default", - "length": 168, - }, - }, - { - "operation": "minimum", - "metadata": {"type": "fcmin"}, - "coords": [ - {"from": 12, "to": 168, "by": 12}, - {"from": 36, "to": 192, "by": 12}, - ], - "name": { - "type": "default", - "length": 168, - }, - }, - { - "operation": "maximum", - "metadata": {"type": "fcmax"}, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -540,9 +589,10 @@ def test_from_outputs(request, output_request, input_param): [ { **DEFAULT_REQUEST, + "stream": "oper", "levelist": [250, 500], "step": list(range(0, 193, 6)), - "type": "cf", + "type": "fc", }, { **DEFAULT_REQUEST, @@ -633,7 +683,7 @@ def test_from_inputs( config = ConfigFactory.from_inputs( test_schema, entrypoint, input_request, **overrides ) - assert type(config) == cfg_type + assert type(config) is cfg_type param = input_request[0]["param"] levtype = input_request[0]["levtype"] check = default_config(f"{param}_{levtype}", param) @@ -667,9 +717,10 @@ def test_wind(): input_request = [ { **DEFAULT_REQUEST, + "stream": "oper", "levelist": [250, 500], "step": list(range(0, 193, 6)), - "type": "cf", + "type": "fc", "param": [165, 166], }, { @@ -697,7 +748,7 @@ def test_wind(): } for tp in ["em", "es"] ] - for param in [207, 165, 166] + for param in [165, 166] ], [], ), diff --git a/pproc/tests/config/test_io_models.py b/pproc/tests/config/test_io_models.py index 3fb4b494..f968bdbb 100644 --- a/pproc/tests/config/test_io_models.py +++ b/pproc/tests/config/test_io_models.py @@ -150,7 +150,7 @@ def test_targets(tmpdir, config, cli, expected, target_type): with patch("sys.argv", ["", "-f", f"{tmpdir}/config.yaml"] + cli): cfg = Conflator(app_name="targets", model=targets_model).load() assert cfg.model_dump(by_alias=True) == expected - assert type(cfg.test.target) == target_type + assert type(cfg.test.target) is target_type @pytest.mark.parametrize( diff --git a/pproc/tests/conftest.py b/pproc/tests/conftest.py index 43c1046c..5440d71e 100644 --- a/pproc/tests/conftest.py +++ b/pproc/tests/conftest.py @@ -21,13 +21,12 @@ TEST_DIR = os.path.dirname(os.path.realpath(__file__)) DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "data") NEXUS = "https://sites.ecmwf.int/repository/pproc/test-data/test-data" -SCHEMA = os.path.join(TEST_DIR, "schema", "schema.yaml") +SCHEMA = os.path.join(TEST_DIR, "schema.yaml") def download_test_data( test_files: List[str], dir_url: str = NEXUS, local_dir: str = DATA_DIR ) -> List[str]: - local_files = [] for file in test_files: if not os.path.exists(local_dir): diff --git a/pproc/tests/ecpt/test_predictors.py b/pproc/tests/ecpt/test_predictors.py index 9d7f3bc7..f2c65bc6 100644 --- a/pproc/tests/ecpt/test_predictors.py +++ b/pproc/tests/ecpt/test_predictors.py @@ -1,4 +1,3 @@ -import datetime import pytest import numpy as np diff --git a/pproc/tests/prob/test_prob_accumulation_manager.py b/pproc/tests/prob/test_prob_accumulation_manager.py index dacaa70a..c5b8e7c7 100644 --- a/pproc/tests/prob/test_prob_accumulation_manager.py +++ b/pproc/tests/prob/test_prob_accumulation_manager.py @@ -273,7 +273,7 @@ def test_create_threshold(config, expected, exp_coords): assert accum.name == name assert len(accum.dims) == 1 assert accum.dims[0].key == "step" - assert type(accum.dims[0].accumulation) == expected[name][0] + assert type(accum.dims[0].accumulation) is expected[name][0] assert acc_mgr._thresholds[name] == expected[name][1] assert set(acc_mgr.coords.keys()) == {"step"} assert acc_mgr.coords["step"] == exp_coords @@ -428,7 +428,7 @@ def test_create_anomaly(config, expected, exp_coords): assert accum.name == name assert len(accum.dims) == 1 assert accum.dims[0].key == "step" - assert type(accum.dims[0].accumulation) == expected[name][0] + assert type(accum.dims[0].accumulation) is expected[name][0] assert acc_mgr._thresholds[name] == expected[name][1] assert set(acc_mgr.coords.keys()) == {"step"} assert acc_mgr.coords["step"] == exp_coords diff --git a/pproc/tests/schema.yaml b/pproc/tests/schema.yaml new file mode 100644 index 00000000..ca1bfa52 --- /dev/null +++ b/pproc/tests/schema.yaml @@ -0,0 +1,4852 @@ +config: + interp_keys: + intgrid: "none" + legendre-loader: "shmem" + matrix-loader: "file-io" + metadata_from_output: ["param", "stream", "date"] + + filter:param: + "*": {} + "10": + preprocessing: + - operation: reshape + shape: 2 + - operation: norm + vod2uv: true + "131/132": + filter:type: + taem/taes: {} + cf/pf/fc/fcmean/fcstdev/fcmax/fcmin: + filter:levtype: + pl: + metadata_from_output: ["stream", "date"] + vod2uv: true + "121/122/123/228026/228027": + filter:type: + em/es/pb: + metadata: + timeRangeIndicator: 2 + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + "*": {} + "207": + filter:stream: + msmm: + preprocessing: + - operation: norm + "*": + forecast: + inputs: + request: + param: "{param}" + "140249": + filter:type: + fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: + preprocessing: + - operation: "direction" + cd: {} + "172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + filter:param: + 172142/172143/172144/172228: + vmin: 0. + "172189": + vmin: 0. + vmax: 1. + "*": {} + preprocessing: + - operation: scale + value: 0.00001157407 + filter:stream: + enfh/enwh/eefh/weeh: + accumulations: + hdate: {} + "*": {} + accumulations: + step: + deaccumulate: true + taem/taes: {} + "260033/260053": + preprocessing: + - operation: sum + metadata: + shortName: tprate + edition: 2 + "200189/200142/200143/200144/228216/200228": + accumulations: + step: + type: legacywindow + operation: difference + name: + type: default + length: "{steplength}:int" + metadata: + timeRangeIndicator: 5 + stepType: diff + "234167": + metadata: + bitsPerValue: 24 + "234228": + preprocessing: + - operation: scale + value: 604800000 + filter:type: + pf/cf/fc: + filter:levtype: + fl: + entrypoint: pproc-flight-levels + target_flight_levels: "{levelist}" + metadata: + edition: 2 + bitsPerValue: 16 + filter:type: + fc: + metadata: + productDefinitionTemplateNumber: 1 + typeOfGeneratingProcess: 4 + typeOfProcessedData: 3 + typeOfEnsembleForecast: 5 + perturbationNumber: 0 + numberOfForecastsInEnsemble: 51 # TODO: Remove in 50r2 when oper/fc encodes this correctly + localTablesVersion: 1 + deletePV: 1 + pf: + metadata: + grib2LocalSectionNumber: 1 + typeOfEnsembleForecast: 6 + localTablesVersion: 1 + deletePV: 1 + accumulations: + step: {} + number: {} + "*": + filter:param: + "261016/260242/260004/260005/261018/260255/261023": + entrypoint: pproc-thermal-indices + outputs: + indices: + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + "261001/261002/261014/261015": + entrypoint: pproc-thermal-indices + outputs: + indices: + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + accumulations: + step: + operation: difference + "*": + entrypoint: pproc-accumulate + filter:stream: + "enfh/enwh/eefh/weeh": + accumulations: + hdate: {} + "*": {} + em/es: + entrypoint: pproc-ensms + filter:stream: + enfo/waef/eefo/weef: + dtype: float64 + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: "{num_fields}:int" + filter:param: + "10": + metadata: + bitsPerValue: 24 + "*": {} + efhs/wehs/eehs: + filter:steptype: + range: + total_fields: 220 + outputs: + default: + metadata: + localDefinitionNumber: 19 + metadata: + bitsPerValue: 12 + sampleSizeOfModelClimate: "{num_fields}:int" + versionOfModelClimate: 0 + efiOrder: 0 + numberOfReforecastYearsInModelClimate: 20 + accumulations: + date: + operation: "aggregation" + filter:steplength: + "*": + metadata: + numberOfDaysInClimateSamplingWindow: 31 + "168": + metadata: + numberOfDaysInClimateSamplingWindow: 7 + instantaneous: + dtype: float64 + metadata: + perturbationNumber: 0 + numberOfForecastsInEnsemble: "{num_fields}:int" + bitsPerValue: 16 + dataDate: "{date}:int" + accumulations: + step: {} + filter:param: + "129": + metadata: + bitsPerValue: 24 + "*": {} + efi/sot/efic: + entrypoint: pproc-extreme + dtype: float64 + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + filter:param: + "132044": + eps: 1e-4 + preprocessing: + - operation: mask + select: {param: "228036"} + mask: [{param: "228035"}, "<=", 10] + accumulations: + step: + operation: maximum + metadata: + typeOfStatisticalProcessing: 1 + edition: 1 + bitsPerValue: 12 + indicatorOfTypeOfLevel: 1 + localDefinitionNumber: 19 + "132059": + eps: 1e-4 + preprocessing: + - operation: mask + select: {param: "228035"} + mask: [{param: "228035"}, "<=", 10] + accumulations: + step: + operation: maximum + metadata: + typeOfStatisticalProcessing: 1 + edition: 1 + bitsPerValue: 12 + indicatorOfTypeOfLevel: 1 + localDefinitionNumber: 19 + "132045": + eps: -1e-4 + preprocessing: + - operation: norm + accumulations: + step: + operation: mean + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + timeRangeIndicator: 3 + stepType: avg + 132165/132167: + eps: -1e-4 + accumulations: + step: + operation: mean + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + timeRangeIndicator: 3 + stepType: avg + 132049/132201: + eps: -1e-4 + accumulations: + step: + operation: maximum + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + "132216": + eps: 1e-4 + preprocessing: + - operation: mask + select: {param: "140229"} + mask: [{param: "140229"}, "<=", 0.1] + accumulations: + step: + operation: maximum + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + "132144": + eps: 1e-4 + accumulations: + step: + operation: difference + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + timeRangeIndicator: 5 + stepType: diff + "132202": + eps: -1e-4 + accumulations: + step: + operation: minimum + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + "132228": + eps: 1e-4 + accumulations: + step: + operation: difference + metadata: + edition: 1 + localDefinitionNumber: 19 + bitsPerValue: 12 + timeRangeIndicator: 5 + stepType: diff + filter:stream: + "*": {} + "eefo": + preprocessing: + - operation: scale + value: 604800000 + ep: + entrypoint: pproc-probabilities + dtype: float64 + filter:steptype: + instantaneous: + accumulations: + step: + type: legacywindow + range: + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + filter:param: + "131060/131061/131062/131063/131064": + accumulations: + step: + operation: difference + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + timeRangeIndicator: 5 + stepType: diff + "131098/131099/131085": + accumulations: + step: + operation: difference + metadata: + localDefinitionNumber: 5 + stepType: "accum" + stepRange: "0-0" + edition: 2 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 12 + packingType: "grid_ccsds" + bitsPerValue: 8 + "131065/131066/131067": + accumulations: + step: + operation: difference_rate + factor: 0.041666666666666664 + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + timeRangeIndicator: 5 + stepType: diff + "131068/131069": + preprocessing: + - operation: norm + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + "131070/131071/131072/131074/131075/131076/131077/131078/131079/131080/131081": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + "131073": + accumulations: + step: + operation: minimum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + "131100": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + edition: 2 + productDefinitionTemplateNumber: 9 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 12 + typeOfTimeIncrement: 2 + packingType: "grid_ccsds" + bitsPerValue: 8 + 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + config: anomaly + filter:param: + "131020/131021": + accumulations: + step: + operation: "mean" + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + "131022/131023": + accumulations: + step: + operation: minimum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + "131024/131025": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + "133093/133094/133095": + accumulations: + step: + operation: maximum + std_anomaly: true + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 + "133096/133097/133098": + accumulations: + step: + operation: minimum + std_anomaly: true + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 + "260290": + metadata: + edition: 2 + productDefinitionTemplateNumber: 5 + typeOfGeneratingProcess: 5 + filter:selection: + "default": + filter:param: + "131060": + threshold: + comparison: ">=" + value: 0.001 + scale_factor: 3 + "131061": + threshold: + comparison: ">=" + value: 0.005 + scale_factor: 3 + "131062": + threshold: + comparison: ">=" + value: 0.01 + scale_factor: 3 + "131063": + threshold: + comparison: ">=" + value: 0.02 + scale_factor: 3 + "131098": + threshold: + comparison: ">=" + value: 0.025 + scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131099": + threshold: + comparison: ">=" + value: 0.05 + scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131085": + threshold: + comparison: ">=" + value: 0.1 + scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131064": + threshold: + comparison: '<' + value: 0.0001 + scale_factor: 4 + "131065": + threshold: + comparison: '<' + value: 0.001 + scale_factor: 4 + "131066": + threshold: + comparison: '>=' + value: 0.003 + scale_factor: 4 + "131067": + threshold: + comparison: '>=' + value: 0.005 + scale_factor: 4 + "131068": + threshold: + comparison: ">=" + value: 10 + "131069": + threshold: + comparison: ">=" + value: 15 + "131070": + threshold: + comparison: ">=" + value: 15 + "131071": + threshold: + comparison: ">=" + value: 20 + "131072": + threshold: + comparison: ">=" + value: 25 + "131100": + threshold: + comparison: ">=" + value: 10 + "131074": + threshold: + comparison: ">=" + value: 2 + "131075": + threshold: + comparison: ">=" + value: 4 + "131076": + threshold: + comparison: ">=" + value: 6 + "131077": + threshold: + comparison: ">=" + value: 8 + "131078": + threshold: + comparison: ">=" + value: 8 + "131079": + threshold: + comparison: ">=" + value: 10 + "131080": + threshold: + comparison: ">=" + value: 12 + "131081": + threshold: + comparison: ">=" + value: 15 + "131073": + threshold: + comparison: "<=" + value: 273.15 + scale_factor: 2 + "131020": + threshold: + comparison: "<" + value: -2 + "131021": + threshold: + comparison: ">=" + value: 2 + "131022": + threshold: + comparison: "<" + value: -8 + "131023": + threshold: + comparison: "<" + value: -4 + "131024": + threshold: + comparison: ">" + value: 4 + "131025": + threshold: + comparison: ">" + value: 8 + "133093": + threshold: + comparison: '>' + value: 1 + "133094": + threshold: + comparison: '>' + value: 1.5 + scale_factor: 1 + metadata: + scaleFactorOfLowerLimit: 1 + "133095": + threshold: + comparison: '>' + value: 2 + "133096": + threshold: + comparison: '<' + value: -1 + limit_type: lower + "133097": + threshold: + comparison: '<' + value: -1.5 + scale_factor: 1 + limit_type: lower + metadata: + scaleFactorOfLowerLimit: 1 + "133098": + threshold: + comparison: '<' + value: -2 + limit_type: lower + "eccharts": + filter:param: + "131060": + threshold: + comparison: ">=" + value: "{threshold}:float" + scale_factor: 3 + "260290": + threshold: "{threshold}" + fcmean: + filter:param: + 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: + filter:stream: + eefo: + entrypoint: pproc-anomaly + dtype: float64 + metadata: + bitsPerValue: 24 + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + metadata: + timeRangeIndicator: 3 + stepType: avg + clim: + accumulations: + step: {} + levelist: {} + date: + operation: mean + "*": + dtype: float64 + filter:stream: + enfo/waef/eefo/weef: + entrypoint: pproc-accumulate + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + operation: mean + metadata: + bitsPerValue: 16 + legBaseDate: 0 + legNumber: 0 + stepType: avg + type: fcmean + filter:param: + "*": + accumulations: + step: + metadata: + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "201": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 201 + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "202": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 202 + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "235117": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + edition: 2 + paramId: 235117 + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 0 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + "enfh/enwh/eefh/weeh": + entrypoint: pproc-accumulate + filter:selection: + mclimate: + dtype: float32 + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + levelist: {} + hdate: {} + filter:param: + "140229": + preprocessing: + - operation: mask + select: {param: "140229"} + mask: [{param: "140229"}, "<=", 0.1] + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 2 + stepType: max + "123": + vmin: 0. + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 2 + stepType: max + "140249": + vmin: 0. + vmax: 360. + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + "162071": + preprocessing: + - operation: norm + accumulations: + step: + metadata: + edition: 1 + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 3 + stepType: avg + "164": + vmin: 0. + vmax: 1. + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 3 + stepType: avg + "167": + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 3 + stepType: avg + "228/144": + vmin: 0. + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 5 + stepType: diff + "121": + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 2 + stepType: max + "122": + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 2 + "207": + vmin: 0. + preprocessing: + - operation: norm + accumulations: + step: + metadata: + bitsPerValue: 12 + type: fcmean + timeRangeIndicator: 3 + stepType: avg + "228044": + vmin: 0 + preprocessing: + - operation: mask + select: {param: "228036"} + mask: [{param: "228035"}, "<=", 10] + accumulations: + step: + metadata: + typeOfStatisticalProcessing: 1 + edition: 1 + bitsPerValue: 12 + indicatorOfTypeOfLevel: 1 + type: fcmean + timeRangeIndicator: 2 + stepType: max + "59": + vmin: 0 + preprocessing: + - operation: mask + select: {param: "228035"} + mask: [{param: "228035"}, "<=", 10] + accumulations: + step: + metadata: + typeOfStatisticalProcessing: 1 + edition: 1 + bitsPerValue: 12 + indicatorOfTypeOfLevel: 1 + type: fcmean + timeRangeIndicator: 2 + stepType: max + filter:steplength: + "*": + filter:param: + "228/144": + accumulations: + step: + operation: difference + metadata: + numberIncludedInAverage: "{num_coords}:int" + "123/140229/121/228044/59": + accumulations: + step: + operation: maximum + metadata: + numberIncludedInAverage: "{num_coords}:int" + "122": + accumulations: + step: + operation: minimum + metadata: + numberIncludedInAverage: "{num_coords}:int" + "164/167/162071/207": + accumulations: + step: + operation: mean + metadata: + numberIncludedInAverage: "{num_coords}:int" + "140249": + accumulations: + step: + operation: aggregation + metadata: + numberIncludedInAverage: "{num_coords}:int" + "168": + accumulations: + step: + operation: aggregation + filter:param: + "228": + preprocessing: + - operation: scale + value: 604800000 + "167": {} + "*": + accumulations: + hdate: {} + levelist: {} + step: + type: legacywindow + operation: mean + name: + type: default + length: "{steplength}:int" + metadata: + bitsPerValue: 16 + legBaseDate: 0 + legNumber: 0 + stepType: avg + type: fcmean + filter:param: + "*": + accumulations: + step: + metadata: + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "201": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 201 + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "202": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 202 + timeRangeIndicator: 3 + numberIncludedInAverage: "{num_coords}:int" + "235117": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + edition: 2 + paramId: 235117 + stepType: avg + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 0 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: + step: + type: legacywindow + operation: mean + name: + type: monthly + date: "{date}:str" + metadata: + type: fcmean + bitsPerValue: 16 + fcstdev: + dtype: float64 + filter:stream: + oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: + entrypoint: pproc-accumulate + filter:stream: + enfh/enwh/eefh/weeh: + accumulations: + hdate: {} + "*": {} + accumulations: + levelist: {} + step: + type: legacywindow + operation: standard_deviation + name: + type: default + length: "{steplength}:int" + metadata: + type: fcstdev + bitsPerValue: 16 + legBaseDate: 0 + legNumber: 0 + filter:param: + "*": + accumulations: + step: + metadata: + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "201": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 201 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "202": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 202 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "239117": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + edition: 2 + paramId: 239117 + stepType: sd + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 6 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: + step: + type: legacywindow + operation: standard_deviation + name: + type: monthly + date: "{date}:str" + metadata: + type: fcstdev + bitsPerValue: 16 + fcmin: + dtype: float64 + filter:stream: + oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: + entrypoint: pproc-accumulate + filter:stream: + enfh/enwh/eefh/weeh: + accumulations: + hdate: {} + "*": {} + accumulations: + levelist: {} + step: + type: legacywindow + operation: minimum + name: + type: default + length: "{steplength}:int" + metadata: + type: fcmin + bitsPerValue: 16 + legBaseDate: 0 + legNumber: 0 + filter:param: + "*": + accumulations: + step: + metadata: + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "201": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 201 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "202": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 202 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "238117": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + edition: 2 + paramId: 238117 + stepType: min + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 3 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: + step: + type: legacywindow + operation: minimum + name: + type: monthly + date: "{date}:str" + metadata: + type: fcmin + bitsPerValue: 16 + fcmax: + dtype: float64 + filter:stream: + oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: + entrypoint: pproc-accumulate + filter:stream: + enfh/enwh/eefh/weeh: + accumulations: + hdate: {} + "*": {} + accumulations: + levelist: {} + step: + type: legacywindow + operation: maximum + name: + type: default + length: "{steplength}:int" + metadata: + type: fcmax + bitsPerValue: 16 + legBaseDate: 0 + legNumber: 0 + filter:param: + "*": + accumulations: + step: + metadata: + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "201": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 201 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "202": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + paramId: 202 + timeRangeIndicator: 3 + stepType: avg + numberIncludedInAverage: "{num_coords}:int" + "237117": + metadata_from_output: ["stream", "date"] + accumulations: + step: + metadata: + edition: 2 + paramId: 237117 + stepType: max + discipline: 0 + parameterCategory: 7 + parameterNumber: 6 + typeOfFirstFixedSurface: 17 + typeOfStatisticalProcessing: 2 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + msmm/swmm: + entrypoint: pproc-monthly-stats + accumulations: + step: + type: legacywindow + operation: maximum + name: + type: monthly + date: "{date}:str" + metadata: + type: fcmax + bitsPerValue: 16 + pb: + entrypoint: pproc-quantiles + filter:stream: + enfo/waef: + metadata: + localDefinitionNumber: 30 + "*": {} + taem/taes: + filter:stream: + eefo: + filter:param: + 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: + entrypoint: pproc-anomaly + dtype: float64 + metadata: + bitsPerValue: 24 + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + metadata: + timeRangeIndicator: 3 + stepType: avg + clim: + accumulations: + date: + operation: mean + 234167/234139/234151/234228: + entrypoint: pproc-significance + epsilon: 1e-10 + use_clim_anomaly: true + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + metadata: + timeRangeIndicator: 3 + stepType: avg + clim: + total_fields: 220 + accumulations: + date: + operation: aggregation + clim_em: + accumulations: + date: + operation: aggregation + "235117": + entrypoint: pproc-ensms + dtype: float64 + outputs: + default: + metadata: + edition: 2 + productDefinitionTemplateNumber: 12 + mean: + metadata: + derivedForecast: 0 + type: taem + std: + metadata: + derivedForecast: 4 + type: taes + metadata: + typeOfGeneratingProcess: 4 + typeOfTimeIncrement: 2 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 6 + bitsPerValue: 16 + packingType: "grid_ccsds" + "*": + entrypoint: pproc-ensms + outputs: + mean: + metadata: + type: taem + std: + metadata: + type: taes + dtype: float64 + metadata: + perturbationNumber: 0 + bitsPerValue: 16 + timeRangeIndicator: 3 + stepType: "avg" + efhs/eehs: + entrypoint: pproc-ensms + dtype: float64 + accumulations: + step: {} + levelist: {} + hdate: + operation: aggregation + metadata: + climateDateFrom: "{start_coord}:int" + climateDateTo: "{end_coord}:int" + filter:param: + "235117": + outputs: + default: + metadata: + edition: 2 + productDefinitionTemplateNumber: 11 + mean: + metadata: + type: taem + std: + metadata: + type: taes + metadata: + perturbationNumber: 0 + numberOfForecastsInEnsemble: "{num_fields}:int" + yearOfEndOfOverallTimeInterval: "{year}:int" + typeOfGeneratingProcess: 4 + typeOfTimeIncrement: 3 + dataDate: "{date}:int" + bitsPerValue: 16 + packingType: "grid_ccsds" + "*": + outputs: + mean: + metadata: + type: taem + std: + metadata: + type: taes + metadata: + perturbationNumber: 0 + numberOfForecastsInEnsemble: "{num_fields}:int" + bitsPerValue: 16 + timeRangeIndicator: 3 + stepType: avg + dataDate: "{date}:int" + cd: + filter:stream: + efhs/wehs/eehs: + entrypoint: pproc-quantiles + total_fields: 220 + outputs: + quantiles: + metadata: + localDefinitionNumber: 19 + type: cd + metadata: + bitsPerValue: 12 + sampleSizeOfModelClimate: "{num_fields}:int" + versionOfModelClimate: 0 + efiOrder: 0 + numberOfReforecastYearsInModelClimate: 20 + filter:param: + "140249": + entrypoint: pproc-histogram + outputs: + histogram: + metadata: + localDefinitionNumber: 19 + type: cd + total_fields: 880 + bins: [-22.5, 22.5, 67.5, 112.5, 157.5, 202.5, 247.5, 292.5, 337.5] + mod: 360. + normalise: true + scale_out: 200. + metadata: + numberOfDaysInClimateSamplingWindow: 31 + sampleSizeOfModelClimate: 1980 + accumulations: + date: + operation: "sum" + "*": + filter:param: + "140200": # TODO: Remove after 50r1 + preprocessing: + - operation: mask + select: {param: "229.140"} + mask: [{param: "229.140"}, "<=", 0.1] + "*": {} + accumulations: + date: + operation: "aggregation" + filter:steplength: + "*": + metadata: + numberOfDaysInClimateSamplingWindow: 31 + "168": + metadata: + numberOfDaysInClimateSamplingWindow: 7 + pfc: + entrypoint: pproc-quantiles + outputs: + quantiles: + metadata: + edition: 2 + productDefinitionTemplateNumber: 90 + type: pfc + typeOfGeneratingProcess: 13 + typeOfPostProcessing: 206 + filter:class: + od: + outputs: + quantiles: + metadata: + typeOfProcessedData: 5 + accumulations: + step: {} + number: + operation: aggregation + ea: + outputs: + quantiles: + metadata: + typeOfProcessedData: 1 + total_fields: 100 + gwt: + metadata_from_output: ["param", "date"] + entrypoint: pproc-ecpoint + outputs: + default: + metadata: + edition: 2 + bitsPerValue: 24 + generatingProcessIdentifier: 3 + bias_corrected: + metadata: + type: gbf + weather_types: + metadata: + type: gwt + filter:class: + od: + outputs: + bias_corrected: + metadata: + numberOfForecastsInEnsemble: 51 # TODO: Remove in 50r2 when oper/fc encodes this correctly + weather_types: + metadata: + numberOfForecastsInEnsemble: 51 + members: + metadata: + grib2LocalSectionNumber: 1 + type: fcmean + filter:stream: + oper: + outputs: + members: + metadata: + stream: enfo + enfo: {} + filter:param: + "228": + predictant: tp + min_predictant: 0.04 + scale_outputs: 0.001 + interp_keys: + legendre-loader: "shmem" + matrix-loader: "file-io" + interpolation: grid-box-average + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + type: legacywindow + operation: difference + name: + type: default + length: "{steplength}:int" + metadata: + stepType: accum + filter:steplength: + "6": + num_inputs: 7 + predictors: ["cp_ratio", "tp", "mxcape6", "2t", "local_solar_time", "ws", "cdir"] + dependencies: + wind: + vod2uv: true + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + cp: + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + operation: difference + cdir: + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + operation: difference + cape: + accumulations: + step: + type: legacywindow + operation: maximum + 2t: + preprocessing: + - operation: expression + expr: t2_k - d2_k + expr_data: + t2_k: + param: '167' + d2_k: + param: '168' + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + "12": + num_inputs: 7 + predictors: ["cp_ratio", "tp", "mxcape6", "2t", "ws", "cdir"] + dependencies: + wind: + vod2uv: true + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + cp: + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + operation: difference + cdir: + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + operation: difference + cape: + accumulations: + step: + type: legacywindow + operation: maximum + 2t: + preprocessing: + - operation: expression + expr: t2_k - d2_k + expr_data: + t2_k: + param: '167' + d2_k: + param: '168' + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + "24": + num_inputs: 7 + predictors: ["cp_ratio", "tp", "mxcape6", "2t", "ws", "cdir"] + dependencies: + wind: + vod2uv: true + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + cp: + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + operation: difference + cdir: + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + operation: difference + cape: + accumulations: + step: + type: legacywindow + operation: maximum + 2t: + preprocessing: + - operation: expression + expr: t2_k - d2_k + expr_data: + t2_k: + param: '167' + d2_k: + param: '168' + accumulations: + step: + operation: weighted_mean + weights: [0.125, 0.25, 0.25, 0.25, 0.125] + ea: + outputs: + default: + metadata: + productionStatusOfProcessedData: 3 + typeOfTimeIncrement: 1 + bias_corrected: + metadata: + productDefinitionTemplateNumber: 72 + weather_types: + metadata: + productDefinitionTemplateNumber: 72 + filter:param: + "228": + predictant: tp + min_predictant: 0.04 + scale_outputs: 0.001 + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + type: legacywindow + operation: sum + name: + type: default + length: "{steplength}:int" + metadata: + stepType: accum + filter:steplength: + "12/24": + num_inputs: 8 + predictors: ["cp_ratio", "lsm", "sdfor", "tp", "ws", "cape", "cdir", "2r"] + dependencies: + wind: + preprocessing: + actions: + - operation: norm + output: + paramId: 10 + accumulations: + step: + type: legacywindow + operation: mean + cp: + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + type: legacywindow + operation: sum + cdir: + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + type: legacywindow + operation: sum + cape: + accumulations: + step: + type: legacywindow + operation: maximum + r2: + preprocessing: + actions: + - operation: expression + expr: (100 * (((112 - (0.1 * (t2_k - 273.17)) + ( d2_k - 273.15)) / (112 + (0.9 * (t2_k - 273.17)))) ** 8)) + 0.5 + expr_data: + t2_k: + param: '167.128' + d2_k: + param: '168.128' + dtype: "int64" + output: + edition: 2 + paramId: 260242 + accumulations: + step: + type: legacywindow + operation: maximum + sdfor: + accumulations: null + lsm: + accumulations: null + "201": + predictant: mx2t + min_predictant: null + scale_outputs: null + accumulations: + step: + type: legacywindow + operation: maximum + name: + type: default + length: "{steplength}:int" + metadata: + stepType: max + filter:steplength: + "24": + num_inputs: 11 + predictors: + - lsm + - sdfor + - vegdiff + - cdir + - mx2t + - tp + - {expr: "((sd * 1000)/rsn)*100", expr_data: {sd: {param: sd}, rsn: {param: rsn}}} + - rsn + - {expr: "swv * 1000", expr_data: {swv: {param: swvl1}}} + - 100si + dependencies: + tp: + accumulations: + step: + type: legacywindow + operation: filter + filter_op: max + filter_index: -1 + preprocessing: + actions: + - operation: scale + value: 1000 + - operation: reshape + shape: 1 + filtered: + accumulations: + step: + operation: filter + filter_op: max + filter_index: -1 + neighbours: [-1] + neighbours_op: mean + preprocessing: + actions: + - operation: reshape + shape: 1 + cdir: + preprocessing: + actions: + - operation: scale + value: 1.157407e-05 + accumulations: + step: + type: legacywindow + operation: sum + sdfor: + accumulations: null + lsm: + accumulations: null + urbanfrac: + accumulations: null + "202": + predictant: mn2t + min_predictant: null + scale_outputs: null + accumulations: + step: + type: legacywindow + operation: minimum + name: + type: default + length: "{steplength}:int" + metadata: + stepType: min + filter:steplength: + "24": + num_inputs: 15 + predictors: + - lsm + - sdfor + - vegdiff + - mn2t + - {expr: "((sd * 1000)/rsn)*100", expr_data: {sd: {param: sd}, rsn: {param: rsn}}} + - lai + - {expr: "t2m - skt", expr_data: {t2m: {param: 2t}, skt: {param: skt}}} + - 100si + - lcc + dependencies: + filtered: + accumulations: + step: + operation: filter + filter_op: min + filter_index: -1 + neighbours: [-1] + neighbours_op: mean + preprocessing: + actions: + - operation: reshape + shape: 1 + sdfor: + accumulations: null + lsm: + accumulations: null + urbanfrac: + accumulations: null + lai: + preprocessing: + actions: + - operation: reshape + shape: 1 + accumulations: null + cm/cr: + entrypoint: pproc-clustereps + step_del: 12 + bbox: + lat_n: 75.0 + lat_s: 30.0 + lon_w: 340.0 + lon_e: 40.0 + max_anom: 10000. + num_components: 50 + var_th: 80.0 + ncl_max: 6 + init: sector + npass: 100 + nrsamples: 500 + max_sig: 95.0 + med_sig: 90.0 + min_sig: 55.0 + sig_tol: 3.0 + ncl_clim: 4 + clim_means: "{season}_means.grd" + clim_pcs: "{season}_pcs.gts" + clim_sdv: "{season}_sdv.gts" + clim_eof: "{season}_eof.grd" + clim_cluster_index: "era_clind_{season}.gts" + clim_cluster_centroids_eof: "era_clcen_eof_{season}.gts" + seasons: + - [5, 9] + - [10, 4] + generate_dummy: true + deterministic_is_control: true + compute_spread: true +windows: + defs: + width6: + - type: range + width: 6 + interval: 3 + end: 144 + - type: range + width: 6 + interval: 6 + start: 144 + width12: + - type: range + width: 12 + interval: 3 + end: 144 + - type: range + width: 12 + interval: 6 + start: 144 + width24: + - type: range + width: 24 + interval: 3 + end: 144 + - type: range + width: 24 + interval: 6 + start: 144 + filter:stream: + oper/wave: + filter:time: + "0000/1200": &mr_steps + in_steps: + - from: 0 + to: 90 + by: 1 + - from: 90 + to: 144 + by: 3 + - from: 144 + to: 360 + by: 6 + "0600/1800": &bc_steps + in_steps: + - from: 0 + to: 90 + by: 1 + - from: 90 + to: 144 + by: 3 + enfo/waef: + filter:time: + "0000/1200": *mr_steps + "0600/1800": *bc_steps + eefo/weef/eefh/weeh/eehs: + in_steps: + - from: 0 + to: 1104 + by: 6 + msmm/swmm: + in_steps: + - from: 0 + to: 5160 + by: 6 + enfh/enwh/efhs/wehs: + in_steps: + - from: 0 + to: 360 + by: 6 + filter:type: + em/es/pb: + filter:stream: + enfo/waef: + filter:param: + "*": + out_steps: + - type: instantaneous + end: 90 + interval: 3 + - type: instantaneous + start: 90 + 121/122: + out_steps: + type: instantaneous + interval: 6 + 228026/228027: + out_steps: + type: instantaneous + interval: 3 + eefo/weef: + type: instantaneous + efhs/wehs/eehs: + out_steps: + type: instantaneous + interval: 6 + fc/cf/pf: + filter:stream: + "*": + filter:param: + "*": + out_steps: + type: instantaneous + 261001/261014/261015/261002: + out_steps: + type: instantaneous + deaccumulate: true + fcmean/fcstdev/fcmax/fcmin: + filter:stream: + "enfo/eefo/oper/eefh/weef": + out_steps: + type: range + interval: 24 + width: 168 + "enfh/enwh": + out_steps: + filter:param: + "*": + out_steps: + - type: range + width: 24 + interval: 24 + - type: range + width: 72 + end: 240 + interval: 24 + end: 216 + - type: range + width: 120 + end: 240 + interval: 24 + - "0-240" + - "0-360" + - "240-360" + 121/122/123/140229/59/228044/140249/164: + out_steps: + type: range + end: 168 + width: 24 + interval: 24 + "eefh/weeh": + filter:param: + "*": + out_steps: + type: range + interval: 24 + width: 168 + "msmm": + out_steps: + type: monthly + date: "{date}" + taem/taes: + filter:stream: + "enfo/eefo/oper/efhs/eehs": + out_steps: + type: range + interval: 24 + width: 168 + ep: + filter:stream: + enfo: + filter:param: + 131060/131061/131062/131063/131098/131099/131085/131070/131071/131072/131100: + out_steps: + type: range + width: 24 + interval: 12 + 131064/131065/131066/131067/131070/131071/131072/131100/131020/131021/131073: + out_steps: + - type: range + width: 120 + start: 120 + interval: 120 + - "120-168" + - "168-240" + 131068/131069/131073/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + out_steps: + type: instantaneous + start: 12 + interval: 12 + "260290": + out_steps: + - type: instantaneous + start: 0 + end: 90 + interval: 1 + - type: instantaneous + start: 91 + end: 144 + interval: 3 + - type: instantaneous + start: 150 + end: 360 + interval: 6 + waef: + filter:param: + 131074/131075/131076/131077/131078/131079/131080/131081: + out_steps: + - type: range + width: 120 + start: 120 + interval: 120 + - "120-168" + - "168-240" + 131074/131075/131076/131077/131078/131079/131080/131081: + out_steps: + type: instantaneous + start: 12 + interval: 12 + efi/efic/sot: + filter:stream: + "eefo/weef": + out_steps: + type: range + interval: 24 + width: 168 + "enfo/waef": + filter:param: + "*": + filter:time: + "1200": + out_steps: + - type: range + start: 12 + end: 240 + width: 24 + interval: 24 + - type: range + start: 12 + end: 240 + width: 72 + interval: 24 + end: 216 + - type: range + start: 12 + end: 240 + width: 120 + interval: 24 + - type: range + start: 240 + width: 24 + interval: 24 + - "0-240" + - "0-360" + - "240-360" + "0000": + out_steps: + - type: range + width: 24 + interval: 24 + - type: range + width: 72 + end: 240 + interval: 24 + end: 216 + - type: range + width: 120 + end: 240 + interval: 24 + - "0-240" + - "0-360" + - "240-360" + "0600/1800": + out_steps: + - type: range + width: 24 + end: 144 + interval: 12 + 132201/132202/132049/132144/132216/132059/132044: + filter:time: + "1200": + out_steps: + type: range + start: 12 + end: 180 + width: 24 + interval: 24 + "0000": + out_steps: + type: range + end: 168 + width: 24 + interval: 24 + "0600/1800": + out_steps: + - type: range + width: 24 + end: 144 + interval: 12 + cd: + filter:stream: + efhs/wehs: + filter:param: + "*": + out_steps: + - type: range + width: 24 + interval: 12 + - type: range + width: 72 + end: 240 + interval: 12 + end: 216 + - type: range + width: 120 + end: 240 + interval: 12 + - "0-240" + - "0-360" + - "240-360" + "228004/228": + out_steps: + - type: range + width: 24 + interval: 12 + - type: range + width: 72 + end: 240 + interval: 12 + end: 216 + - type: range + width: 120 + end: 240 + interval: 12 + - type: range + width: 168 + interval: 24 + - "0-240" + - "0-360" + - "240-360" + "202/201/49/140200/59/228044/140249/228006": + out_steps: + type: range + width: 24 + interval: 12 + eehs: + out_steps: + type: range + width: 168 + interval: 24 + gwt/pfc: + filter:param: + "228/201/202": + out_steps: + type: range + width: 12 + interval: 6 + cm/cr: + filter:stream: + enfo: + in_steps: + - from: 0 + to: 360 + by: 12 + out_steps: + - "72-96" + - "120-168" + - "192-240" + - "240-360" +inputs: + filter:stream: + oper: + filter:type: + fc/fcmean/fcstdev/fcmin/fcmax/pfc/gwt: + forecast: + inputs: + request: &oper_fc + stream: oper + type: fc + wave: + filter:type: + fc/fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: &wave_fc + stream: wave + type: fc + enfo: + filter:type: + "em/pb/efi/sot/ep": + forecast: + inputs: + - request: *oper_fc + - request: &enfo_pf + stream: enfo + type: "pf" + members: &enfo_members + start: 1 + end: 50 + "es": + filter:selection: + "*": + forecast: + inputs: + - request: *oper_fc + - request: *enfo_pf + members: *enfo_members + "clust-warmup-50r1-bc": + filter:time: + "0600/1800": + from_inputs: false + forecast: + inputs: + - request: + stream: scda + type: fc + - request: *enfo_pf + members: *enfo_members + cm/cr: + forecast: + inputs: + - request: + <<: *oper_fc + domain: "g" + target_grid: 1.5/1.5 + derive_step: + type: default + include_start: true + - request: + <<: *enfo_pf + domain: "g" + target_grid: 1.5/1.5 + derive_step: + type: default + include_start: true + members: *enfo_members + climatology: + inputs: + - request: + domain: "g" + stream: enfo + type: "es" + "efic": + forecast: + inputs: + request: *oper_fc + "pf/gwt": + forecast: + inputs: + request: *enfo_pf + members: *enfo_members + fcmean/fcstdev/fcmin/fcmax: + filter:members: + only_zero: + forecast: + inputs: + request: *oper_fc + no_zero: + forecast: + inputs: + request: *enfo_pf + members: *enfo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *oper_fc + - request: *enfo_pf + members: *enfo_members + pfc: + forecast: + inputs: + request: + stream: enfo + type: fcmean + members: + start: 0 + end: 50 + climatology: + inputs: + request: + stream: "efhs" + time: "0000" + scheme: ecmwf-4days + waef: + filter:type: + em/es/pb/efi/sot/ep: + forecast: + inputs: + - request: *wave_fc + - request: &waef_pf + stream: waef + type: "pf" + members: *enfo_members + "efic": + forecast: + inputs: + request: *wave_fc + "pf": + forecast: + inputs: + request: *waef_pf + members: *enfo_members + fcmean/fcstdev/fcmin/fcmax: + filter:members: + only_zero: + forecast: + inputs: + request: *wave_fc + no_zero: + forecast: + inputs: + request: *waef_pf + members: *enfo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *wave_fc + - request: *waef_pf + members: *enfo_members + climatology: + inputs: + request: + stream: "wehs" + time: "0000" + scheme: ecmwf-4days + eefo: + filter:type: + "em/es/pb": + forecast: + inputs: + - request: &eefo_cf + stream: eefo + type: "cf" + - request: &eefo_pf + stream: eefo + type: "pf" + members: &eefo_members + start: 1 + end: 100 + "cf": + forecast: + inputs: + request: *eefo_cf + "pf": + forecast: + inputs: + request: *eefo_pf + members: *eefo_members + fcmean/fcstdev/fcmin/fcmax: + filter:param: + "*": + filter:members: + only_zero: + forecast: + inputs: + request: *eefo_cf + no_zero: + forecast: + inputs: + request: *eefo_pf + members: *eefo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *eefo_cf + - request: *eefo_pf + members: *eefo_members + 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: + filter:type: + fcmean: + forecast: + inputs: + request: + stream: eefo + type: fcmean + members: + start: 0 + end: 100 + "efi/sot/taem/taes": + forecast: + inputs: + - request: + stream: eefo + type: fcmean + members: + start: 0 + end: 100 + derive_step: + type: precomputed + climatology: + inputs: + request: + stream: "eehs" + time: "0000" + scheme: ecmwf-2days + weef: + filter:type: + "em/es/pb": + forecast: + inputs: + - request: &weef_cf + stream: weef + type: "cf" + - request: &weef_pf + stream: weef + type: "pf" + members: *eefo_members + "cf": + forecast: + inputs: + request: *weef_cf + "pf": + forecast: + inputs: + request: *weef_pf + members: *eefo_members + fcmean/fcstdev/fcmin/fcmax: + filter:members: + only_zero: + forecast: + inputs: + request: *weef_cf + no_zero: + forecast: + inputs: + request: *weef_pf + members: *eefo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *weef_cf + - request: *weef_pf + members: *eefo_members + "efi/efic/sot/taem/taes": + forecast: + inputs: + - request: + stream: weef + type: fcmean + members: + start: 0 + end: 100 + derive_step: + type: precomputed + climatology: + inputs: + request: + stream: "wees" + time: "0000" + scheme: ecmwf-2days + msmm: + filter:type: + "fcmean/fcstdev/fcmin/fcmax": + forecast: + inputs: + request: + stream: mmsf + type: "fc" + members: + start: 0 + end: 50 + swmm: + filter:type: + "fcmean/fcstdev/fcmin/fcmax": + forecast: + inputs: + request: + stream: wasf + type: "fc" + members: + start: 0 + end: 50 + enfh: + filter:type: + "fcmean/fcstdev/fcmax/fcmin": + filter:members: + only_zero: + forecast: + inputs: + request: &enfh_cf + stream: enfh + type: "cf" + time: "0000" + scheme: &enfh_scheme ecmwf-4days + no_zero: + forecast: + inputs: + request: &enfh_pf + stream: enfh + type: "pf" + time: "0000" + members: &enfh_members + start: 1 + end: 10 + scheme: *enfh_scheme + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *enfh_cf + - request: *enfh_pf + members: *enfh_members + scheme: *enfh_scheme + enwh: + filter:type: + "fcmean/fcstdev/fcmax/fcmin": + filter:members: + only_zero: + forecast: + inputs: + request: &enwh_cf + stream: enwh + type: "cf" + time: "0000" + scheme: *enfh_scheme + no_zero: + forecast: + inputs: + request: &enwh_pf + stream: enwh + type: "pf" + time: "0000" + members: *enfh_members + scheme: *enfh_scheme + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *enwh_cf + - request: *enwh_pf + members: *enfh_members + scheme: *enfh_scheme + eefh: + filter:type: + "fcmean/fcstdev/fcmax/fcmin": + filter:members: + only_zero: + forecast: + inputs: + request: &eefh_cf + stream: eefh + type: "cf" + time: "0000" + scheme: &eefh_scheme ecmwf-2days + no_zero: + forecast: + inputs: + request: &eefh_pf + stream: eefh + type: "pf" + time: "0000" + members: &eefh_members + start: 1 + end: 10 + scheme: *eefh_scheme + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *eefh_cf + - request: *eefh_pf + members: *eefh_members + scheme: *eefh_scheme + weeh: + filter:type: + "fcmean/fcstdev/fcmax/fcmin": + filter:members: + only_zero: + forecast: + inputs: + request: &weeh_cf + stream: weeh + type: "cf" + time: "0000" + scheme: *eefh_scheme + no_zero: + forecast: + inputs: + request: &weeh_pf + stream: weeh + type: "pf" + time: "0000" + members: *eefh_members + scheme: *eefh_scheme + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *weeh_cf + - request: *weeh_pf + members: *eefh_members + scheme: *eefh_scheme + efhs: + forecast: + inputs: + - request: + stream: enfh + type: "cf" + time: "0000" + - request: + stream: enfh + type: "pf" + time: "0000" + members: &efhs_members + start: 1 + end: 10 + scheme: *enfh_scheme + wehs: + forecast: + inputs: + - request: + stream: enwh + type: "cf" + time: "0000" + - request: + stream: enwh + type: "pf" + time: "0000" + members: *efhs_members + scheme: *enfh_scheme + eehs: + forecast: + inputs: + - request: + stream: eefh + type: cf + time: "0000" + - request: + stream: eefh + type: pf + time: "0000" + members: + start: 1 + end: 10 + scheme: *eefh_scheme + filter:param: + "*": + filter:type: + "fc/cf/pf": + from_inputs: False + filter:levtype: + "fl": + forecast: + inputs: + - request: + levtype: ml + levelist: [58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137] + param: "{param}" + - request: + levtype: ml + levelist: 1 + param: 152 + "*": + forecast: + inputs: + request: + param: "{param}" + "em/es/pb/cd/fcmean/fcstdev/fcmin/fcmax/taem/taes/cm/cr": + forecast: + inputs: + request: + param: "{param}" + "ep": + filter:selection: + eccharts: + from_inputs: false + forecast: + inputs: + request: + param: "{param}" + "10": + filter:type: + fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: ["138", "155"] + "131/132": + filter:type: + fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: + filter:levtype: + pl: + forecast: + inputs: + request: + param: ["138", "155"] + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "121/122/123": + forecast: + inputs: + request: + param: "{param}" + filter:type: + em/es/pb: + forecast: + inputs: + derive_step: + type: default + by: 6 + "*": + from_inputs: false + "228": + filter:type: + "pfc/gwt": + from_inputs: false + "fc/cf/pf/fcmean": + from_inputs: False + forecast: + inputs: + request: + param: "{param}" + "em/es/pb/cd": + forecast: + inputs: + request: + param: "{param}" + "228026/228027": + filter:type: + em/es/pb: + forecast: + inputs: + request: + param: "{param}" + derive_step: + type: default + by: 3 + 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + filter:type: + ep: + filter:param: + 131020/131021: + forecast: + inputs: + request: + param: "130" + derive_step: + type: default + include_start: true + by: 6 + "*": + forecast: + inputs: + request: + param: "130" + derive_step: + type: default + by: 6 + climatology: + required: true + inputs: + - request: + param: "130" + type: "em" + derive_date: + option: previous + strict: False + derive_step: + type: instantaneous + - request: + param: "130" + type: "es" + derive_date: + option: previous + strict: False + derive_step: + type: instantaneous + 131060/131061/131062/131063/131064/131065/131066/131067/131098/131099/131085: + filter:type: + ep: + forecast: + inputs: + request: + param: "228" + derive_step: + type: deaccumulate + "131068/131069": + filter:type: + ep: + forecast: + inputs: + request: + param: ["165", "166"] + 131070/131071/131072/131100: + filter:type: + ep: + forecast: + inputs: + request: + param: "123" + derive_step: + type: default + by: 6 + "131073": + filter:type: + ep: + filter:steptype: + instantaneous: + forecast: + inputs: + request: + param: "167" + range: + forecast: + inputs: + request: + param: "122" + derive_step: + type: default + by: 6 + 131074/131075/131076/131077: + filter:type: + ep: + forecast: + inputs: + request: + param: "140229" + 131078/131079/131080/131081: + filter:type: + ep: + forecast: + inputs: + request: + param: "140232" + "132044": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: ["228036", "228035"] + climatology: + inputs: + request: + param: "228044" + "132045": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: ["162071", "162072"] + climatology: + inputs: + request: + param: "162045" + "132049": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "123" + climatology: + inputs: + request: + param: "49" + "132059": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "228035" + climatology: + inputs: + request: + param: "59" + "132144": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "144" + climatology: + inputs: + request: + param: "144" + "132165": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "207" + climatology: + inputs: + request: + param: "228005" + "132167": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "167" + climatology: + inputs: + request: + param: "228004" + "132201": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "121" + climatology: + inputs: + request: + param: "201" + "132202": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "122" + climatology: + inputs: + request: + param: "202" + "132216": + filter:type: + efi/efic/sot: + forecast: + inputs: + request: + param: "140229" + climatology: + inputs: + request: + param: "140200" + "132228": + filter:type: + efi/efic/sot: + filter:stream: + eefo: + forecast: + inputs: + request: + param: "172228" + climatology: + inputs: + request: + param: "228" + enfo: + forecast: + inputs: + request: + param: "228" + climatology: + inputs: + request: + param: "228" + "171001": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "1" + climatology: + inputs: + request: + param: "1" + "171002": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "2" + climatology: + inputs: + request: + param: "2" + "171006": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "228246" + climatology: + inputs: + request: + param: "228246" + "171007": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "228247" + climatology: + inputs: + request: + param: "228247" + "171033": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "33" + climatology: + inputs: + request: + param: "33" + "171034": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "34" + climatology: + inputs: + request: + param: "34" + "171078": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "78" + climatology: + inputs: + request: + param: "78" + "171079": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "79" + climatology: + inputs: + request: + param: "79" + "171121": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "121" + climatology: + inputs: + request: + param: "121" + "171122": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "122" + climatology: + inputs: + request: + param: "122" + "171129": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "129" + climatology: + inputs: + request: + param: "129" + "171130": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "130" + climatology: + inputs: + request: + param: "130" + "171131": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "131" + climatology: + inputs: + request: + param: "131" + "171132": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "132" + climatology: + inputs: + request: + param: "132" + "171133": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "133" + climatology: + inputs: + request: + param: "133" + "171136": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "136" + climatology: + inputs: + request: + param: "136" + "171137": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "137" + climatology: + inputs: + request: + param: "137" + "171139": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "139" + climatology: + inputs: + request: + param: "139" + "171141": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "141" + climatology: + inputs: + request: + param: "141" + "171151": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "151" + climatology: + inputs: + request: + param: "151" + "171164": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "164" + climatology: + inputs: + request: + param: "164" + "171165": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "165" + climatology: + inputs: + request: + param: "165" + "171166": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "166" + climatology: + inputs: + request: + param: "166" + "171167": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "167" + climatology: + inputs: + request: + param: "167" + "171168": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "168" + climatology: + inputs: + request: + param: "168" + "171201": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "201" + climatology: + inputs: + request: + param: "201" + "171202": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "202" + climatology: + inputs: + request: + param: "202" + "173142": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "172142" + climatology: + inputs: + request: + param: "172142" + "173143": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "172143" + climatology: + inputs: + request: + param: "172143" + "173144": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "172144" + climatology: + inputs: + request: + param: "172144" + "173189": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "172189" + climatology: + inputs: + request: + param: "172189" + "173228": + filter:type: + taem/fcmean: + forecast: + inputs: + request: + param: "172228" + climatology: + inputs: + request: + param: "172228" + "172008": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "8" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172009": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "9" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172142": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "142" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172143": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "143" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172144": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "144" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172146": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "146" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172147": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "147" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172169": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "169" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172175": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "175" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172176": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "176" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172177": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "177" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172178": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "178" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172179": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "179" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172180": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "180" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172181": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "181" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172182": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "182" + "172189": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "189" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172205": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "205" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172212": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "212" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "172228": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "228" + taem/taes: + forecast: + inputs: + request: + param: "{param}" + "200142": + from_inputs: false + forecast: + inputs: + request: + param: "142" + derive_step: + type: deaccumulate + "200143": + from_inputs: false + forecast: + inputs: + request: + param: "143" + derive_step: + type: deaccumulate + "200144": + from_inputs: false + forecast: + inputs: + request: + param: "144" + derive_step: + type: deaccumulate + "200189": + from_inputs: false + forecast: + inputs: + request: + param: "189" + derive_step: + type: deaccumulate + "200228": + from_inputs: false + forecast: + inputs: + request: + param: "228" + derive_step: + type: deaccumulate + "228216": + from_inputs: false + forecast: + inputs: + request: + param: "228216" + derive_step: + type: deaccumulate + "201": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "121" + cd/em/es: # This case is handled below + filter:stream: + efhs/eehs: {} + pfc/gwt: + from_inputs: false + taem/taes: + filter:stream: + efhs/eehs/eefo: + forecast: + inputs: + request: + param: "{param}" + "202": + filter:type: + fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: "122" + pfc/gwt: + from_inputs: false + cd/em/es: + filter:stream: + efhs/eehs: {} + taem/taes: + filter:stream: + efhs/eehs/eefo: + forecast: + inputs: + request: + param: "{param}" + "140249": + from_inputs: false + filter:type: + fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: + param: ["165", "166"] + cd: {} + "207": + filter:stream: + msmm: + forecast: + inputs: + request: + param: ["165", "166"] + "*": + forecast: + inputs: + request: + param: "{param}" + "234167": + filter:type: + taem: + forecast: + inputs: + request: + param: "171167" + climatology: + inputs: + request: + param: "167.128" + "234139": + filter:type: + taem: + forecast: + inputs: + request: + param: "171139" + climatology: + inputs: + request: + param: "139.128" + "234151": + filter:type: + taem: + forecast: + inputs: + request: + param: "171151" + climatology: + inputs: + request: + param: "151.128" + "234228": + filter:type: + taem: + forecast: + inputs: + request: + param: "173228" + climatology: + inputs: + request: + param: "228.172" + "235117": + filter:type: + fcmean: + forecast: + inputs: + request: + param: "228235" + taem/taes: + forecast: + inputs: + request: + param: "235117" + "237117": + filter:type: + fcmax: + forecast: + inputs: + request: + param: "228235" + "238117": + filter:type: + fcmin: + forecast: + inputs: + request: + param: "228235" + "239117": + filter:type: + fcstdev: + forecast: + inputs: + request: + param: "228235" + "260033": + from_inputs: false + forecast: + inputs: + request: + param: ["228220", "228218"] + "260053": + from_inputs: false + forecast: + inputs: + request: + param: ["228220", "228221"] + "261001": + filter:type: + cf/pf/fc: + forecast: + inputs: + - request: + param: ["169", "175", "176", "177", "228021", "47"] + derive_step: + type: deaccumulate + - request: + param: ["165", "166", "167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261001" + "261014": + filter:type: + cf/pf/fc: + forecast: + inputs: + - request: + param: ["169", "175", "176", "177", "228021", "47"] + derive_step: + type: deaccumulate + - request: + param: ["165", "166", "167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261014" + "261015": + filter:type: + cf/pf/fc: + forecast: + inputs: + - request: + param: ["169", "175", "176", "177", "228021", "47"] + derive_step: + type: deaccumulate + - request: + param: ["165", "166", "167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261015" + "260004": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "260004" + "260242": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "260242" + "261016": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261016" + "260005": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["165", "166", "167"] + "em/es/pb": + forecast: + inputs: + request: + param: "260005" + "260255": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["165", "166", "167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "260255" + "261018": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["165", "166", "167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261018" + "261002": + filter:type: + cf/pf/fc: + forecast: + inputs: + - request: + param: ["47", "228021", "169", "175", "176", "177"] + derive_step: + type: deaccumulate + - request: + param: "167" # Required for metadata of cossza + "em/es/pb": + forecast: + inputs: + request: + param: "261002" + "261023": + filter:type: + cf/pf/fc: + forecast: + inputs: + request: + param: ["167", "168"] + "em/es/pb": + forecast: + inputs: + request: + param: "261023" + filter:type: + fcmean: + filter:stream: + enfo/waef/eefo/weef: + filter:param: + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": + forecast: + inputs: + derive_step: + type: default + 40/41/42/170/140229/140231/140232/140233/140245: + forecast: + inputs: + derive_step: + type: default + by: 24 + 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: + forecast: + inputs: + derive_step: + type: default + include_start: true + by: 24 + 1/2/3/54/60/129/130/131/132/133/138/155/203: + forecast: + inputs: + derive_step: + type: default + by: 12 + 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: + forecast: + inputs: + derive_step: + type: precomputed + climatology: + inputs: + request: + type: taem + derive_date: + - option: nearest + - option: bracket + num: 2 + strict: False + derive_step: + type: range + required: true + enfh/enwh/eefh/weeh: + filter:selection: + mclimate: + from_inputs: false + forecast: + inputs: + derive_step: + type: default + filter:type: + fcmean: + filter:param: + "162071": + forecast: + inputs: + request: + param: ["162071", "162072"] + "207": + forecast: + inputs: + request: + param: ["165", "166"] + "59": + forecast: + inputs: + request: + param: "228035" + "228044": + forecast: + inputs: + request: + param: ["228036", "228035"] + "167/228/144": + filter:steplength: + "*": + filter:param: + "228/144": + forecast: + inputs: + derive_step: + type: deaccumulate + "*": {} + "168": + forecast: + inputs: + - request: + type: fcmean + members: + start: 0 + end: 0 + derive_step: + type: precomputed + - request: + type: fcmean + derive_step: + type: precomputed + filter:param: + "228": + forecast: + inputs: + request: + param: "172228" + "167": + forecast: + inputs: + request: + param: "167" + "*": {} + "*": + filter:param: + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": + forecast: + inputs: + derive_step: + type: default + 40/41/42/170/140229/140231/140232/140233/140245: + forecast: + inputs: + derive_step: + type: default + by: 24 + 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: + forecast: + inputs: + derive_step: + type: default + include_start: true + by: 24 + 1/2/3/54/60/129/130/131/132/133/138/155/203: + forecast: + inputs: + derive_step: + type: default + by: 12 + msmm/swmm: + filter:param: + "34/139/151/164/165/166/167/168/168/207/229/230": + forecast: + inputs: + derive_step: + type: monthly + 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: + forecast: + inputs: + derive_step: + type: monthly + by: 24 + 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: + forecast: + inputs: + derive_step: + type: monthly + include_start: true + allow_missing_zero: true + by: 24 + 129/130/133/138/155/203: + forecast: + inputs: + derive_step: + type: monthly + by: 12 + fcstdev/fcmax/fcmin: + filter:stream: + enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: + filter:param: + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": + forecast: + inputs: + derive_step: + type: default + 40/41/42/170/140229/140231/140232/140233/140245: + forecast: + inputs: + derive_step: + type: default + by: 24 + 172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212: + forecast: + inputs: + derive_step: + type: default + include_start: true + by: 24 + 172142/172143/172144/172228: + filter:type: + fcmin: + from_inputs: false + "*": {} + forecast: + inputs: + derive_step: + type: default + include_start: true + by: 24 + 1/2/3/54/60/129/130/131/132/133/138/155/203: + from_inputs: false + forecast: + inputs: + derive_step: + type: default + by: 12 + msmm/swmm: + filter:param: + "34/139/151/164/165/166/167/168/168/207/229/230": + forecast: + inputs: + derive_step: + type: monthly + 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: + forecast: + inputs: + derive_step: + type: monthly + by: 24 + 172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212: + forecast: + inputs: + derive_step: + type: monthly + include_start: true + allow_missing_zero: true + by: 24 + 172142/172143/172144/172228: + filter:type: + fcmin: + from_inputs: false + "*": {} + forecast: + inputs: + derive_step: + type: monthly + include_start: true + allow_missing_zero: true + by: 24 + 133/203: + forecast: + inputs: + derive_step: + type: monthly + by: 12 + 129/130/138/155: + from_inputs: false + forecast: + inputs: + derive_step: + type: monthly + by: 12 + efi/efic/sot: + filter:stream: + "eefo/weef": + filter:param: + 132044/132049/132059/132144/132045/132165/132167/132201/132202/132216/132228: + climatology: + required: true + inputs: + request: + type: cd + derive_date: + option: nearest + derive_step: + type: range + "enfo/waef": + climatology: + required: true + inputs: + request: + type: cd + derive_date: + - option: next + sequence: + type: daily + - option: previous + strict: false + derive_step: + type: range + filter:param: + "132044/132049/132059/132045/132165/132167/132201/132202/132216": + forecast: + inputs: + derive_step: + type: default + by: 6 + 132228/132144: + forecast: + inputs: + derive_step: + type: deaccumulate + taem/taes: + filter:stream: + eefo: + filter:param: + "*": {} + 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: + forecast: + inputs: + derive_step: + type: precomputed + climatology: + inputs: + request: + type: taem + derive_date: + - option: nearest + - option: bracket + num: 2 + strict: False + derive_step: + type: range + required: true + 234167/234139/234151/234228: + forecast: + inputs: + derive_step: + type: precomputed + climatology: + inputs: + - request: + stream: eefh + type: fcmean + members: + start: 0 + end: 10 + derive_date: + - option: nearest + - option: bracket + num: 1 + strict: False + derive_step: + type: range + - request: + type: taem + derive_date: + - option: nearest + - option: bracket + num: 1 + strict: False + derive_step: + type: range + required: true + efhs/wehs/eehs: + forecast: + inputs: + - request: + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + derive_hdate: + rstart: -20 + rend: 0 + recurrence: "yearly" + include_endpoint: false + - request: + type: "fcmean" + derive_step: + type: precomputed + derive_hdate: + rstart: -20 + rend: 0 + recurrence: "yearly" + include_endpoint: false + cd: + filter:stream: + efhs/eehs: + from_inputs: false + forecast: + inputs: + - request: + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + - request: + type: "fcmean" + derive_step: + type: precomputed + filter:steplength: + "*": + filter:stream: + efhs: + forecast: + inputs: + derive_date: + - option: bracket + num: 4 + strict: False + "168": + forecast: + inputs: + derive_date: + - option: bracket + num: 2 + strict: False + filter:param: + "228004": + forecast: + inputs: + request: + param: "167.128" + "49": + forecast: + inputs: + request: + param: "123.128" + "228005": + forecast: + inputs: + request: + param: "207.128" + "201": + forecast: + inputs: + request: + param: "121.128" + "202": + forecast: + inputs: + request: + param: "122.128" + "162045": + forecast: + inputs: + request: + param: "71.162" + "228006": + forecast: + inputs: + request: + param: "164.128" + "228": + forecast: + inputs: + request: + param: "228.128" + "144": + forecast: + inputs: + request: + param: "144.128" + "59": + forecast: + inputs: + request: + param: "59.128" + "228044": + forecast: + inputs: + request: + param: "44.228" + "140249": + forecast: + inputs: + request: + param: "249.140" + members: null + "wehs": + from_inputs: false + forecast: + inputs: + - request: + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + - request: + type: "fcmean" + derive_step: + type: precomputed + filter:steplength: + "*": + forecast: + inputs: + derive_date: + - option: bracket + num: 4 + strict: False + "168": + forecast: + inputs: + derive_date: + - option: bracket + num: 2 + strict: False + filter:param: + "140200": + forecast: + inputs: + request: + param: "229.140" + em/es: + filter:stream: + enfo/waef: {} + eefo/weef: + filter:steplength: + "168": + forecast: + inputs: + - request: + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + - request: + type: "fcmean" + derive_step: + type: precomputed + "*": {} + efhs/eehs: + filter:steptype: + range: + from_inputs: false + forecast: + inputs: + - request: + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + - request: + type: "fcmean" + derive_step: + type: precomputed + filter:steplength: + "*": + filter:stream: + efhs: + forecast: + inputs: + derive_date: + - option: bracket + num: 4 + strict: False + "168": + forecast: + inputs: + derive_date: + - option: bracket + num: 2 + strict: False + filter:param: + "228004": + forecast: + inputs: + request: + param: "167.128" + "49": + forecast: + inputs: + request: + param: "123.128" + "228005": + forecast: + inputs: + request: + param: "207.128" + "201": + forecast: + inputs: + request: + param: "121.128" + "202": + forecast: + inputs: + request: + param: "122.128" + "162045": + forecast: + inputs: + request: + param: "71.162" + "228006": + forecast: + inputs: + request: + param: "164.128" + "228": + forecast: + inputs: + request: + param: "228.128" + "144": + forecast: + inputs: + request: + param: "144.128" + "59": + forecast: + inputs: + request: + param: "59.128" + "228044": + forecast: + inputs: + request: + param: "44.228" + instantaneous: + forecast: + inputs: + derive_hdate: + rstart: -20 + rend: 0 + recurrence: "yearly" + include_endpoint: false + "wehs": + filter:steptype: + range: + from_inputs: false + filter:param: + "140200": + forecast: + inputs: + - request: + param: "229.140" + type: "fcmean" + members: + start: 0 + end: 0 + derive_step: + type: precomputed + derive_date: + - option: bracket + num: 4 + strict: False + - request: + param: "229.140" + type: "fcmean" + derive_step: + type: precomputed + derive_date: + - option: bracket + num: 4 + strict: False + instantaneous: + forecast: + inputs: + derive_hdate: + rstart: -20 + rend: 0 + recurrence: "yearly" + include_endpoint: false + gwt: + filter:param: + "228": + filter:class: + od: + filter:steplength: + "6": + forecast: + update_request_method: product + inputs: + - request: + param: "228" + derive_step: + type: deaccumulate + - request: + param: ["138", "155"] + levtype: pl + levelist: 700 + derive_step: + type: default + include_start: true + by: 3 + - request: + param: "143" + derive_step: + type: deaccumulate + - request: + param: "228022" + derive_step: + type: deaccumulate + by: 24 + - request: + param: "228035" + derive_step: + type: default + by: 6 + - request: + param: [167, 168] + derive_step: + type: default + by: 3 + include_start: true + "12": + forecast: + update_request_method: product + inputs: + - request: + param: "228" + derive_step: + type: deaccumulate + - request: + param: ["138", "155"] + levtype: pl + levelist: 700 + derive_step: + type: default + include_start: true + by: 6 + - request: + param: "143" + derive_step: + type: deaccumulate + - request: + param: "228022" + derive_step: + type: deaccumulate + by: 24 + - request: + param: "228035" + derive_step: + type: default + by: 6 + - request: + param: [167, 168] + derive_step: + type: default + by: 6 + include_start: true + "24": + forecast: + update_request_method: product + inputs: + - request: + param: "228" + derive_step: + type: deaccumulate + - request: + param: ["138", "155"] + levtype: pl + levelist: 700 + derive_step: + type: default + include_start: true + by: 12 + - request: + param: "143" + derive_step: + type: deaccumulate + - request: + param: "228022" + derive_step: + type: deaccumulate + by: 24 + - request: + param: "228035" + derive_step: + type: default + by: 6 + - request: + param: [167, 168] + derive_step: + type: default + by: 6 + include_start: true + ea: + filter:steplength: + "12/24": + forecast: + update_request_method: product + inputs: + - request: + param: "228.128" + - request: + param: ["131.128", "132.128"] + levtype: pl + levelist: 700 + - request: + param: "143.128" + - request: + param: "22.228" + - request: + param: "59.128" + - request: + param: ["167.128", "168.128"] + - request: + type: an + param: "74.128" + time: "0000" + derive_step: + type: static + values: 0 + - request: + type: an + param: "172.128" + time: "0000" + derive_step: + type: static + values: 0 + "201": + filter:class: + ea: + filter:steplength: + "24": + forecast: + update_request_method: product + inputs: + - request: + param: "201.128" + - request: + param: ['228.128', '201.128'] + - request: + param: ['141.128', '33.128', '246.228', '247.228', '39.128', '201.128'] + derive_step: + type: default + include_start: true + - request: + param: "22.228" + - request: + type: an + param: "74.128" + time: "0000" + derive_step: + type: static + values: 0 + - request: + type: an + param: "172.128" + time: "0000" + derive_step: + type: static + values: 0 + - request: + class: od + type: an + param: "200199" + derive_step: + type: static + values: 0 + "202": + filter:class: + ea: + filter:steplength: + "24": + forecast: + update_request_method: product + inputs: + - request: + param: "202.128" + - request: + param: ['141.128', '33.128', '167.128', '235.128', '246.228', '247.228', '186.128', '202.128'] + derive_step: + type: default + include_start: true + - request: + type: an + param: "74.128" + time: "0000" + derive_step: + type: static + values: 0 + - request: + type: an + param: "172.128" + time: "0000" + derive_step: + type: static + values: 0 + - request: + class: od + type: an + param: "200199" + derive_step: + type: static + values: 0 + - request: + type: an + param: ['27.128', '28.128', '66.128', '67.128'] + time: "1200" + derive_step: + type: static + values: 0 + pfc: + forecast: + inputs: + request: + param: "{param}" + derive_step: + type: precomputed + fc/cf/pf/ep/pb/cm/cr: {} diff --git a/pproc/tests/templates/clustereps.yaml b/pproc/tests/templates/clustereps.yaml index 35c9a579..f87f7dd6 100644 --- a/pproc/tests/templates/clustereps.yaml +++ b/pproc/tests/templates/clustereps.yaml @@ -185,4 +185,4 @@ indexes: null deterministic_is_control: true date: 2024-05-07 00:00:00 compute_spread: true -pca_output: null \ No newline at end of file +pca_output: null diff --git a/pproc/tests/templates/ensms.yaml b/pproc/tests/templates/ensms.yaml index bf5aeba0..16bb81a3 100644 --- a/pproc/tests/templates/ensms.yaml +++ b/pproc/tests/templates/ensms.yaml @@ -4,7 +4,7 @@ parallelisation: queue_size: 2 parameters: 2t: - inputs: + inputs: fc: request: param: '167.128' @@ -34,12 +34,12 @@ inputs: type: pf number: [1, 2, 3, 4, 5] source: - type: "fdb" + type: "fdb" outputs: default: metadata: mars.expver: '0001' numberOfForecastsInEnsemble: 6 perturbationNumber: 0 - target: - type: "fdb" \ No newline at end of file + target: + type: "fdb" diff --git a/pproc/tests/templates/extreme.yaml b/pproc/tests/templates/extreme.yaml index e38d6382..22d319bf 100644 --- a/pproc/tests/templates/extreme.yaml +++ b/pproc/tests/templates/extreme.yaml @@ -16,7 +16,7 @@ parameters: request: param: 228004 step: - 12-36: 0-24 + 12-36: 0-24 accumulations: step: type: legacywindow @@ -52,10 +52,10 @@ inputs: stream: enfo date: 20240507 time: 12 - type: pf + type: pf number: [1, 2, 3, 4, 5] source: - type: fdb + type: fdb clim: request: class: od @@ -71,4 +71,4 @@ inputs: outputs: default: target: - type: fdb \ No newline at end of file + type: fdb diff --git a/pproc/tests/templates/fdb/schema b/pproc/tests/templates/fdb/schema index 32aa964f..0eb23544 100644 --- a/pproc/tests/templates/fdb/schema +++ b/pproc/tests/templates/fdb/schema @@ -586,4 +586,3 @@ method: Integer; [ class=cs, expver, stream, date:Default, time, domain [ type, levtype [ step, levelist?, param ]]] - diff --git a/pproc/tests/templates/prob.yaml b/pproc/tests/templates/prob.yaml index 3a30a28c..0dfbc3ca 100644 --- a/pproc/tests/templates/prob.yaml +++ b/pproc/tests/templates/prob.yaml @@ -20,7 +20,7 @@ parameters: metadata: paramId: 131073 value: 273.15 -inputs: +inputs: fc: request: class: od @@ -41,5 +41,5 @@ outputs: localDefinitionNumber: 5 mars.expver: '0001' type: ep - target: + target: type: "fdb" diff --git a/pproc/tests/templates/quantiles.yaml b/pproc/tests/templates/quantiles.yaml index faf1594f..94a3f8fd 100644 --- a/pproc/tests/templates/quantiles.yaml +++ b/pproc/tests/templates/quantiles.yaml @@ -5,7 +5,7 @@ parallelisation: quantiles: 3 parameters: 2t: - inputs: + inputs: fc: request: param: '167.128' @@ -39,10 +39,10 @@ inputs: type: pf number: [1, 2, 3, 4, 5] source: - type: "fdb" + type: "fdb" outputs: default: metadata: mars.expver: '0001' - target: - type: "fdb" \ No newline at end of file + target: + type: "fdb" diff --git a/pproc/tests/templates/t850.yaml b/pproc/tests/templates/t850.yaml index 9053bc68..658cbc25 100644 --- a/pproc/tests/templates/t850.yaml +++ b/pproc/tests/templates/t850.yaml @@ -55,7 +55,7 @@ parameters: bitsPerValue: 24 - coords: [[0], [12]] operation: maximum - std_anomaly: true + std_anomaly: true thresholds: - metadata: {"paramId": 133093} comparison: '>' @@ -71,7 +71,7 @@ parameters: packingType: grid_ccsds - coords: [[0], [12]] operation: minimum - std_anomaly: true + std_anomaly: true thresholds: - metadata: {"paramId": 133096} comparison: < @@ -140,4 +140,4 @@ outputs: localDefinitionNumber: 5 bitsPerValue: 8 target: - type: fdb \ No newline at end of file + type: fdb diff --git a/pproc/tests/templates/thermo.yaml b/pproc/tests/templates/thermo.yaml index d2c7e4ff..8b69a6c7 100644 --- a/pproc/tests/templates/thermo.yaml +++ b/pproc/tests/templates/thermo.yaml @@ -1,7 +1,7 @@ parallelisation: n_par_compute: 2 -defs: - base_request: &base_request +defs: + base_request: &base_request class: od domain: g expver: '0001' @@ -29,9 +29,9 @@ parameters: step: coords: [[0]] indices: - inputs: - accum: - request: + inputs: + accum: + request: <<: *base_request date: 20240605 param: *accum_params @@ -53,7 +53,7 @@ parameters: - wbt - wbgt - 2r -inputs: +inputs: inst: request: <<: *base_request @@ -76,4 +76,4 @@ outputs: path: "intermediate.grib" indices: target: - type: fdb \ No newline at end of file + type: fdb diff --git a/pproc/tests/templates/wind.yaml b/pproc/tests/templates/wind.yaml index 01753ab8..9f25ac09 100644 --- a/pproc/tests/templates/wind.yaml +++ b/pproc/tests/templates/wind.yaml @@ -1,4 +1,7 @@ -parallelisation: 1 +parallelisation: + n_par_compute: 2 + n_par_read: 2 + queue_size: 2 inputs: fc: request: @@ -49,4 +52,4 @@ outputs: indicatorOfParameter: 10 mars.expver: '0001' target: - type: fdb \ No newline at end of file + type: fdb diff --git a/pproc/tests/test_ensms.py b/pproc/tests/test_ensms.py deleted file mode 100644 index 3687b688..00000000 --- a/pproc/tests/test_ensms.py +++ /dev/null @@ -1,53 +0,0 @@ -# (C) Copyright 2021- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -# coding: utf-8 - -import pytest -from pproc.Config import VariableTree -from os import path - -tree = VariableTree(path.join(path.dirname(__file__), "test_ensms.yaml")) - -TESTS_VARS = ( - ( - ("ensms", 48, "t"), - { - "step": "0/to/48/by/3", - "param": 130, - "levtype": "pl", - "levelist": "250/500/850", - }, - ), - ( - ("ensms", 96, "mx2t6"), - {"step": "54/to/96/by/6", "param": 121, "levtype": "sfc", "levelist": None}, - ), - ( - ("ensms", 360, "mn2t6"), - {"step": "306/to/360/by/6", "param": 122, "levtype": "sfc", "levelist": None}, - ), -) - - -@pytest.mark.parametrize("test", TESTS_VARS) -def test_variables(test): - path, variables = test - x = tree.variables(*path) - print(x) - print(variables) - assert x == variables - - -if __name__ == "__main__": - for test in TESTS_VARS: - try: - test_variables(test) - except Exception as e: - print(e) diff --git a/pproc/tests/test_ensms.yaml b/pproc/tests/test_ensms.yaml deleted file mode 100644 index 526caebf..00000000 --- a/pproc/tests/test_ensms.yaml +++ /dev/null @@ -1,45 +0,0 @@ ---- - -_mn2t6: &_mn2t6 { param: 122, levtype: sfc, levelist: null } -_mx2t6: &_mx2t6 { param: 121, levtype: sfc, levelist: null } - -ensms: - _base: &_base - z: { param: 129, levtype: pl, levelist: 300/500/1000 } - t: { param: 130, levtype: pl, levelist: 250/500/850 } - msl: { param: 151, levtype: sfc, levelist: null } - 2t: { param: 167, levtype: sfc, levelist: null } - 10si: { param: 207, levtype: sfc, levelist: null } - 100si: { param: 228249, levtype: sfc, levelist: null } - mn2t3: { param: 228027, levtype: sfc, levelist: null } - mx2t3: { param: 228026, levtype: sfc, levelist: null } - mn2t6: *_mn2t6 - mx2t6: *_mx2t6 - 48: - <<: *_base - step: 0/to/48/by/3 - mn2t6: { <<: *_mn2t6, step: 0/to/48/by/6 } - mx2t6: { <<: *_mx2t6, step: 0/to/48/by/6 } - 96: - <<: *_base - step: 51/to/96/by/3 - mn2t6: { <<: *_mn2t6, step: 54/to/96/by/6 } - mx2t6: { <<: *_mx2t6, step: 54/to/96/by/6 } - 144: - <<: *_base - step: 99/to/144/by/3 - mn2t6: { <<: *_mn2t6, step: 102/to/144/by/6 } - mx2t6: { <<: *_mx2t6, step: 102/to/144/by/6 } - 192: - <<: *_base - step: 144/to/192/by/6 - 240: - <<: *_base - step: 192/to/240/by/6 - 300: - <<: *_base - step: 246/to/300/by/6 - 360: - <<: *_base - step: 306/to/360/by/6 - diff --git a/pproc/tests/test_products.py b/pproc/tests/test_products.py index ffd54979..247bed03 100644 --- a/pproc/tests/test_products.py +++ b/pproc/tests/test_products.py @@ -17,7 +17,6 @@ from pproc.ensms import main as ensms_main from pproc.extreme import main as extreme_main from pproc.quantiles import main as quantiles_main -from pproc.wind import main as wind_main from pproc.thermal_indices import main as thermo_main from pproc.clustereps.__main__ import main as clustereps_main from conftest import DATA_DIR @@ -80,7 +79,7 @@ ], [ "wind", - wind_main, + ensms_main, [], { "type": "es", diff --git a/pproc/uv.lock b/pproc/uv.lock new file mode 100644 index 00000000..6b71cbd1 --- /dev/null +++ b/pproc/uv.lock @@ -0,0 +1,3721 @@ +version = 1 +requires-python = ">=3.10" +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] + +[manifest] +members = [ + "pproc", + "pproc-core", + "pproc-runtime", +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, +] + +[[package]] +name = "array-api-compat" +version = "1.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/12/65d297d3e425cb7fe5247b7ec14b4ed83539e9b5e89b65c15ea7ee274182/array_api_compat-1.15.0.tar.gz", hash = "sha256:53c5f922491bf15f62847afafc4e39eedfae57d218988fefb8cce39c2a9b3dea", size = 129305 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/16/1a8fd2b19544b84575cf84ef7aa3ad4c173b756d5f087c91f85d1b295777/array_api_compat-1.15.0-py3-none-any.whl", hash = "sha256:7b1b9c53269061403fd5f45a8de349f16e7887653328bfa0c5f2d45299ff0a8e", size = 79113 }, +] + +[[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 = "atlaslib-ecmwf" +version = "0.46.0.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/be/262b9ecc67391b5aa627050d0b74334be278dcbda10fa74dd9053b9e92d6/atlaslib_ecmwf-0.46.0.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:dba6b7872180ba75b11f35daa22d054e90fde6ed32470aa19c9d1fe0f43303aa", size = 5200826 }, + { url = "https://files.pythonhosted.org/packages/f0/d8/33a3f4cea97dc040f63726db624d9d9be8d21bd11b1f9f6cb7dfdaf464ad/atlaslib_ecmwf-0.46.0.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:8eae9424296b4dfb17c6c061a52ecc4b4556df6974c8fd3e627ec452f969c43c", size = 5794256 }, + { url = "https://files.pythonhosted.org/packages/47/23/6528df2548c392410aa48541395b33ea1ea9a05c7011369e367d61141049/atlaslib_ecmwf-0.46.0.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:29ecadcbe6ceba500764098789a3ee8f48b81b504b06950effb16ab166cc0178", size = 6061703 }, + { url = "https://files.pythonhosted.org/packages/93/1e/0ac948c7fc475939d58753f8a595de614b3eb951b270033db20abe54a024/atlaslib_ecmwf-0.46.0.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e9e65324ab023706e8918dd3770b3edc07a16309a18734f88c577620667b5a21", size = 6423405 }, + { url = "https://files.pythonhosted.org/packages/01/22/b9c3d9b0198c4bb2df40510793402463e0b471bf20de260561d51271c845/atlaslib_ecmwf-0.46.0.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:21ba8c25b6d9024674ce47582e086c7628fb8f2663d476056ef13d705cd148ab", size = 5200826 }, + { url = "https://files.pythonhosted.org/packages/4d/87/5fd44d072449dd41099be19073049e6a5a82089141bd433dc9cde3895e2a/atlaslib_ecmwf-0.46.0.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:d12b4481546d2bcab7b9481e816d1e9424814a5258ceb7efd8af95f21619cad3", size = 5794258 }, + { url = "https://files.pythonhosted.org/packages/55/06/24e64985cb6a872bd1b350b756f7686656093e99d3c4f2eea837fb72ee3f/atlaslib_ecmwf-0.46.0.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b27205c408cb2f809993275b39b8d71990921270876114b2e6e4275837a4d056", size = 6061766 }, + { url = "https://files.pythonhosted.org/packages/73/1e/1366068bf78390918fc5b460c65274d5887f0370326d2b033b416358a4f4/atlaslib_ecmwf-0.46.0.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:88d8f97bf2f03432803850acd09738a99fc6e72f316b97195bed2417bbb3a426", size = 6423405 }, + { url = "https://files.pythonhosted.org/packages/d5/e6/acd57994110b415d229856abd24dd7a481e47371ab295fe93fb2aa51eb00/atlaslib_ecmwf-0.46.0.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:01eebce538aa17fb0e32466209eaf3284411ef83c47040e689e250422fb3ffb5", size = 5200825 }, + { url = "https://files.pythonhosted.org/packages/d3/b7/fe0d0b6b483b667c59ffd84f167c9125e4eddfdd60445bb88126c2dbef41/atlaslib_ecmwf-0.46.0.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:a6c534e57d23e591074d2f5943b4727441de00e3b606d3a42500897f5373c310", size = 5794255 }, + { url = "https://files.pythonhosted.org/packages/bd/9d/bf8829d673ad92b2bc87ab236987d47916ff9850c66fa422d1cdf70de14f/atlaslib_ecmwf-0.46.0.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:85ef8a2e20d10190fe866966490e1f170450e9e507d9af665b45d9d532cd524a", size = 6061713 }, + { url = "https://files.pythonhosted.org/packages/d6/66/f715e844a5861a25279ce888a2edacb2cb39487176eb4ed35cf894228e7b/atlaslib_ecmwf-0.46.0.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:248b84de9f49529cc15b16e0cfc0440983b01a0266d910aee0525bd71563b32b", size = 6423393 }, + { url = "https://files.pythonhosted.org/packages/83/9c/053012c75f41aeedeeab5b36442b1dbdeea2905b9d2cd3d969564968b7ca/atlaslib_ecmwf-0.46.0.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:130cfa4fac5afdbd5736dd825a590808e697f81bdb42d5c6651a3a204edf21cb", size = 5200826 }, + { url = "https://files.pythonhosted.org/packages/9c/7d/f455ec827e1253aa3f513d137d85e0ac2d2cc16c2e1b0a11e9acaf304427/atlaslib_ecmwf-0.46.0.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:d90522885a2a001513e1af0b14005cb852ff386fa90476001c56cd45c0d0beaa", size = 5794254 }, + { url = "https://files.pythonhosted.org/packages/83/a2/010ed47f3f2d50a30404c5e47bdf4d8a95c23e91801b0c83d6ace54030e4/atlaslib_ecmwf-0.46.0.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:856a991ef92221dbf0fbd7d43dfeb9776aab027e349caea0702dea5ceb44bc24", size = 6061712 }, + { url = "https://files.pythonhosted.org/packages/37/1e/dd2831805246552dbbe87bb65451098d490cf325b993fe5ccb94044027aa/atlaslib_ecmwf-0.46.0.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ecc0292fcc5971036ff2e4ea4f27ed74b3c0176658b6ef5f95d979e84210a33b", size = 6423393 }, + { url = "https://files.pythonhosted.org/packages/08/b5/eb7d9a3a1bf3e6bed160eb8d33c9adabb77a57cd4eecfafc2c5d1c02c2aa/atlaslib_ecmwf-0.46.0.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:f1237f4eeee2a65e9bd16f3278a16d2f5fd2a0f3bfa1df6adda50b2c7ee3fa8f", size = 5200829 }, + { url = "https://files.pythonhosted.org/packages/92/be/4230bed074027242c0ee34ac507f38a2ac94e164927de60d506a47c771fe/atlaslib_ecmwf-0.46.0.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:91faa9dcf3efcca4093863a21bcdf8e2aea1bab3340a4a65bc02edd8d957926c", size = 5794265 }, + { url = "https://files.pythonhosted.org/packages/68/67/5fe31bd3a7df78533bcfc004e4554a8fbd5b89d2756bb57426cfd6286f00/atlaslib_ecmwf-0.46.0.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:478da5a786310ab188d03e91fb19a98d326f7b5aa6b86943aad837badb310cb9", size = 6061701 }, + { url = "https://files.pythonhosted.org/packages/bf/24/fcd862359b88dcd0d8cd51320c738b6426e001d5e45911cf2246857c0b1e/atlaslib_ecmwf-0.46.0.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:f0df39af92336edba1c569f1eb431b20a209954134409ad77ab20fe7bc933025", size = 6423396 }, +] + +[[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 = "certifi" +version = "2026.5.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134 }, +] + +[[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/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283 }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504 }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811 }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402 }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217 }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079 }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475 }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829 }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211 }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036 }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184 }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790 }, + { 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/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, +] + +[[package]] +name = "cfgrib" +version = "0.9.15.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "click" }, + { name = "eccodes" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123 }, +] + +[[package]] +name = "cftime" +version = "1.6.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/45/dcc38d7b293107d3e33b3d94b2619687eb414a4f16880e2e841cdb6ac49a/cftime-1.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ad81e8cb0eb873b33c3d1e22c6168163fdc64daa8f7aeb4da8092f272575f4d", size = 510221 }, + { url = "https://files.pythonhosted.org/packages/68/63/2875341516fcfe80f1a16f86b420aec9441223ab5381d554441c9fdae56e/cftime-1.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12d95c6af852114a13301c5a61e41afdbd1542e72939c1083796f8418b9b8b0e", size = 490684 }, + { url = "https://files.pythonhosted.org/packages/80/7f/85f2c4c7ae8300b7871af7d7d144ad06f71dc0dd6258f0d18fd966067d1b/cftime-1.6.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2659b7df700e27d9e3671f686ce474dfb5fc274966961edf996acc148dfa094a", size = 1592268 }, + { url = "https://files.pythonhosted.org/packages/6c/9a/72dbd72498e958edf41a770bbd05e68141774325a945092059f4eb9c653d/cftime-1.6.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:94cebdfcda6a985b8e69aed22d00d6b8aa1f421495adbdcff1d59b3e896d81e2", size = 1624716 }, + { url = "https://files.pythonhosted.org/packages/bc/9e/2c4c720ad8bbe87994ca62a0e3c09d3786b984af664a91a6f3a668aa0b13/cftime-1.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:179681b023349a2fe277ceccc89d4fc52c0dd105cb59b7187b5bc5d442875133", size = 1705927 }, + { url = "https://files.pythonhosted.org/packages/da/77/66484061dee5fbcb2fdcfa6a491d4efb880725117f4a339d20a5323105df/cftime-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:d8b9fdecb466879cfe8ca4472b229b6f8d0bb65e4ffd44266ae17484bac2cf38", size = 472435 }, + { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733 }, + { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946 }, + { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856 }, + { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573 }, + { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563 }, + { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631 }, + { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383 }, + { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175 }, + { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980 }, + { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166 }, + { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614 }, + { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090 }, + { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840 }, + { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534 }, + { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453 }, + { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541 }, + { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014 }, + { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625 }, + { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269 }, + { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364 }, + { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468 }, + { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725 }, + { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445 }, + { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434 }, + { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812 }, + { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768 }, + { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818 }, + { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862 }, + { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781 }, + { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218 }, + { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932 }, + { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894 }, + { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027 }, + { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065 }, +] + +[[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/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182 }, + { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329 }, + { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230 }, + { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890 }, + { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930 }, + { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109 }, + { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684 }, + { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785 }, + { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055 }, + { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502 }, + { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295 }, + { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145 }, + { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884 }, + { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343 }, + { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174 }, + { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805 }, + { 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/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328 }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061 }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031 }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239 }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589 }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733 }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652 }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229 }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552 }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806 }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316 }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274 }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468 }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460 }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330 }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828 }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627 }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008 }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303 }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282 }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595 }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986 }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711 }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036 }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998 }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056 }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537 }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176 }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723 }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085 }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819 }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915 }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234 }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042 }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706 }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727 }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882 }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860 }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564 }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276 }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238 }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189 }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352 }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024 }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869 }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541 }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634 }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384 }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133 }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257 }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851 }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393 }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251 }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609 }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014 }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979 }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238 }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110 }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824 }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103 }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194 }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827 }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168 }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018 }, + { 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.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639 }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228 }, +] + +[[package]] +name = "code-meters" +version = "0.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801 }, +] + +[[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 = "conflator" +version = "0.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "rich-argparse" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/19/e8143a210b58494025803a684de9eb94998b7b8288f42f15fbee0161019c/conflator-0.1.8.tar.gz", hash = "sha256:9ee8958a3eebbfeb6fafc4b0b7b77c8a97d1752fd725ca8a514046a596f26508", size = 9753 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/aa/0d6a2c96234fb5cc3d55a3f5078268ef6bc4e69d202f86b93f17b3f8d2eb/conflator-0.1.8-py3-none-any.whl", hash = "sha256:7e621da64183bc9207b3857cebaa9cd1aee52ea6cb4aea7492aa9d9a4b4968c5", size = 10806 }, +] + +[[package]] +name = "dask" +version = "2026.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "cloudpickle" }, + { name = "fsspec" }, + { name = "importlib-metadata", marker = "python_full_version < '3.12'" }, + { name = "packaging" }, + { name = "partd" }, + { name = "pyyaml" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/2a/5d8cc1579590af86576dde890254440e478c7174b93a02095ecfc2e6ba38/dask-2026.3.0.tar.gz", hash = "sha256:f7d96c8274e8a900d217c1ff6ea8d1bbf0b4c2c21e74a409644498d925eb8f85", size = 11000710 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630 }, +] + +[package.optional-dependencies] +distributed = [ + { name = "distributed", marker = "python_full_version >= '3.11'" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365 }, +] + +[[package]] +name = "deprecation" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, +] + +[[package]] +name = "dill" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019 }, +] + +[[package]] +name = "distributed" +version = "2026.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "python_full_version >= '3.11'" }, + { name = "cloudpickle", marker = "python_full_version >= '3.11'" }, + { name = "dask", marker = "python_full_version >= '3.11'" }, + { name = "jinja2", marker = "python_full_version >= '3.11'" }, + { name = "locket", marker = "python_full_version >= '3.11'" }, + { name = "msgpack", marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "psutil", marker = "python_full_version >= '3.11'" }, + { name = "pyyaml", marker = "python_full_version >= '3.11'" }, + { name = "sortedcontainers", marker = "python_full_version >= '3.11'" }, + { name = "tblib", marker = "python_full_version >= '3.11'" }, + { name = "toolz", marker = "python_full_version >= '3.11'" }, + { name = "tornado", marker = "python_full_version >= '3.11'" }, + { name = "urllib3", marker = "python_full_version >= '3.11'" }, + { name = "zict", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/84/3e98a2d61493d201f253743091cbd4f099f502f957a9a33bb9ce5b8d5416/distributed-2026.3.0.tar.gz", hash = "sha256:4a8fc6102fededfbaae45288501276da2297a054d74eb6589f01b087c7f95c26", size = 2103970 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/77/2ff7aefc09cf1306a81cd7a46af34f80ebefef81a2e8329b94b58ad813ae/distributed-2026.3.0-py3-none-any.whl", hash = "sha256:52518f4b3e6795e87b442e8f57788ba1ddc750c62d0835669c85927280d38f07", size = 1009769 }, +] + +[[package]] +name = "earthkit-data" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgrib" }, + { name = "dask" }, + { name = "deprecation" }, + { name = "earthkit-utils" }, + { name = "eccodes" }, + { name = "entrypoints" }, + { name = "filelock" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "lru-dict" }, + { name = "markdown" }, + { name = "multiurl" }, + { name = "netcdf4", version = "1.7.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, + { name = "netcdf4", version = "1.7.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pdbufr" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/d3/a00aeee76005909eaa1f7fcb1e1f2333d9f4b53866666e1bb7f9e9e15148/earthkit_data-0.20.0-py3-none-any.whl", hash = "sha256:e1df4d93354bb5bd30b967ad17d52454b4df4d6a37511fc91f950aebba592056", size = 398525 }, +] + +[package.optional-dependencies] +fdb = [ + { name = "pyfdb" }, +] +mars = [ + { name = "ecmwf-api-client" }, +] + +[[package]] +name = "earthkit-meteo" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "earthkit-utils" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/14/87/162771cba3c4371e054914750164851e32bafe924c674153105789f01c88/earthkit_meteo-0.6.2.tar.gz", hash = "sha256:2823ed56947dd2c9c69aae6fe19153eec393c80392126ab84cc760419d0b952b", size = 370304 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/d3/988c1807b315a71cb4f6e5b2b739b115246083dc678b50fa9ff97c8a417a/earthkit_meteo-0.6.2-py3-none-any.whl", hash = "sha256:7380464a3a62422d4027bcfc20fbd4ee3a7bfc51eb1f89d1a5027f24c7f32a4d", size = 57004 }, +] + +[[package]] +name = "earthkit-time" +version = "0.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/fa/37a9a90303908685fba892402248789de689071f6ad4c1373dfd195ac34e/earthkit_time-0.1.8.tar.gz", hash = "sha256:d211f1647c169b34cf79177aed17ac4f472cb8bd3096f98b08d7f77293dfcd81", size = 32560 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/96/614cc95e2bd7f2075b8b4f4b85b37df655c3cc3028f949b799224f4546d4/earthkit_time-0.1.8-py3-none-any.whl", hash = "sha256:a09de208a3696f497e2d9495e535a9e2fc805f0148d4e2555abefd0da759216d", size = 28772 }, +] + +[[package]] +name = "earthkit-utils" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "array-api-compat" }, + { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/cb/0c9f59b0ca2a5ed941b65c52a4a005a7e16511f52fc3965eb45c53565b76/earthkit_utils-0.3.0-py3-none-any.whl", hash = "sha256:167e0385e062800d6c9f2d25a2a3075d7d91b67c3a02af52d772175b2313aa89", size = 35650 }, +] + +[[package]] +name = "earthkit-workflows" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "array-api-compat", marker = "python_full_version < '3.11'" }, + { name = "cloudpickle", marker = "python_full_version < '3.11'" }, + { name = "dill", marker = "python_full_version < '3.11'" }, + { name = "earthkit-data", marker = "python_full_version < '3.11'" }, + { name = "fire", marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "orjson", marker = "python_full_version < '3.11'" }, + { name = "pydantic", marker = "python_full_version < '3.11'" }, + { name = "pyrsistent", marker = "python_full_version < '3.11'" }, + { name = "pyvis", marker = "python_full_version < '3.11'" }, + { name = "pyzmq", marker = "python_full_version < '3.11'" }, + { name = "sortedcontainers", marker = "python_full_version < '3.11'" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/24/3f/4fae32362bbb8ff27ecfec64f10fad1ae86e546fb4fb42005e1435ef89fc/earthkit_workflows-0.6.2.tar.gz", hash = "sha256:5f05c670dc2f1b4895d799d0af0f7102f90c65b7026713aa4cba0d168c374353", size = 10682030 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/3d/a399bc384c6bdfadfd052820b4233ce949a3c4496c2cc5a811f165d2381c/earthkit_workflows-0.6.2-py3-none-any.whl", hash = "sha256:772c94b4ff62d9a42b6c4918c410ec082c6870d605f81e08015820121ded7235", size = 175629 }, +] + +[[package]] +name = "earthkit-workflows" +version = "0.14.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "array-api-compat", marker = "python_full_version >= '3.11'" }, + { name = "cloudpickle", marker = "python_full_version >= '3.11'" }, + { name = "dask", extra = ["distributed"], marker = "python_full_version >= '3.11'" }, + { name = "dill", marker = "python_full_version >= '3.11'" }, + { name = "earthkit-data", marker = "python_full_version >= '3.11'" }, + { name = "fire", marker = "python_full_version >= '3.11'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "orjson", marker = "python_full_version >= '3.11'" }, + { name = "pydantic", marker = "python_full_version >= '3.11'" }, + { name = "pyrsistent", marker = "python_full_version >= '3.11'" }, + { name = "pyvis", marker = "python_full_version >= '3.11'" }, + { name = "pyzmq", marker = "python_full_version >= '3.11'" }, + { name = "qubed", marker = "python_full_version >= '3.11'" }, + { name = "sortedcontainers", marker = "python_full_version >= '3.11'" }, + { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/03/8dd102d62897dfe47669053205623c9404fcccdf38762b894ba199dc5f2e/earthkit_workflows-0.14.2.tar.gz", hash = "sha256:18288d16cb1b8c580d5659ceb28c7dd2b00bdf8867653891ace72386366211d4", size = 10855266 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/c1/c0fc86e6ad49c35ce77d3ad3e285af29e5116ba1d463801555321dff0b18/earthkit_workflows-0.14.2-py3-none-any.whl", hash = "sha256:df3b9445262d2c948575f21a4502ad67662885da633fc82ed0d1d7ef9e91882a", size = 205638 }, +] + +[[package]] +name = "eccodes" +version = "2.47.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "cffi" }, + { name = "findlibs" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/fe/63f915171413efeaaa9d1ba613aeabdc3f8cdba603f72842a7fcb1b011ee/eccodes-2.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:3a7438b259188821a5b05e5dd814f83924936ff9fe0897f6a157506fcaea9baf", size = 7435926 }, + { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928 }, + { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009 }, + { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001 }, + { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567 }, +] + +[[package]] +name = "eccodeslib" +version = "2.46.2.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/17/25635892d00944eb51eee767d9f7cda5af5f965591b3eed2f3325fc2edd6/eccodeslib-2.46.2.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:28786e11150a5593df346cf8d90d1432b494041183f29c18c7fdc93b8e8e6f78", size = 8900008 }, + { url = "https://files.pythonhosted.org/packages/6c/f6/85ead200b6728c8b7efe4921d6bde296702759c6d3b98f5dfff1a57a7c1b/eccodeslib-2.46.2.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:16df01da07b032eb18c77cc18c62e32afa803f40a14e88e450b517d5416f614f", size = 8731393 }, + { url = "https://files.pythonhosted.org/packages/c6/18/363ceef6f9c61f316809c11a8b213ad410a44970bb2e36d3b97921839e58/eccodeslib-2.46.2.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:d2ddb31feb32efa77643873abff54801902a56364118614b3fec86e2ac984c51", size = 9093646 }, + { url = "https://files.pythonhosted.org/packages/98/fc/2e48a18b37bf5ab228c1fa2476c4957be6accf4d6261710087cd0a3e0b05/eccodeslib-2.46.2.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0c53d1a3e715ca52402cff11bc3a1c3d8f2619aa18c7a383167b2bdbb7913d1b", size = 8986652 }, + { url = "https://files.pythonhosted.org/packages/5d/b6/c2dab62331d291aa0e3d39d5a7021d3403d221a68d929dd9c0142ad5e847/eccodeslib-2.46.2.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:592295430695846ca258fe46f7cb8fc937331bc722e5ad56efca45b743b6374d", size = 8900035 }, + { url = "https://files.pythonhosted.org/packages/8d/b4/7422f4457b4becc32d5f02c5fd7bf8fb184bb0667cd30bcd80a7fc33aac9/eccodeslib-2.46.2.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:a1a6c4e0c783194760dc18d86b07c85f343e83eb19836e9b5f35712de302e406", size = 8731409 }, + { url = "https://files.pythonhosted.org/packages/8b/20/864f25031ebe08cb60a5ba15cf4385338aacc445a4b2bdb4ae0b65115f22/eccodeslib-2.46.2.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6a8c1431f025a2e6015cb7ed59b17c3e11cd48e88316dabe66eb0cb72d02e820", size = 9093647 }, + { url = "https://files.pythonhosted.org/packages/4f/2a/04b7093c1663b5d514487fa7ec95d87f4fe0ee296bb3dc669ec8c83d59c1/eccodeslib-2.46.2.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:095d9bbf2943c0d2435cc7a1971ccd599a04f0e9d3b03def5872eb700b2ba663", size = 8986650 }, + { url = "https://files.pythonhosted.org/packages/0b/ab/eb96e7b9a69521e438f2a562e029e0452e80be93b8f4c8b32be2766913f9/eccodeslib-2.46.2.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:5cb46d9bda6324935539457282195f8fc5df38dae4ea7ff545ba76a9cd50cf5f", size = 8899990 }, + { url = "https://files.pythonhosted.org/packages/98/fe/7c3bec98984b4e946431d13fddf2ebdd5436106a9f85c1a3938e7339c26d/eccodeslib-2.46.2.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:73880e83765b78b149b747549674cf264b2e7bf64532ab4e99eb1225cb8bb485", size = 8731401 }, + { url = "https://files.pythonhosted.org/packages/11/e4/1cdffaa4abd303726a06bc9630b7197360df35d11c297c702bf8b6e83fdd/eccodeslib-2.46.2.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8174d1350e629a0a4e51fbf63703658b1ed2f7423e7cb083a2b539a7dcee80cb", size = 9093644 }, + { url = "https://files.pythonhosted.org/packages/f0/f4/2f83c12c9987040a1a165534e02e28a82acef9744552cba43e705a674689/eccodeslib-2.46.2.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:cab8151ac204a45088d7789236183e8ff7a51fafd168be1488a0c10be886f0f4", size = 8986646 }, + { url = "https://files.pythonhosted.org/packages/d3/12/e48ea960e13791b033c08b25045eeb8221df8beb3a9e58d0753bf5bd42fe/eccodeslib-2.46.2.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:f5fe6a0787381115929ba521d9dafae7cb9c0c9b72790e4f92db1a09a043625f", size = 8899996 }, + { url = "https://files.pythonhosted.org/packages/01/8a/0826b05445c886e95fc46ac908afae28d28a06bb66f4f84dbbf710360a85/eccodeslib-2.46.2.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:a5ba7e609de866ed0f2d45b4785a8a870d21efb6e9e5a71e219d39e8fdeebdf0", size = 8731409 }, + { url = "https://files.pythonhosted.org/packages/bf/3b/758a073c4ed5b1c732f6a3b4a5ba7d8ca122d8408ebc7dd608e7e447c07c/eccodeslib-2.46.2.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:4500abf05428d94693dd29c589c6d208f2d48aff5efa145425c704fcd1f46925", size = 9093643 }, + { url = "https://files.pythonhosted.org/packages/d9/48/5e0e31e3cb310fbe04b08040e96d3107639ceef8a94f8788691af77beb54/eccodeslib-2.46.2.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0f14eb14f37af34bb79f43ba8ab8dff99d6d4876b6681614c6644a3cbbb89d6c", size = 8986651 }, + { url = "https://files.pythonhosted.org/packages/d2/90/3a3180b227e6483e80e6631e8630d8942fc8bfc66b8e6acd9f5549c537c6/eccodeslib-2.46.2.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:d93146a2770d3169f91129193e995a0bd58ac933937e26909c65c347f36b94a6", size = 8900007 }, + { url = "https://files.pythonhosted.org/packages/f4/91/901cb12b04f988420b7e75c914f7361ce5c23bff8c19e8b1d9c56657d7bc/eccodeslib-2.46.2.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:9c2da433e1d87ee4554b684c625234cbca14fa51181256b78a9d646a90f2fe22", size = 8731400 }, + { url = "https://files.pythonhosted.org/packages/ef/33/ab3c19ffc2675514259ff61a8ea757fb2a470ad6052371384f2a5021046c/eccodeslib-2.46.2.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:e62e4d893ec2939b6096c6aed21e31d38a979e33d50917611a1907b3ef0a2996", size = 9093646 }, + { url = "https://files.pythonhosted.org/packages/d7/41/c8ab7aadf86d28149c636970704a923c161b81ce301bc0fc3da82ce3d737/eccodeslib-2.46.2.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:5daa5a8290d10accf308a94678ebc85c8fd843e20f2d5d644559d4a691dd4af1", size = 8986650 }, +] + +[[package]] +name = "eckitlib" +version = "2.0.7.19" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/9c/07d6a2b2a54a192d1a759437a8752e3964b1a52b33cacb86d8336ebebde8/eckitlib-2.0.7.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:b100d0a992668934768fb6a232be36227cb92aa5f14f0e6d5b0c8eba9d5d7773", size = 2480051 }, + { url = "https://files.pythonhosted.org/packages/4c/0d/27c56aa4d6a6bf67f33ecb66f6f11bc1b2b1c211157e39411c8d0926e728/eckitlib-2.0.7.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:965aa92b8c7f0c05b49b209a22bd138082b4ee1d690ee4dd19f0400ffa6aa869", size = 2610838 }, + { url = "https://files.pythonhosted.org/packages/e7/df/5340c9c737eff8206e886ef34be00207bcffe7765dbe943d770975a99e46/eckitlib-2.0.7.19-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adf6218d6e8f45f3c301d8d0ed18b1e9caaf10027f03012871b63051dacc0766", size = 7040522 }, + { url = "https://files.pythonhosted.org/packages/13/72/5f66e7876b3f9b27c0b12fe4039aad6c82baf6ab9ae9897c6b89b1c092ce/eckitlib-2.0.7.19-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2471ceeb54ca59fbe28fb70258a8b333eba4ab73c7003df48b8808bf55550f4f", size = 7169831 }, + { url = "https://files.pythonhosted.org/packages/3f/dc/8729911c1d77aa26438abcfb8b2cab5893c32961068070cfff0bd8dbd7e7/eckitlib-2.0.7.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:d754b8f61dc376daf350f6d1f0e951260716e2b7be5081fa1160646ee121fcce", size = 2480047 }, + { url = "https://files.pythonhosted.org/packages/1e/8b/72e40a8cf04e4fe6b8c2e396f8c9926178aed6125481a7d563e5879840a4/eckitlib-2.0.7.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:7010c09a8e9998eadf98026d682441e588b1b166d8970cb42f6b6198f20085fd", size = 2610843 }, + { url = "https://files.pythonhosted.org/packages/a9/bf/a778df35b83c5019483cc1aef3a1f0d0c6cc3a44d18e438bf0ef33431541/eckitlib-2.0.7.19-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7bb53ee8cec37ebc05712906592c605f1ec166a953ae832fed9ba2117198ce8a", size = 7040517 }, + { url = "https://files.pythonhosted.org/packages/d2/7c/a72978c7b1b61634bd8b6c4159fa6f84f2dd52914a9f6d7dc722a48f8be0/eckitlib-2.0.7.19-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25ce8a8e55ac097193e4de3ef63d80825d45839a6599985d99ece89a261c8dfe", size = 7169837 }, + { url = "https://files.pythonhosted.org/packages/fa/23/269c1271d00596c4e68177c9dda5350e98a3ba19c0058421da9c870380f1/eckitlib-2.0.7.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:cfba9bf706755e649afea97de7597242fd8f4ecff1b72a26c9ef58eafb67857e", size = 2480050 }, + { url = "https://files.pythonhosted.org/packages/00/38/7adb54bdcbce6642230c122515dea472f131e0ccdb0c3cc0fb350440c6bc/eckitlib-2.0.7.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:66bdd16dd1cf1bbeeea9cbeccc0cc1e28822057d5f104e43868dd7011717b172", size = 2610836 }, + { url = "https://files.pythonhosted.org/packages/9b/9f/9728cc577cbf84619f57da633e7ad3625fa5bef7ad05a990118530ed9f0e/eckitlib-2.0.7.19-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5639123c5a3c645d8bcd6bb2fd29eb321675c0af7624a369a8804798abc6364b", size = 7040518 }, + { url = "https://files.pythonhosted.org/packages/4f/f5/4b2c6ac00ea46d1e7f6c680979720d51e05bce6182c61df24b8a2a75326d/eckitlib-2.0.7.19-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:725d8abc7c5eb039788fd0df28aea7d2c0739ff53861f6d00ca9c319dbd321b0", size = 7169837 }, + { url = "https://files.pythonhosted.org/packages/1a/46/9ccdf223a33c07fe27426c01dcc931316a3531881e4873c24d40e4f09dfd/eckitlib-2.0.7.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:5b6518c555f598fef15915c52d07797fe85aa9a09d89f6e9274c5f549c427fb1", size = 2480047 }, + { url = "https://files.pythonhosted.org/packages/f2/49/31d03b6fe1270e055c521d4a350fed77afd81abe5711f254058e4c631579/eckitlib-2.0.7.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:04c4ec2b96b9da37406925b418e752195e4f782d77148c4654f105984525dd0f", size = 2610842 }, + { url = "https://files.pythonhosted.org/packages/32/13/bf8bcf039f81c7e74f68808c6fe1eb0ba57812aaa0e16f0f5644ef7f81ce/eckitlib-2.0.7.19-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13c7acfe19da5d25e9c5f7e6fb806deca39ac7adea31958d118799a58e8739bd", size = 7040512 }, + { url = "https://files.pythonhosted.org/packages/b4/64/9dc3e3a669f251707487308d0e5efaa0e6755a4da8e3566b52a509658a05/eckitlib-2.0.7.19-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2876c3fd3b2c3140a4c5c3a95c63f6d04b874a6a2b62d0d06c8d6f22375c531", size = 7169835 }, + { url = "https://files.pythonhosted.org/packages/b4/b9/fa7908d4b208d1635c13c06ea96183a25c89373ee536a746f709efb5275b/eckitlib-2.0.7.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:f4605a53d939c24083af431e570466be14f42ff6ae7395a7fa5691768ea02e5b", size = 2480048 }, + { url = "https://files.pythonhosted.org/packages/d9/d3/77779e785dfa6f90fea78ece275cbdd43fc19da39bb84c1b09f1db528881/eckitlib-2.0.7.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:a34d28f3b8903527f1693327982ad4539c228c360c24bcd2b3e357ed9b267d0a", size = 2610838 }, + { url = "https://files.pythonhosted.org/packages/5f/d5/0a8b7de8471eb8cda8d4c5680e983e24434391e587b48234f6e92461e790/eckitlib-2.0.7.19-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54fefebd47b7cadef235b2d1082e34ad9aabaf1cbee97ca9f7e72f99ea69685c", size = 7040523 }, + { url = "https://files.pythonhosted.org/packages/61/e2/af1b905dc937bbc44d92c3d6a15d2fdab4b2d228b99583952844a317f760/eckitlib-2.0.7.19-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2479b853bb7b1dc14d5c710a9803e08bc6b3784ed721deec9799dd51b59cce76", size = 7169842 }, +] + +[[package]] +name = "ecmwf-api-client" +version = "1.6.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/14/b5/837fa2daee28118c592cd003b910433894008d5a1f9e3bed9f2c3cabe34b/ecmwf_api_client-1.6.5.tar.gz", hash = "sha256:1fc0eba27163686b7fba5da027cc5dc0a361f75b652508fa7805f50599368b1c", size = 12974 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/f3/7a5832d5fb8e16db4d1f3be58fcb2537e68ccffea1270bff8b65de7c85b5/ecmwf_api_client-1.6.5-py3-none-any.whl", hash = "sha256:82678c2c18083b44be74b23e2a7e82d2343061966c0bf3a895272b9e9a802836", size = 13495 }, +] + +[[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 = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, +] + +[[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 = "fdb5lib" +version = "5.21.0.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eccodeslib" }, + { name = "eckitlib" }, + { name = "metkitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/f6/f88797370f7f39e29e6d5e062360095f52143338e3976ab7d5e59f268c89/fdb5lib-5.21.0.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:a3ec38961d068d2e7be20d720ca99eb811f9a0d20aafd38a332e9a9939b4fd03", size = 1402489 }, + { url = "https://files.pythonhosted.org/packages/7f/73/381fcb49317b23e245c1027bfb9b7c377c25c96309ca5de92ebb50de4a8d/fdb5lib-5.21.0.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:f24ac5d5bada2aa878afaf9330a7e0bf0fd6d4560718fe236a9e3a3b8f836c0f", size = 1436517 }, + { url = "https://files.pythonhosted.org/packages/5f/1a/56c2c33cca629cb4a3549eda9bcb880b11b12379955de6a2b801a930c657/fdb5lib-5.21.0.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6ddcb23d4dc966e39cfe00b32e03fc689085f4da3ad87e6506d9ad3224711113", size = 1719622 }, + { url = "https://files.pythonhosted.org/packages/96/d6/b859109a3c5d7413b460dce9cd9544dd9e1d2f734e421cf55fbeb7e45bfa/fdb5lib-5.21.0.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:2efc546263e5f339454552db1a1bcd42b490d10f8653cff84fa213af36f664f8", size = 1703409 }, + { url = "https://files.pythonhosted.org/packages/3e/3f/7d89b179dee7c4ce63366b59a7313fa20e93c32e9a7966230856dd8591c0/fdb5lib-5.21.0.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:ffc2412194abeec3cd1d2d2f022a133134858cb0dfe34a47b9a307945472ea32", size = 1402510 }, + { url = "https://files.pythonhosted.org/packages/37/93/83ae989626a142b25df81e8b6239583864d8ca395e8dfee68d544d901465/fdb5lib-5.21.0.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:ec40d1d7ba88f0251fb44802b0b0cda3d94367b5b825c9684c267f9dc5f99bd9", size = 1436540 }, + { url = "https://files.pythonhosted.org/packages/e6/b9/8c3e49bf3eea222eb50d8e38b46171ec1bfc8b985f28a40b1468d69c450f/fdb5lib-5.21.0.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:fbaf588a7ab781c0fd33d08e42b17a61312560d289e834db62cf8aefce93d896", size = 1719647 }, + { url = "https://files.pythonhosted.org/packages/23/16/d80e6a60f4336b098733b712d32303d4cf6ef824e3829cd00ab1a7eebc5d/fdb5lib-5.21.0.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:847c9ec9d576484a31380f17a6d9a7cbd16a004fa902cb078e92d5fa3ffc4ec0", size = 1703429 }, + { url = "https://files.pythonhosted.org/packages/a3/01/ecc5c80423b1fd64d074caa49e7d687b8f1f629b252b6949d5862597fc05/fdb5lib-5.21.0.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:bbf5f7b501a809e7d818997c09ad40ecfa07c70a55e6861e95fe0e8b6aa83cee", size = 1402512 }, + { url = "https://files.pythonhosted.org/packages/44/7f/6a0c0435b3f200ef3565f2a4ab7ac5518497c380d7ab15b1d6347248fe6b/fdb5lib-5.21.0.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:a8e5f9024344ea362df1f951abb117beb585ed9082c930c5182f8651829abfb5", size = 1436538 }, + { url = "https://files.pythonhosted.org/packages/3a/71/89ddad61214fe264a8711ba382597aa22ea233c2bd33b14c0f5ec9846d68/fdb5lib-5.21.0.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6302c77080e2276dd62495b6a0cb3f7dee6a0f6538df42245537b5cd14559c53", size = 1719643 }, + { url = "https://files.pythonhosted.org/packages/30/7e/747d4d61779b3018dd3fa909fc854f91d680d17a5b40e89b6891e21ac534/fdb5lib-5.21.0.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f49d5e821f478747afd872d6f3de262dcc3da4c5f63263762900a798f806b0ae", size = 1703428 }, + { url = "https://files.pythonhosted.org/packages/91/47/7277d97cda6d068aa9b223db8c08263d02831b6164af70093ee305ab6e43/fdb5lib-5.21.0.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:d954f328faa157f7c1d444d05c8bfcd15e5d4d3c40b749a64dd51cb52ee6cad5", size = 1402511 }, + { url = "https://files.pythonhosted.org/packages/6b/9b/aa69a3f820bb178facc47e5a2bec8ed67caf968d20fa6dc7972cadd571bb/fdb5lib-5.21.0.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:5b640ae934e407f54531961483562073ceb8abb73c05df9f378fdc545b870e55", size = 1436541 }, + { url = "https://files.pythonhosted.org/packages/3c/ce/4bdb483925b7d49a3d42d36ad77972ac22746d5521e424c1b517d6c3c137/fdb5lib-5.21.0.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5bf91a58b9ff1438bf5f1df7f7f2d79118b1a4bc82b7499bc2a0be6e5d0a3599", size = 1719643 }, + { url = "https://files.pythonhosted.org/packages/d4/d9/b84beb8d5c01875c5582aa0195f29fb71643b5f26b8004b20c490eef514b/fdb5lib-5.21.0.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ca9bcdf50a84dc1ba91f7b12b8b014436d4b4883a8e9ce3c0a32e27d76efde00", size = 1703431 }, + { url = "https://files.pythonhosted.org/packages/8b/53/b3137235cc79e304c7b6262759426f98a3497743475431d903762e4b21f1/fdb5lib-5.21.0.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:05e417f5e5ffd944df5d2d64b928ac844fa0f3ad0f5e052ab3a6d1ad3698fd51", size = 1402512 }, + { url = "https://files.pythonhosted.org/packages/ec/c9/e60abdd7f628af79b4decdf7e271d19f9a226dc4fc951336c5caf185eb7d/fdb5lib-5.21.0.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:67137984a7bbe042c1855b003b8a5dd6ffc42633e0e73b912a73f8e1ae5e7c19", size = 1436538 }, + { url = "https://files.pythonhosted.org/packages/ea/e2/0ba8242c65fa9e14b2a1dc21c610e702e67b859077c2a65b36d254542e9e/fdb5lib-5.21.0.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:1ced95b7ed00119d9c9bed3b3ca59fe3f56a4126191a76a17e3aafe9b63bd051", size = 1719643 }, + { url = "https://files.pythonhosted.org/packages/69/8b/160eb2cffcdff11cd9cfacaa8fdf769fcd331f092d742c5fb95d8e689d21/fdb5lib-5.21.0.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:6f73811ca8a5d3ea5d3735347decc27ca18592e34c5ec6d096eee3c8bd1facc2", size = 1703430 }, +] + +[[package]] +name = "filelock" +version = "3.29.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/f9/f38573ed5844586db374d085911740a501ccfa373b455fc9413f09f85237/filelock-3.29.1.tar.gz", hash = "sha256:d97e6b1b9757569626c58caa07dc4beb1613f4a2938b1e8cc81afca398906c9e", size = 59335 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/a0/614c5fe402fd88951df45f4dda2fa3b4e17a99ecd92340771929169b3b95/filelock-3.29.1-py3-none-any.whl", hash = "sha256:85199dfd706869641b72b2e8955d5416a4b2b7dc4b0e8e6d97b4cc1299a6983b", size = 40750 }, +] + +[[package]] +name = "findlibs" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/ef/345b0f88b8e9d9e12051142a9cdcf590bf70206d20d81c3f773ade8d9e32/findlibs-0.1.2.tar.gz", hash = "sha256:1f56d220c69686392ebdc4c65b32ee344818bca633643a8c97592957d1728122", size = 11302 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/ff/76dd547e129206899e4e26446c3ca7aeaff948c31b05250e9b8690e76883/findlibs-0.1.2-py3-none-any.whl", hash = "sha256:5348bbc7055d2a505962576c2e285b6c0aae6d749f82ba71296e7d41336e66e8", size = 10707 }, +] + +[[package]] +name = "fire" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "termcolor" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/00/f8d10588d2019d6d6452653def1ee807353b21983db48550318424b5ff18/fire-0.7.1.tar.gz", hash = "sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf", size = 88720 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/4c/93d0f85318da65923e4b91c1c2ff03d8a458cbefebe3bc612a6693c7906d/fire-0.7.1-py3-none-any.whl", hash = "sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882", size = 115945 }, +] + +[[package]] +name = "flexcache" +version = "0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263 }, +] + +[[package]] +name = "flexparser" +version = "0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625 }, +] + +[[package]] +name = "frozendict" +version = "2.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/bd/920b1c5ff1df427a5fc3fd4c2f13b0b0e720c3d57fafd80557094c1fefe0/frozendict-2.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bd37c087a538944652363cfd77fb7abe8100cc1f48afea0b88b38bf0f469c3d2", size = 59848 }, + { url = "https://files.pythonhosted.org/packages/a6/9c/e3e186925b1d84f816d458be4e2ea785bbeba15fd2e9e85c5ae7e7a90421/frozendict-2.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2b96f224a5431889f04b2bc99c0e9abe285679464273ead83d7d7f2a15907d35", size = 38164 }, + { url = "https://files.pythonhosted.org/packages/10/4c/af931d88c51ee2fcbf8c817557dcb975133a188f1b44bfa82caa940beeab/frozendict-2.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5c1781f28c4bbb177644b3cb6d5cf7da59be374b02d91cdde68d1d5ef32e046b", size = 38341 }, + { url = "https://files.pythonhosted.org/packages/ba/7a/c1fd4f736758cf93939cc3b7c8399fe1db0c121881431d41fcdbae344343/frozendict-2.4.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8a06f6c3d3b8d487226fdde93f621e04a54faecc5bf5d9b16497b8f9ead0ac3e", size = 112882 }, + { url = "https://files.pythonhosted.org/packages/bd/b0/304294f7cd099582a98d63e7a9cec34a9905d07f7628b42fc3f9c9a9bc94/frozendict-2.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b809d1c861436a75b2b015dbfd94f6154fa4e7cb0a70e389df1d5f6246b21d1e", size = 120482 }, + { url = "https://files.pythonhosted.org/packages/7e/61/689212ea4124fcbd097c0ac02c2c6a4e345ccc132d9104d054ff6b43ab64/frozendict-2.4.7-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75eefdf257a84ea73d553eb80d0abbff0af4c9df62529e4600fd3f96ff17eeb3", size = 113527 }, + { url = "https://files.pythonhosted.org/packages/5c/9b/38a762f4e76903efd4340454cac2820f583929457822111ef6a00ff1a3f4/frozendict-2.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a4d2b27d8156922c9739dd2ff4f3934716e17cfd1cf6fb61aa17af7d378555e9", size = 130068 }, + { url = "https://files.pythonhosted.org/packages/cf/41/9751e9ec1a2e810e8f961aea4f8958953157478daff6b868277ab7c5ef8c/frozendict-2.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ebd953c41408acfb8041ff9e6c3519c09988fb7e007df7ab6b56e229029d788", size = 126184 }, + { url = "https://files.pythonhosted.org/packages/71/be/b179b5f200cb0f52debeccc63b786cabcc408c4542f47c4245f978ad36e3/frozendict-2.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c64d34b802912ee6d107936e970b90750385a1fdfd38d310098b2918ba4cbf2", size = 120168 }, + { url = "https://files.pythonhosted.org/packages/25/c2/1536bc363dbce414e6b632f496aa8219c0db459a99eeafa02eba380e4cfa/frozendict-2.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:294a7d7d51dd979021a8691b46aedf9bd4a594ce3ed33a4bdf0a712d6929d712", size = 114997 }, + { url = "https://files.pythonhosted.org/packages/29/63/3e9efb490c00a0bf3c7bbf72fc73c90c4a6ebe30595e0fc44f59182b2ae7/frozendict-2.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f65d1b90e9ddc791ea82ef91a9ae0ab27ef6c0cfa88fadfa0e5ca5a22f8fa22f", size = 117292 }, + { url = "https://files.pythonhosted.org/packages/5e/66/d25b1e94f9b0e64025d5cadc77b9b857737ebffd8963ee91de7c5a06415a/frozendict-2.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:82d5272d08451bcef6fb6235a0a04cf1816b6b6815cec76be5ace1de17e0c1a4", size = 110656 }, + { url = "https://files.pythonhosted.org/packages/a3/5d/0e7e3294e18bf41d38dbc9ee82539be607c8d26e763ae12d9e41f03f2dae/frozendict-2.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5943c3f683d3f32036f6ca975e920e383d85add1857eee547742de9c1f283716", size = 113225 }, + { url = "https://files.pythonhosted.org/packages/e0/fb/b72c9b261ac7a7803528aa63bba776face8ad8d39cc4ca4825ddaa7777a9/frozendict-2.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:88c6bea948da03087035bb9ca9625305d70e084aa33f11e17048cb7dda4ca293", size = 126713 }, + { url = "https://files.pythonhosted.org/packages/c7/d9/e13af40bd9ef27b5c9ba10b0e31b03acac9468236b878dab030c75102a47/frozendict-2.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ffd1a9f9babec9119712e76a39397d8aa0d72ef8c4ccad917c6175d7e7f81b74", size = 114166 }, + { url = "https://files.pythonhosted.org/packages/40/2b/435583b11f5332cd3eb479d0a67a87bc9247c8b094169b07bd8f0777fc48/frozendict-2.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0ff6f57854cc8aa8b30947ec005f9246d96e795a78b21441614e85d39b708822", size = 121542 }, + { url = "https://files.pythonhosted.org/packages/38/25/097f3c0dc916d7c76f782cb65544e683ff3940a0ed997fc32efdb0989c45/frozendict-2.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d774df483c12d6cba896eb9a1337bbc5ad3f564eb18cfaaee3e95fb4402f2a86", size = 118610 }, + { url = "https://files.pythonhosted.org/packages/61/d1/6964158524484d7f3410386ff27cbc8f33ef06f8d9ee0e188348efb9a139/frozendict-2.4.7-cp310-cp310-win32.whl", hash = "sha256:a10d38fa300f6bef230fae1fdb4bc98706b78c8a3a2f3140fde748469ef3cfe8", size = 34547 }, + { url = "https://files.pythonhosted.org/packages/94/27/c22d614332c61ace4406542787edafaf7df533c6f02d1de8979d35492587/frozendict-2.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:dd518f300e5eb6a8827bee380f2e1a31c01dc0af069b13abdecd4e5769bd8a97", size = 37693 }, + { url = "https://files.pythonhosted.org/packages/bc/d8/9d6604357b1816586612e0e89bab6d8a9c029e95e199862dc99ce8ae2ed5/frozendict-2.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:3842cfc2d69df5b9978f2e881b7678a282dbdd6846b11b5159f910bc633cbe4f", size = 35563 }, + { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264 }, +] + +[[package]] +name = "fsspec" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402 }, +] + +[[package]] +name = "humanize" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/66/a3921783d54be8a6870ac4ccffcd15c4dc0dd7fcce51c6d63b8c63935276/humanize-4.15.0.tar.gz", hash = "sha256:1dd098483eb1c7ee8e32eb2e99ad1910baefa4b75c3aff3a82f4d78688993b10", size = 83599 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203 }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455 }, +] + +[[package]] +name = "importlib-metadata" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp", marker = "python_full_version < '3.14'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789 }, +] + +[[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 = "ipython" +version = "8.39.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version < '3.11'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "jedi", marker = "python_full_version < '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, + { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "stack-data", marker = "python_full_version < '3.11'" }, + { name = "traitlets", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849 }, +] + +[[package]] +name = "ipython" +version = "9.14.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version >= '3.11'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, + { name = "jedi", marker = "python_full_version >= '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, + { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, + { name = "psutil", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten'" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "stack-data", marker = "python_full_version >= '3.11'" }, + { name = "traitlets", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/23/3a27530575643c8bb7bfc757a28e2e7ef80092afbf59a2bc5716320b6602/ipython-9.14.1.tar.gz", hash = "sha256:f913bf74df06d458e46ced84ca506c23797590d594b236fe60b14df213291e7b", size = 4433457 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/22/58818a63eaf8982b67632b1bc20585c811611b15a8da19d6012323dc76a5/ipython-9.14.1-py3-none-any.whl", hash = "sha256:5d4a9ecaa3b10e6e5f269dd0948bdb58ca9cb851899cd23e07c320d3eb11613c", size = 627770 }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments", marker = "python_full_version >= '3.11'" }, +] +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 = "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 = "jsonpickle" +version = "4.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/c0/dde9b4b42cc415b9579573f967f12efbb034e427a2a37e93ad5139891d87/jsonpickle-4.1.2.tar.gz", hash = "sha256:8afed18aa189fd81e2e833b426bb4af485594921f0b1d36c2001fc5637a2f210", size = 319120 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/7b/fd3c7a09649aea9da1d3587aea624d8f9b29963dfd84a1bdb2aa93b36dac/jsonpickle-4.1.2-py3-none-any.whl", hash = "sha256:7ffe34426bc797684dbf1dc84185558bd864cd25b1ff5fb01b7405e392d0a937", size = 47203 }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +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]] +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 = "locket" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398 }, +] + +[[package]] +name = "lru-dict" +version = "1.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/6c/396716746ca46fd2ac52a7a6cbd7b4cf848e5d430f431dacd209290dfa71/lru_dict-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3766e397aa6de1ca3442729bc1fa75834ab7b0a6b017e6e197d3a66b61abde59", size = 16757 }, + { url = "https://files.pythonhosted.org/packages/2d/93/c163ffb71beb18f18459461658fd16c8b8c86aed858f2dc7c7e636318f61/lru_dict-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658e152d3a4ad0e1d75e6f53b1fa353779539920b38be99f4ea33d3bad41efdb", size = 11243 }, + { url = "https://files.pythonhosted.org/packages/44/e3/fa96d54032531c67eeacf0ab6f56e10e05f25d382a29f6a381ac8ecf3814/lru_dict-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:98af7044b5c3d85a649e1afb8891829ff5210caf9143acc741b3e98ab1b66ff6", size = 11726 }, + { url = "https://files.pythonhosted.org/packages/7a/23/bae4f32fb014fd2dc5512e9267a3b1ec34c3b55d16a2202a1193d9ae635d/lru_dict-1.4.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:906d99705b79a00b5668bdb8782ad823ccc8d26e1fc6b56327ae469a8d12e9b4", size = 29823 }, + { url = "https://files.pythonhosted.org/packages/9f/3b/8c3d1e6a188ce65e0161b86dbd18f2290950baf1e9e28e4948fc123d9a67/lru_dict-1.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:885643fd968336d8652fddb0778184e2eeff7b7aebced6de268af6d6caef42d5", size = 30812 }, + { url = "https://files.pythonhosted.org/packages/ed/11/7f061507eda944150ed959e99a3700ce6358c1241c7f697b2f1ade48646b/lru_dict-1.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:24c779334bed82f1a7eb2d1ebcba2b7aa9a1555d40a3b53e05eb6b9dfcb0609c", size = 32480 }, + { url = "https://files.pythonhosted.org/packages/75/e7/94ac30d33c6f8a8eca5d7e81c0ce26fb7b79b18ea65accdcb2a652b19abc/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6099e2ecb118dfeae4a197bfcc702ea5841bfd86f19d1b340e932d0f5c47c10", size = 30199 }, + { url = "https://files.pythonhosted.org/packages/4a/81/c93ee7365db67dfb497e6218aa0395b9ec878c07c732d348bfbd651bcc95/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e0db4f3105108598749550e639b283b07df0bb91cac3b47e86ffebcab721cc7", size = 31489 }, + { url = "https://files.pythonhosted.org/packages/9f/0b/634e8b4eca2497647f802bbe1ae3f0e1e9a0de1d555cf77c022527b2682f/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e21f67ba374d1945051b547e719d44a8c7880718f67a15a03e7a12e1d12ea96b", size = 29522 }, + { url = "https://files.pythonhosted.org/packages/de/cc/591b959d77cc0e0ac016f11baf26d03d566bb88a53fa9b41e157bc68bc4b/lru_dict-1.4.1-cp310-cp310-win32.whl", hash = "sha256:f309b4018dd41f33bf3bd4cc0f62421da8bcca513ea044dbb22f3cd029935012", size = 13066 }, + { url = "https://files.pythonhosted.org/packages/d9/bc/c14b67fdbdb5a2a81cfb907ea8a8b0c9da5aed899f34921ebf097e22a966/lru_dict-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:e84cd1065955897de01f1fb4cbd6f87cab7706e920283bb98c27341d76dd9a8d", size = 14008 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760 }, + { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249 }, + { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728 }, + { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795 }, + { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807 }, + { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437 }, + { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168 }, + { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454 }, + { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574 }, + { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031 }, + { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007 }, + { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683 }, + { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216 }, + { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687 }, + { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960 }, + { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882 }, + { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268 }, + { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156 }, + { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395 }, + { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591 }, + { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119 }, + { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109 }, + { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248 }, + { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243 }, + { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938 }, + { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261 }, + { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801 }, + { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688 }, + { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214 }, + { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689 }, + { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034 }, + { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919 }, + { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334 }, + { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211 }, + { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461 }, + { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651 }, + { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120 }, + { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112 }, + { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119 }, + { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435 }, + { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988 }, + { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733 }, + { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222 }, + { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733 }, + { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251 }, + { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405 }, + { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135 }, + { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620 }, + { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077 }, + { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905 }, + { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435 }, + { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423 }, + { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184 }, + { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459 }, + { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938 }, + { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389 }, + { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706 }, + { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892 }, + { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254 }, + { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422 }, + { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909 }, + { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816 }, + { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204 }, + { url = "https://files.pythonhosted.org/packages/ec/de/18ac3957e1aa6674a0a828748c819265f79b524ff30cbb0ac7f08ab786c8/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cc9dd191870555624bbf3903c8afa3f01815ca3256ed8b35cb323f0db3ce4f98", size = 10467 }, + { url = "https://files.pythonhosted.org/packages/0c/53/2a0bedaa64950cc56ade72e2f5a292318473585d9a3adc797d13b38082e7/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:afdf92b332632aa6e4b8646e93723f50f41fece2a80a54d2b44e8ac67f913ceb", size = 10871 }, + { url = "https://files.pythonhosted.org/packages/4e/e2/d5ea49d62ea142559fd9cafd8505d4a4f87a1d81953a9c99fa61e7ccbd6b/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6770adafae25663b682420891a10a5894595f02b1e4d87766f7adc8e56e72a", size = 12969 }, + { url = "https://files.pythonhosted.org/packages/a2/67/0672caac9a04dc9011f7a27fc2ec2003f0bfa008070b29940d05b4dae56a/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:018cd3b41224ca81eb83cdf6db024409a920e5c1d3ce4e8b323cb66e24a73132", size = 13959 }, + { url = "https://files.pythonhosted.org/packages/e3/7e/313385214a5011cf9fe8376928f66f70bfedc48d8f7ab424292224ed4907/lru_dict-1.4.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:781dbcf0c83160e525482a4ebcd7c5065851a6c7295f1cda78248a2029f23f39", size = 14084 }, + { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384 }, + { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822 }, + { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968 }, + { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904 }, + { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062 }, +] + +[[package]] +name = "markdown" +version = "3.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180 }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687 }, +] + +[[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/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631 }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057 }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050 }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681 }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705 }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524 }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282 }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745 }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571 }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056 }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932 }, + { 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/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615 }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020 }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332 }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947 }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962 }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760 }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529 }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015 }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622 }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374 }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980 }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990 }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784 }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588 }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041 }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658 }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066 }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639 }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569 }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284 }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801 }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769 }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642 }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619 }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408 }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005 }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048 }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821 }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606 }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043 }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661 }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069 }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670 }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598 }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261 }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835 }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733 }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672 }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534 }, +] + +[[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 = "metkitlib" +version = "1.17.3.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eccodeslib" }, + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/2a/8a94fd5542fabb9c760730196a1dabc40b1cf2363c27c1423f17ae7cd9e7/metkitlib-1.17.3.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:dd6e5ee217de4554f15bed65a84f9a6526743c09ed06ca712af34d29e8b063fd", size = 886921 }, + { url = "https://files.pythonhosted.org/packages/74/7a/be861714c6004a8d9b928a35e592da68ac02deadfde719783a2e9d9cf058/metkitlib-1.17.3.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:a3fe0094efb44e1a89f26dc7aef198d579aea52eadfa70a025c346821d43e113", size = 925708 }, + { url = "https://files.pythonhosted.org/packages/56/41/076558ca2b208d106b64135c9382b288391957a8d997b34cedcddf6aebcd/metkitlib-1.17.3.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:90c6c940c28438e5e8a01d8111b2b0856221858c53d1bde92ad2404ae24e87fb", size = 976933 }, + { url = "https://files.pythonhosted.org/packages/92/bb/339684b07961891555f71ff1d2411055058a4a5a91b03b553255f86c90bd/metkitlib-1.17.3.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:23c177b69358627c2bc9e9f4ceab756fc719f4519d9184986b5e2afac0809d31", size = 1008998 }, + { url = "https://files.pythonhosted.org/packages/d4/de/b7f2d25236a214508a4599774731b442ddd26ae152efb885b448e0e29cc2/metkitlib-1.17.3.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:dc79e341081d28605b84bf21c01721f3edeccd6191d81800b2102f88f7ef2793", size = 886920 }, + { url = "https://files.pythonhosted.org/packages/84/f0/b03171cbc8b39e388dab87ac7577446dd60443133d90ba2217cfdf8224d3/metkitlib-1.17.3.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6f6fdddd6c1168608eaee8f099cd51eafbacaba65875586bf0b47c47ddceed07", size = 925710 }, + { url = "https://files.pythonhosted.org/packages/9d/30/53737da681ef5970543f423de6a57cc396fd52b9f3fbd8d165d5d573bffc/metkitlib-1.17.3.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:74102e39a1070f2534c4c9bfd30d5ef6903192af30f6101e536bb78963567112", size = 976933 }, + { url = "https://files.pythonhosted.org/packages/ba/05/9015fd8e06d041da30b0f55a4066094b11a826fabd1be5b76a9873d97f25/metkitlib-1.17.3.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f59118ae121b550cfecec2ad263bb157ed69ec3638a940c271765dd0121da13e", size = 1008992 }, + { url = "https://files.pythonhosted.org/packages/c3/c4/50937a1bb68239da55d4ac51664150901a056340a4041d3df61c70dc3991/metkitlib-1.17.3.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:421217f765df35a8f9c5ace6eb1496ddf7fa92f2c8cfd6dbac9a1cf5b6ea287e", size = 886922 }, + { url = "https://files.pythonhosted.org/packages/44/18/12a7915c826422143dbeaeec3f21e39456b434f7ce5b56de960c8c9b216b/metkitlib-1.17.3.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:34f5c2ee4f8aef1ecd71b2fa3d51041744f8647062fc761a375950075a99d37b", size = 925709 }, + { url = "https://files.pythonhosted.org/packages/5b/08/321b8e78ec31921a5ccb1d46bc20a1749c0dc2a8afd1a54ad14ead7dffa0/metkitlib-1.17.3.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f9a0dada3b594c2b8f40f24f26c3c56780eade207f1f5cfa1a494b71fccca5d2", size = 976934 }, + { url = "https://files.pythonhosted.org/packages/48/a2/73077d2f9df1357312336e912efd5710b37eef57a7868a461003a81ca870/metkitlib-1.17.3.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f418c389b2c2cd7306a2bb1387bda3161a89359d04b27a047489f59968756b97", size = 1008999 }, + { url = "https://files.pythonhosted.org/packages/74/42/7111e3cac6b01800d4af7a13bffdb718a735382aa5431a7d6b13a75e73b5/metkitlib-1.17.3.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:ce48299f6fca69f13c32bbb41f9a6f4b91dda247e43968308b3b2818df5225af", size = 886923 }, + { url = "https://files.pythonhosted.org/packages/4d/5a/8de478696d6ac70cc2e61a0cf232d66b0a21e3ca4d2b234efbae9e296858/metkitlib-1.17.3.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:da04bbb344ec1a73e560e5a0f91b985e1a6728df009d51158a32342536b3fcf3", size = 925711 }, + { url = "https://files.pythonhosted.org/packages/d4/90/07e3e48504f7b78f242d79eca82a977ba115e211e52ec3d8033fcbeb0dc2/metkitlib-1.17.3.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:d43636c336f4b06061139749ec82b0cdc92352eacc489156db8e2b38a9a790f3", size = 976934 }, + { url = "https://files.pythonhosted.org/packages/66/e8/72d59212fd9f5ee937c96614b75f87d329ec7df4c793e5f70dd7ad0d6fdb/metkitlib-1.17.3.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:788131841de50573e2afe93bff6fae3c3276a2fada14b4a8fbb89bd5381ef27a", size = 1008997 }, + { url = "https://files.pythonhosted.org/packages/b0/51/1914a8250f4651d6b7141245f310aac5018eeb5e172ef941898b3bf4395a/metkitlib-1.17.3.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:a29017bbc5e2ba9123e820035d88648bda690290544e24ff7269b41c9ca3d8bd", size = 886921 }, + { url = "https://files.pythonhosted.org/packages/bc/5c/274d066aa7b95f376616473518563c0c9b307ab9b3eb48b8438eb61df4ad/metkitlib-1.17.3.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:887099af68d9c1a62a588bbeaa0808bc66b618dc4a0b37389765c15d0402da7c", size = 925710 }, + { url = "https://files.pythonhosted.org/packages/a7/10/5308a62e89ff6987392661f6831edcf176edf928a149d63b3d4ee5797091/metkitlib-1.17.3.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:fd79257d91c26dcc8f98f9410ec8d31e420d063bdcfdc576de6cad0845a45690", size = 976934 }, + { url = "https://files.pythonhosted.org/packages/17/ab/87183088c3a7bce34928b2ed40fde768b199714d718394b3f889aed89f3a/metkitlib-1.17.3.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:25dc227e09474ede0ef50d40416a0ca3aa93aced4121065238e406c6d3a448dc", size = 1008998 }, +] + +[[package]] +name = "mir-python" +version = "1.28.1.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "findlibs" }, + { name = "mirlib" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pyyaml" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/1f/89eac0ca0db436135051f1540db0772b1ac79cd2f583db0acee2e94cb255/mir_python-1.28.1.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:ad75301aca9b1f588145bc5c12fc3c905727be4592765a65b5ce1ad401e350fa", size = 141581 }, + { url = "https://files.pythonhosted.org/packages/d6/d5/555aa2543723db7c42fc2e27f3222533f466531d35e01bf377dd668b7406/mir_python-1.28.1.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:58ac2805f84043b74b77c04ec3bb3beaae161e94924961aa93b0c87c9ea4b436", size = 145420 }, + { url = "https://files.pythonhosted.org/packages/0d/61/5e9ebff32b30e8bd78835caf8b3f5d5820ed007e1ccfcec0a2569692c355/mir_python-1.28.1.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:608ef7cc47603cc4370ee8c6414de75ac3481f77328dd7c9025ecdb3c9b4a42d", size = 1145577 }, + { url = "https://files.pythonhosted.org/packages/99/af/edeb5897f533166d9be87f2714d2032017680f577196dc6d9c87a679490f/mir_python-1.28.1.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:5bdaf22f53c3d995f1826e60d19bcfe9b2bfca007ef47763f0ec4e68de482cf0", size = 1159308 }, + { url = "https://files.pythonhosted.org/packages/70/dd/e4b7489dad09cd7760d913fa4f53717d98914fc32242e9fc9fbdbd6ef9e1/mir_python-1.28.1.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:5150f106b893f65546b6e6db931c4c695b54f853a573528cdd70e5d4c5805208", size = 140863 }, + { url = "https://files.pythonhosted.org/packages/f5/c5/82826c8a8f006ce4081174d64cb18303deb6d2c8f57f8d657e187af3275b/mir_python-1.28.1.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:b02bfbc40a8e77672eaa751f63dc37a44392f1244fda22ca4e0e5ffc6876db5a", size = 144561 }, + { url = "https://files.pythonhosted.org/packages/8c/eb/68f96ad53de7ef44670e3a312ef85127f3c2f1aad9e871b5a684e57bec2b/mir_python-1.28.1.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:292d964a558c4bc4a5fa58669b036ae55aad110b15ccc53b297e28e353f1265f", size = 1186778 }, + { url = "https://files.pythonhosted.org/packages/69/57/2bf1d455113e59b7ede8b755f57044a0c9aa82a0f7e462e0011af405693b/mir_python-1.28.1.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:417b3f68362fbee94854158f4347ecdb32e566b75eb9dfafb41a6bd386a79041", size = 1199887 }, + { url = "https://files.pythonhosted.org/packages/eb/4a/9d763a7b8d30aee0d5a52e2edbd9e75b5710498d34a0b70faa1a05579b72/mir_python-1.28.1.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:42dad7d45c203d44b99d51f1fa393d4d5d181308d0e9e1a74f68fc08d92a473b", size = 142519 }, + { url = "https://files.pythonhosted.org/packages/6a/af/e3d633d118567d3990e9a43a2f429aec26af9f4837387ce2418b5c379999/mir_python-1.28.1.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:1e885d6bb37e747ff49d558e33ef4d244f9b6f05507e8ba7858ce930bb71b22f", size = 145872 }, + { url = "https://files.pythonhosted.org/packages/fb/1f/f1f76edeb467db6d1bb613af893a43537fdbf9f47f26962982d85a0cd0cd/mir_python-1.28.1.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:cfc37102ea8a42203b908804ec6dc89e64531ba50f1242a687490fc999b2211b", size = 1175100 }, + { url = "https://files.pythonhosted.org/packages/c0/90/7446a6508d5bfdd8d355c358fa487f0035b6ac2e1892040bd5be9e6198e9/mir_python-1.28.1.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c04eaf0b50c29803f894c1c67eb02fd2cc66d8b6ba370bf498617de9da75fee1", size = 1189717 }, + { url = "https://files.pythonhosted.org/packages/d2/bf/ab7961aaa53e709af0b696c82a0767615a850f0af920705c483f46c2b959/mir_python-1.28.1.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:a71d68c1aee8f45ea69b2c51ceab6291212a21691b90880bae52d6d25f63f450", size = 141722 }, + { url = "https://files.pythonhosted.org/packages/63/71/01505d2ea902d9447b97e79288bcde0d401b7693c969bd14aaf6d09da6fd/mir_python-1.28.1.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:5f694b72018351434ccf7ab9a5051c12caa98b2295c8b773b23972b6c726145e", size = 144978 }, + { url = "https://files.pythonhosted.org/packages/7f/45/a921f895389800256d2cbd7769ec500c89e7cb4167584d818b237afe6aab/mir_python-1.28.1.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2a693a2a3c64a0377f7e400da082c022f920f40a25c7f3e94f776d07245e7452", size = 1168121 }, + { url = "https://files.pythonhosted.org/packages/46/c8/500749c4f7552700d05d62ef38cf9b1157577b23cbb526746d7d03e65cb0/mir_python-1.28.1.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad899b55fadc56c75eb0c41b96ca2eff4ac5d6574a1f8393629d10a776a6f3e6", size = 1184198 }, + { url = "https://files.pythonhosted.org/packages/35/26/332e4614e601d71b3e6ab9b3d6b47843e039e646c297935b06e305fbe450/mir_python-1.28.1.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:86cb9a75fb944cb6610c3ae334bb39ea57a1885aab2b121a6bd4dafd00c097b4", size = 142697 }, + { url = "https://files.pythonhosted.org/packages/2c/0d/b52b55edf58087aa4b7b2254a9e38af3ba8db5e8a622652792d9eea96375/mir_python-1.28.1.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:cb23d96f8105e34f362e18bd26b68fd343c3c7ea1ea43e6ef262b801fd7c68f7", size = 145756 }, + { url = "https://files.pythonhosted.org/packages/a4/bb/2f045d18d425c5c92aa712349274bc1ee83b62e0a64de94648beaccdef72/mir_python-1.28.1.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:d52c14a54605c1ceeb0a35a711414e4cc7cd07e403d5ada39c4c2c781c4f79fc", size = 1169043 }, + { url = "https://files.pythonhosted.org/packages/b3/d9/e4f2dafdbdde7250d6abf0c2a8e799119f15807465aa2bf8d34f5d0fdb52/mir_python-1.28.1.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:8f5f5affd9c446d6c09dfb46c3ba9cfb4d10ea60ed039ef1f6eb5d477240df47", size = 1180946 }, +] + +[[package]] +name = "mirlib" +version = "1.28.1.19" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "atlaslib-ecmwf" }, + { name = "eccodeslib" }, + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/85/d8f15dc31c545f8a20082997f69d60fa54c6e5b1ae39da61906cf43691bf/mirlib-1.28.1.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:7a72ef4299b4e3a2631827621f29142788d7f2f1d15a824aeda8e25d3560e110", size = 1839754 }, + { url = "https://files.pythonhosted.org/packages/01/f5/4930b0b6c081b12b1440d84d875418c36be024d5e1dc1f2dd1cf2e67911c/mirlib-1.28.1.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:e048f99f6e3230744c15b86bcf56ad344ea9752a86546a86548783fd7b4318b1", size = 1941922 }, + { url = "https://files.pythonhosted.org/packages/b2/9f/4d85db16cdabeef4b008c3b6a2ad58908b595a98ada7484e7a9390805d87/mirlib-1.28.1.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:38fbf984e83fa5e8286f07cb76dc4f5866fee76d344a3b49432edaeeef470b22", size = 2443706 }, + { url = "https://files.pythonhosted.org/packages/16/c1/357651acae50d34c6016e5aa8f86b7379dde21475c8be21740a14a33eb93/mirlib-1.28.1.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:dc82741bb1494bb1b500f862c3117847f5fad0d03b90fae63ce04baaf1b5538e", size = 2418516 }, + { url = "https://files.pythonhosted.org/packages/a1/7e/5106ea2bdd18ef8c324e38c359f2b26e30335451c520965e0d03a627822f/mirlib-1.28.1.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:59c0a9e49d88aadd6e626a8769e2e7e703d92a282b3bfb65a6a586e0d43f9409", size = 1839746 }, + { url = "https://files.pythonhosted.org/packages/a5/98/de2820c9c3eadca3cf06cd287483e132136b40c26acd19c26a8ff1f1cbd5/mirlib-1.28.1.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6d0d449b798e932b52ee3625a4fa14a5bac662812fafb5b50f1e2d69a42ab195", size = 1941921 }, + { url = "https://files.pythonhosted.org/packages/49/78/299c8241a16719a261e01957b0d3e5b0bcaa71ad4abfe7d5d277fe8c0964/mirlib-1.28.1.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f6c3d71fd1709802df402dd14b60668a8332c9cbc1af2261f74d3d5cae6274", size = 2443710 }, + { url = "https://files.pythonhosted.org/packages/9d/2f/f3fa0d68f2d77709bc07db424cb21e779886fb0fd29976c37b76502684bb/mirlib-1.28.1.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d3f6feb07fb73828472be15f669702bd90bb052d7b5427ffad5dce0e97f9fa6d", size = 2418517 }, + { url = "https://files.pythonhosted.org/packages/d2/97/dd179df563d9eac4e57ed2a5a7abea6bd9d15b0d840c5f94aad25f6b1ad4/mirlib-1.28.1.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:372c274bd86c34dedf85f11c2a4c7fc1b586cd5f91d9ce6984fbd9c65aff94df", size = 1839749 }, + { url = "https://files.pythonhosted.org/packages/be/ef/36354f39c3738f8609a10b05cd399809ee9413e35344741527c7936675ab/mirlib-1.28.1.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:b00dcc29c707b5381976c0047b8cb0e227c0381060b82e3b23608160dd875991", size = 1941917 }, + { url = "https://files.pythonhosted.org/packages/1f/82/f0853ddfee8af8dcbb5a4214304d1c08440cae361ff987fa90ddf52d0590/mirlib-1.28.1.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:710c5299f03460f44e83ab2bd173df7feb55608e3d1dc6686ba4f36310744598", size = 2443710 }, + { url = "https://files.pythonhosted.org/packages/1b/3c/994cf75e8205875109e30eb9e3b0186844201a41f148d1e439015f9976a1/mirlib-1.28.1.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:094164a9111a4a8332aee1db3e0aa785f1e6ae454c339e82c426ea460eef1a34", size = 2418517 }, + { url = "https://files.pythonhosted.org/packages/c9/76/ec53ebf742cd79208cf8e8f238e10e713d89cbe1966164b5ca8ca37255aa/mirlib-1.28.1.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:d21713c705c2619f0be63f25eef24854016a1ae254200373fe676e7d7ad1cf4b", size = 1839750 }, + { url = "https://files.pythonhosted.org/packages/5a/a1/6550f9c3a04881759356b86117dec82f37a9c53182e9140ef029eba6bae6/mirlib-1.28.1.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:2574171f9bc743535422361cc2deb25fa1045971b58f10cfd7f38ba87faed6f7", size = 1941920 }, + { url = "https://files.pythonhosted.org/packages/87/22/f103b10a81b4046e45e193ff51b990f33769f8f3969372739622f8577209/mirlib-1.28.1.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b0f30dae074722c8db434242d70e760e914738d1e1fb30b038c9171b8ae88399", size = 2443707 }, + { url = "https://files.pythonhosted.org/packages/eb/71/cc15312e811801f3c10993e54031d97462acb49809fa3b8096c2e4a15413/mirlib-1.28.1.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:18f84daa2754c0c5a5f9e1dd1c387197984b3f08f4946aa768448afd17a85887", size = 2418518 }, + { url = "https://files.pythonhosted.org/packages/12/5f/5e8ce4994e7bb096cde22a016901c528594ac3eae96993a5a2741b30fe31/mirlib-1.28.1.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:ac8017ec5804869e52eab6c9c42ba1a2923a77c0e8693ce0ace6574f0a4d1683", size = 1839751 }, + { url = "https://files.pythonhosted.org/packages/87/57/500215c4fe724357b3178a2b4738d0c391a9d58dee96402c0d927caa61c8/mirlib-1.28.1.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:ec60910ecbc15dcba5cc8bce79b29e856f1ed7513b8b601d303e97306edba14c", size = 1941918 }, + { url = "https://files.pythonhosted.org/packages/20/e3/381435435440c3ad4ebcab54e15fa783e09d3c6f11fc5a10abbdf323ba5a/mirlib-1.28.1.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:5751e8c0eb21ed781ed6c12e2ed88bf31857a2594c865906d83d26f23ab9e0b0", size = 2443709 }, + { url = "https://files.pythonhosted.org/packages/49/f4/a96d8d2995ed1403ebc279a5fc890ab13b39409f285fba5cc74724a2792f/mirlib-1.28.1.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:e0f3efff8a890e3367ebb6ef2cf53ee0c6add87a0645be3c5a49086e04e113e1", size = 2418518 }, +] + +[[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/f5/a2/3b68a9e769db68668b25c6108444a35f9bd163bb848c0650d516761a59c0/msgpack-1.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0051fffef5a37ca2cd16978ae4f0aef92f164df86823871b5162812bebecd8e2", size = 81318 }, + { url = "https://files.pythonhosted.org/packages/5b/e1/2b720cc341325c00be44e1ed59e7cfeae2678329fbf5aa68f5bda57fe728/msgpack-1.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a605409040f2da88676e9c9e5853b3449ba8011973616189ea5ee55ddbc5bc87", size = 83786 }, + { url = "https://files.pythonhosted.org/packages/71/e5/c2241de64bfceac456b140737812a2ab310b10538a7b34a1d393b748e095/msgpack-1.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b696e83c9f1532b4af884045ba7f3aa741a63b2bc22617293a2c6a7c645f251", size = 398240 }, + { url = "https://files.pythonhosted.org/packages/b7/09/2a06956383c0fdebaef5aa9246e2356776f12ea6f2a44bd1368abf0e46c4/msgpack-1.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:365c0bbe981a27d8932da71af63ef86acc59ed5c01ad929e09a0b88c6294e28a", size = 406070 }, + { url = "https://files.pythonhosted.org/packages/0e/74/2957703f0e1ef20637d6aead4fbb314330c26f39aa046b348c7edcf6ca6b/msgpack-1.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:41d1a5d875680166d3ac5c38573896453bbbea7092936d2e107214daf43b1d4f", size = 393403 }, + { url = "https://files.pythonhosted.org/packages/a5/09/3bfc12aa90f77b37322fc33e7a8a7c29ba7c8edeadfa27664451801b9860/msgpack-1.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354e81bcdebaab427c3df4281187edc765d5d76bfb3a7c125af9da7a27e8458f", size = 398947 }, + { url = "https://files.pythonhosted.org/packages/4b/4f/05fcebd3b4977cb3d840f7ef6b77c51f8582086de5e642f3fefee35c86fc/msgpack-1.1.2-cp310-cp310-win32.whl", hash = "sha256:e64c8d2f5e5d5fda7b842f55dec6133260ea8f53c4257d64494c534f306bf7a9", size = 64769 }, + { url = "https://files.pythonhosted.org/packages/d0/3e/b4547e3a34210956382eed1c85935fff7e0f9b98be3106b3745d7dec9c5e/msgpack-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:db6192777d943bdaaafb6ba66d44bf65aa0e9c5616fa1d2da9bb08828c6b39aa", size = 71293 }, + { 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/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa", size = 81939 }, + { url = "https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:446abdd8b94b55c800ac34b102dffd2f6aa0ce643c55dfc017ad89347db3dbdb", size = 85064 }, + { url = "https://files.pythonhosted.org/packages/f2/60/a064b0345fc36c4c3d2c743c82d9100c40388d77f0b48b2f04d6041dbec1/msgpack-1.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c63eea553c69ab05b6747901b97d620bb2a690633c77f23feb0c6a947a8a7b8f", size = 417131 }, + { url = "https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42", size = 427556 }, + { url = "https://files.pythonhosted.org/packages/f5/87/ffe21d1bf7d9991354ad93949286f643b2bb6ddbeab66373922b44c3b8cc/msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9", size = 404920 }, + { url = "https://files.pythonhosted.org/packages/ff/41/8543ed2b8604f7c0d89ce066f42007faac1eaa7d79a81555f206a5cdb889/msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620", size = 415013 }, + { url = "https://files.pythonhosted.org/packages/41/0d/2ddfaa8b7e1cee6c490d46cb0a39742b19e2481600a7a0e96537e9c22f43/msgpack-1.1.2-cp312-cp312-win32.whl", hash = "sha256:1fff3d825d7859ac888b0fbda39a42d59193543920eda9d9bea44d958a878029", size = 65096 }, + { url = "https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1de460f0403172cff81169a30b9a92b260cb809c4cb7e2fc79ae8d0510c78b6b", size = 72708 }, + { url = "https://files.pythonhosted.org/packages/c5/31/5b1a1f70eb0e87d1678e9624908f86317787b536060641d6798e3cf70ace/msgpack-1.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:be5980f3ee0e6bd44f3a9e9dea01054f175b50c3e6cdb692bc9424c0bbb8bf69", size = 64119 }, + { url = "https://files.pythonhosted.org/packages/6b/31/b46518ecc604d7edf3a4f94cb3bf021fc62aa301f0cb849936968164ef23/msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4efd7b5979ccb539c221a4c4e16aac1a533efc97f3b759bb5a5ac9f6d10383bf", size = 81212 }, + { url = "https://files.pythonhosted.org/packages/92/dc/c385f38f2c2433333345a82926c6bfa5ecfff3ef787201614317b58dd8be/msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42eefe2c3e2af97ed470eec850facbe1b5ad1d6eacdbadc42ec98e7dcf68b4b7", size = 84315 }, + { url = "https://files.pythonhosted.org/packages/d3/68/93180dce57f684a61a88a45ed13047558ded2be46f03acb8dec6d7c513af/msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999", size = 412721 }, + { url = "https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e", size = 424657 }, + { url = "https://files.pythonhosted.org/packages/38/f8/4398c46863b093252fe67368b44edc6c13b17f4e6b0e4929dbf0bdb13f23/msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162", size = 402668 }, + { url = "https://files.pythonhosted.org/packages/28/ce/698c1eff75626e4124b4d78e21cca0b4cc90043afb80a507626ea354ab52/msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794", size = 419040 }, + { url = "https://files.pythonhosted.org/packages/67/32/f3cd1667028424fa7001d82e10ee35386eea1408b93d399b09fb0aa7875f/msgpack-1.1.2-cp313-cp313-win32.whl", hash = "sha256:a7787d353595c7c7e145e2331abf8b7ff1e6673a6b974ded96e6d4ec09f00c8c", size = 65037 }, + { url = "https://files.pythonhosted.org/packages/74/07/1ed8277f8653c40ebc65985180b007879f6a836c525b3885dcc6448ae6cb/msgpack-1.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:a465f0dceb8e13a487e54c07d04ae3ba131c7c5b95e2612596eafde1dccf64a9", size = 72631 }, + { url = "https://files.pythonhosted.org/packages/e5/db/0314e4e2db56ebcf450f277904ffd84a7988b9e5da8d0d61ab2d057df2b6/msgpack-1.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:e69b39f8c0aa5ec24b57737ebee40be647035158f14ed4b40e6f150077e21a84", size = 64118 }, + { url = "https://files.pythonhosted.org/packages/22/71/201105712d0a2ff07b7873ed3c220292fb2ea5120603c00c4b634bcdafb3/msgpack-1.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e23ce8d5f7aa6ea6d2a2b326b4ba46c985dbb204523759984430db7114f8aa00", size = 81127 }, + { url = "https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939", size = 84981 }, + { url = "https://files.pythonhosted.org/packages/8e/a9/3536e385167b88c2cc8f4424c49e28d49a6fc35206d4a8060f136e71f94c/msgpack-1.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e2cb7b9031568a2a5c73aa077180f93dd2e95b4f8d3b8e14a73ae94a9e667e", size = 411885 }, + { url = "https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931", size = 419658 }, + { url = "https://files.pythonhosted.org/packages/3b/ef/2b92e286366500a09a67e03496ee8b8ba00562797a52f3c117aa2b29514b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:04fb995247a6e83830b62f0b07bf36540c213f6eac8e851166d8d86d83cbd014", size = 403290 }, + { url = "https://files.pythonhosted.org/packages/78/90/e0ea7990abea5764e4655b8177aa7c63cdfa89945b6e7641055800f6c16b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e22ab046fa7ede9e36eeb4cfad44d46450f37bb05d5ec482b02868f451c95e2", size = 415234 }, + { url = "https://files.pythonhosted.org/packages/72/4e/9390aed5db983a2310818cd7d3ec0aecad45e1f7007e0cda79c79507bb0d/msgpack-1.1.2-cp314-cp314-win32.whl", hash = "sha256:80a0ff7d4abf5fecb995fcf235d4064b9a9a8a40a3ab80999e6ac1e30b702717", size = 66391 }, + { url = "https://files.pythonhosted.org/packages/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b", size = 73787 }, + { url = "https://files.pythonhosted.org/packages/6a/b0/9d9f667ab48b16ad4115c1935d94023b82b3198064cb84a123e97f7466c1/msgpack-1.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:59415c6076b1e30e563eb732e23b994a61c159cec44deaf584e5cc1dd662f2af", size = 66453 }, + { url = "https://files.pythonhosted.org/packages/16/67/93f80545eb1792b61a217fa7f06d5e5cb9e0055bed867f43e2b8e012e137/msgpack-1.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:897c478140877e5307760b0ea66e0932738879e7aa68144d9b78ea4c8302a84a", size = 85264 }, + { url = "https://files.pythonhosted.org/packages/87/1c/33c8a24959cf193966ef11a6f6a2995a65eb066bd681fd085afd519a57ce/msgpack-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a668204fa43e6d02f89dbe79a30b0d67238d9ec4c5bd8a940fc3a004a47b721b", size = 89076 }, + { url = "https://files.pythonhosted.org/packages/fc/6b/62e85ff7193663fbea5c0254ef32f0c77134b4059f8da89b958beb7696f3/msgpack-1.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5559d03930d3aa0f3aacb4c42c776af1a2ace2611871c84a75afe436695e6245", size = 435242 }, + { url = "https://files.pythonhosted.org/packages/c1/47/5c74ecb4cc277cf09f64e913947871682ffa82b3b93c8dad68083112f412/msgpack-1.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70c5a7a9fea7f036b716191c29047374c10721c389c21e9ffafad04df8c52c90", size = 432509 }, + { url = "https://files.pythonhosted.org/packages/24/a4/e98ccdb56dc4e98c929a3f150de1799831c0a800583cde9fa022fa90602d/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2cb069d8b981abc72b41aea1c580ce92d57c673ec61af4c500153a626cb9e20", size = 415957 }, + { url = "https://files.pythonhosted.org/packages/da/28/6951f7fb67bc0a4e184a6b38ab71a92d9ba58080b27a77d3e2fb0be5998f/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d62ce1f483f355f61adb5433ebfd8868c5f078d1a52d042b0a998682b4fa8c27", size = 422910 }, + { url = "https://files.pythonhosted.org/packages/f0/03/42106dcded51f0a0b5284d3ce30a671e7bd3f7318d122b2ead66ad289fed/msgpack-1.1.2-cp314-cp314t-win32.whl", hash = "sha256:1d1418482b1ee984625d88aa9585db570180c286d942da463533b238b98b812b", size = 75197 }, + { url = "https://files.pythonhosted.org/packages/15/86/d0071e94987f8db59d4eeb386ddc64d0bb9b10820a8d82bcd3e53eeb2da6/msgpack-1.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5a46bf7e831d09470ad92dff02b8b1ac92175ca36b087f904a0519857c6be3ff", size = 85772 }, + { url = "https://files.pythonhosted.org/packages/81/f2/08ace4142eb281c12701fc3b93a10795e4d4dc7f753911d836675050f886/msgpack-1.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d99ef64f349d5ec3293688e91486c5fdb925ed03807f64d98d205d2713c60b46", size = 70868 }, +] + +[[package]] +name = "multiurl" +version = "0.3.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "requests" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6c/ce/a00c9b44f43c4620ca004e4acb4c1e266b1ab48d2f6ad9e402f6bdbe44d4/multiurl-0.3.7.tar.gz", hash = "sha256:4201563fc8989baca7b525fdc69d4cd5a6c0cef4f303559710b9890021aab6d9", size = 18945 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl", hash = "sha256:054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380", size = 21524 }, +] + +[[package]] +name = "narwhals" +version = "2.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/62/3c/c4ef2164a71c1a63d7f1ae411c4082c5fa872405106db60a4b7114989ad7/narwhals-2.22.1.tar.gz", hash = "sha256:d62920805a0a43b7ff8b54b0c0d3142d796f8a9301836ada37e573d6a33cbcd9", size = 647493 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl", hash = "sha256:60567d774edf77db53906f89d9fbd164e66e56d66d388e1e6990f17ac33cfb53", size = 454815 }, +] + +[[package]] +name = "netcdf4" +version = "1.7.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", +] +dependencies = [ + { name = "certifi", marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, + { name = "cftime", marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/76/7bc801796dee752c1ce9cd6935564a6ee79d5c9d9ef9192f57b156495a35/netcdf4-1.7.3.tar.gz", hash = "sha256:83f122fc3415e92b1d4904fd6a0898468b5404c09432c34beb6b16c533884673", size = 836095 } + +[[package]] +name = "netcdf4" +version = "1.7.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "certifi", marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, + { name = "cftime", marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/07/dfdd017641e82fadaf4e043d91fa179d34940c7d69175a3034dea877df9c/netcdf4-1.7.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b1c1a7ea3678db76bf33d14f7e202385d634db38c5e70d8cf4895971023eebb9", size = 23499427 }, + { url = "https://files.pythonhosted.org/packages/a7/6c/8cd98d166f30d378488c5235457d6af7df09f9925ab5ad03d6840543f42e/netcdf4-1.7.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d3f9497873454207f9480847d02b1b19a4bc81ad6e9166e1c17d4e2f8f3555d1", size = 22886591 }, + { url = "https://files.pythonhosted.org/packages/08/1c/ab31713a95160ebc6b4ec495cd4f03f38b235188a7e955bf33703c5039ca/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8e18294af803e80f8c0339f791901942e268c334c099bbd5f7ea8325a49801a", size = 10336881 }, + { url = "https://files.pythonhosted.org/packages/26/d7/bb16993af267acda23fe3de4ead2528cbe49043e391f732a1a4a15beec20/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b06c0b93fd0ecc1ec67a582f3ba98b7db9da1fa843c8f83fd75990e3701771e", size = 10182772 }, + { url = "https://files.pythonhosted.org/packages/9b/a6/e6fca338488a896c5e1f661ba3007e83f46700e1a59552b05013d501bc45/netcdf4-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:889ba77f084504aebaba9c6f9a88ac213431fef0e897f887cd35aef351ff7740", size = 21363337 }, + { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499 }, + { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667 }, + { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769 }, + { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122 }, + { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637 }, + { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377 }, + { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821 }, + { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133 }, + { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635 }, + { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725 }, + { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258 }, + { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171 }, + { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579 }, + { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032 }, + { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653 }, + { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682 }, +] + +[[package]] +name = "networkx" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504 }, +] + +[[package]] +name = "numexpr" +version = "2.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +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/db/91/ccd504cbe5b88d06987c77f42ba37a13ef05065fdab4afe6dcfeb2961faf/numexpr-2.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d0fab3fd06a04f6b86102552b26aa5d85e20ac7d8296c15764c726eeabae6cc8", size = 163200 }, + { url = "https://files.pythonhosted.org/packages/f3/89/6b07977baf2af75fb6692f9e7a1fb612a15f600fc921f3f565366de01f4a/numexpr-2.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:64ae5dfd62d74a3ef82fe0b37f80527247f3626171ad82025900f46ffca4b39a", size = 152085 }, + { url = "https://files.pythonhosted.org/packages/28/c2/c5775541256c4bf16b4d88fa1cffa74a0126703e513093c8774d911b0bb7/numexpr-2.14.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:955c92b064f9074d2970cf3138f5e3b965be673b82024962ed526f39bc25a920", size = 449435 }, + { url = "https://files.pythonhosted.org/packages/34/d4/d1a410901c620f7a6a3c5c2b1fc9dab22170be05a89d2c02ae699e27bd3f/numexpr-2.14.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75440c54fc01e130396650fdf307aa9d41a67dc06ddbfb288971b591c13a395b", size = 440197 }, + { url = "https://files.pythonhosted.org/packages/ac/c8/fa85f0cc5c39db587ba4927b862a92477c017ee8476e415e8120a100457b/numexpr-2.14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dde9fa47ed319e1e1728940a539df3cb78326b7754bc7c6ab3152afc91808f9b", size = 1414125 }, + { url = "https://files.pythonhosted.org/packages/08/72/a58ddc05e0eabb3fa8d3fcd319f3d97870e6b41520832acfd04a6734c2c0/numexpr-2.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76db0bc6267e591ab9c4df405ffb533598e4c88239db7338d11ae9e4b368a85a", size = 1463041 }, + { url = "https://files.pythonhosted.org/packages/c4/c5/bdd1862302bb71a78dba941eaf7060e1274f1cf6af2d1b0f1880bfcb289b/numexpr-2.14.1-cp310-cp310-win32.whl", hash = "sha256:0d1dcbdc4d0374c0d523cee2f94f06b001623cbc1fd163612841017a3495427c", size = 166833 }, + { url = "https://files.pythonhosted.org/packages/18/af/26773a246716922794388786529e5640676399efabb0ee217ce034df9d27/numexpr-2.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:823cd82c8e7937981339f634e7a9c6a92cb2d0b9d0a5cf627a5e394fffc05377", size = 160068 }, + { 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/9d/20/c473fc04a371f5e2f8c5749e04505c13e7a8ede27c09e9f099b2ad6f43d6/numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ebae0ab18c799b0e6b8c5a8d11e1fa3848eb4011271d99848b297468a39430", size = 162790 }, + { url = "https://files.pythonhosted.org/packages/45/93/b6760dd1904c2a498e5f43d1bb436f59383c3ddea3815f1461dfaa259373/numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47041f2f7b9e69498fb311af672ba914a60e6e6d804011caacb17d66f639e659", size = 152196 }, + { url = "https://files.pythonhosted.org/packages/72/94/cc921e35593b820521e464cbbeaf8212bbdb07f16dc79fe283168df38195/numexpr-2.14.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d686dfb2c1382d9e6e0ee0b7647f943c1886dba3adbf606c625479f35f1956c1", size = 452468 }, + { url = "https://files.pythonhosted.org/packages/d9/43/560e9ba23c02c904b5934496486d061bcb14cd3ebba2e3cf0e2dccb6c22b/numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee6d4fbbbc368e6cdd0772734d6249128d957b3b8ad47a100789009f4de7083", size = 443631 }, + { url = "https://files.pythonhosted.org/packages/7b/6c/78f83b6219f61c2c22d71ab6e6c2d4e5d7381334c6c29b77204e59edb039/numexpr-2.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3a2839efa25f3c8d4133252ea7342d8f81226c7c4dda81f97a57e090b9d87a48", size = 1417670 }, + { url = "https://files.pythonhosted.org/packages/0e/bb/1ccc9dcaf46281568ce769888bf16294c40e98a5158e4b16c241de31d0d3/numexpr-2.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9f9137f1351b310436662b5dc6f4082a245efa8950c3b0d9008028df92fefb9b", size = 1466212 }, + { url = "https://files.pythonhosted.org/packages/31/9f/203d82b9e39dadd91d64bca55b3c8ca432e981b822468dcef41a4418626b/numexpr-2.14.1-cp312-cp312-win32.whl", hash = "sha256:36f8d5c1bd1355df93b43d766790f9046cccfc1e32b7c6163f75bcde682cda07", size = 166996 }, + { url = "https://files.pythonhosted.org/packages/1f/67/ffe750b5452eb66de788c34e7d21ec6d886abb4d7c43ad1dc88ceb3d998f/numexpr-2.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:fdd886f4b7dbaf167633ee396478f0d0aa58ea2f9e7ccc3c6431019623e8d68f", size = 160187 }, + { url = "https://files.pythonhosted.org/packages/73/b4/9f6d637fd79df42be1be29ee7ba1f050fab63b7182cb922a0e08adc12320/numexpr-2.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:09078ba73cffe94745abfbcc2d81ab8b4b4e9d7bfbbde6cac2ee5dbf38eee222", size = 162794 }, + { url = "https://files.pythonhosted.org/packages/35/ae/d58558d8043de0c49f385ea2fa789e3cfe4d436c96be80200c5292f45f15/numexpr-2.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dce0b5a0447baa7b44bc218ec2d7dcd175b8eee6083605293349c0c1d9b82fb6", size = 152203 }, + { url = "https://files.pythonhosted.org/packages/13/65/72b065f9c75baf8f474fd5d2b768350935989d4917db1c6c75b866d4067c/numexpr-2.14.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:06855053de7a3a8425429bd996e8ae3c50b57637ad3e757e0fa0602a7874be30", size = 455860 }, + { url = "https://files.pythonhosted.org/packages/fc/f9/c9457652dfe28e2eb898372da2fe786c6db81af9540c0f853ee04a0699cc/numexpr-2.14.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f9366d23a2e991fd5a8b5e61a17558f028ba86158a4552f8f239b005cdf83c", size = 446574 }, + { url = "https://files.pythonhosted.org/packages/b6/99/8d3879c4d67d3db5560cf2de65ce1778b80b75f6fa415eb5c3e7bd37ba27/numexpr-2.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c5f1b1605695778896534dfc6e130d54a65cd52be7ed2cd0cfee3981fd676bf5", size = 1417306 }, + { url = "https://files.pythonhosted.org/packages/ea/05/6bddac9f18598ba94281e27a6943093f7d0976544b0cb5d92272c64719bd/numexpr-2.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a4ba71db47ea99c659d88ee6233fa77b6dc83392f1d324e0c90ddf617ae3f421", size = 1466145 }, + { url = "https://files.pythonhosted.org/packages/24/5d/cbeb67aca0c5a76ead13df7e8bd8dd5e0d49145f90da697ba1d9f07005b0/numexpr-2.14.1-cp313-cp313-win32.whl", hash = "sha256:638dce8320f4a1483d5ca4fda69f60a70ed7e66be6e68bc23fb9f1a6b78a9e3b", size = 166996 }, + { url = "https://files.pythonhosted.org/packages/cc/23/9281bceaeb282cead95f0aa5f7f222ffc895670ea689cc1398355f6e3001/numexpr-2.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:9fdcd4735121658a313f878fd31136d1bfc6a5b913219e7274e9fca9f8dac3bb", size = 160189 }, + { url = "https://files.pythonhosted.org/packages/f3/76/7aac965fd93a56803cbe502aee2adcad667253ae34b0badf6c5af7908b6c/numexpr-2.14.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:557887ad7f5d3c2a40fd7310e50597045a68e66b20a77b3f44d7bc7608523b4b", size = 163524 }, + { url = "https://files.pythonhosted.org/packages/58/65/79d592d5e63fbfab3b59a60c386853d9186a44a3fa3c87ba26bdc25b6195/numexpr-2.14.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:af111c8fe6fc55d15e4c7cab11920fc50740d913636d486545b080192cd0ad73", size = 152919 }, + { url = "https://files.pythonhosted.org/packages/84/78/3c8335f713d4aeb99fa758d7c62f0be1482d4947ce5b508e2052bb7aeee9/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33265294376e7e2ae4d264d75b798a915d2acf37b9dd2b9405e8b04f84d05cfc", size = 465972 }, + { url = "https://files.pythonhosted.org/packages/35/81/9ee5f69b811e8f18746c12d6f71848617684edd3161927f95eee7a305631/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83647d846d3eeeb9a9255311236135286728b398d0d41d35dedb532dca807fe9", size = 456953 }, + { url = "https://files.pythonhosted.org/packages/6d/39/9b8bc6e294d85cbb54a634e47b833e9f3276a8bdf7ce92aa808718a0212d/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6e575fd3ad41ddf3355d0c7ef6bd0168619dc1779a98fe46693cad5e95d25e6e", size = 1426199 }, + { url = "https://files.pythonhosted.org/packages/1e/ce/0d4fcd31ab49319740d934fba1734d7dad13aa485532ca754e555ca16c8b/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:67ea4771029ce818573b1998f5ca416bd255156feea017841b86176a938f7d19", size = 1474214 }, + { url = "https://files.pythonhosted.org/packages/b7/47/b2a93cbdb3ba4e009728ad1b9ef1550e2655ea2c86958ebaf03b9615f275/numexpr-2.14.1-cp313-cp313t-win32.whl", hash = "sha256:15015d47d3d1487072d58c0e7682ef2eb608321e14099c39d52e2dd689483611", size = 167676 }, + { url = "https://files.pythonhosted.org/packages/86/99/ee3accc589ed032eea68e12172515ed96a5568534c213ad109e1f4411df1/numexpr-2.14.1-cp313-cp313t-win_amd64.whl", hash = "sha256:94c711f6d8f17dfb4606842b403699603aa591ab9f6bf23038b488ea9cfb0f09", size = 161096 }, + { url = "https://files.pythonhosted.org/packages/ac/36/9db78dfbfdfa1f8bf0872993f1a334cdd8fca5a5b6567e47dcb128bcb7c2/numexpr-2.14.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ede79f7ff06629f599081de644546ce7324f1581c09b0ac174da88a470d39c21", size = 162848 }, + { url = "https://files.pythonhosted.org/packages/13/c1/a5c78ae637402c5550e2e0ba175275d2515d432ec28af0cdc23c9b476e65/numexpr-2.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2eac7a5a2f70b3768c67056445d1ceb4ecd9b853c8eda9563823b551aeaa5082", size = 152270 }, + { url = "https://files.pythonhosted.org/packages/9a/ed/aabd8678077848dd9a751c5558c2057839f5a09e2a176d8dfcd0850ee00e/numexpr-2.14.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5aedf38d4c0c19d3cecfe0334c3f4099fb496f54c146223d30fa930084bc8574", size = 455918 }, + { url = "https://files.pythonhosted.org/packages/88/e1/3db65117f02cdefb0e5e4c440daf1c30beb45051b7f47aded25b7f4f2f34/numexpr-2.14.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439ec4d57b853792ebe5456e3160312281c3a7071ecac5532ded3278ede614de", size = 446512 }, + { url = "https://files.pythonhosted.org/packages/9a/fb/7ceb9ee55b5f67e4a3e4d73d5af4c7e37e3c9f37f54bee90361b64b17e3f/numexpr-2.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e23b87f744e04e302d82ac5e2189ae20a533566aec76a46885376e20b0645bf8", size = 1417845 }, + { url = "https://files.pythonhosted.org/packages/45/2d/9b5764d0eafbbb2889288f80de773791358acf6fad1a55767538d8b79599/numexpr-2.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:44f84e0e5af219dbb62a081606156420815890e041b87252fbcea5df55214c4c", size = 1466211 }, + { url = "https://files.pythonhosted.org/packages/5d/21/204db708eccd71aa8bc55bcad55bc0fc6c5a4e01ad78e14ee5714a749386/numexpr-2.14.1-cp314-cp314-win32.whl", hash = "sha256:1f1a5e817c534539351aa75d26088e9e1e0ef1b3a6ab484047618a652ccc4fc3", size = 168835 }, + { url = "https://files.pythonhosted.org/packages/4f/3e/d83e9401a1c3449a124f7d4b3fb44084798e0d30f7c11e60712d9b94cf11/numexpr-2.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:587c41509bc373dfb1fe6086ba55a73147297247bedb6d588cda69169fc412f2", size = 162608 }, + { url = "https://files.pythonhosted.org/packages/7f/d6/ec947806bb57836d6379a8c8a253c2aeaa602b12fef2336bfd2462bb4ed5/numexpr-2.14.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ec368819502b64f190c3f71be14a304780b5935c42aae5bf22c27cc2cbba70b5", size = 163525 }, + { url = "https://files.pythonhosted.org/packages/0d/77/048f30dcf661a3d52963a88c29b52b6d5ce996d38e9313a56a922451c1e0/numexpr-2.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7e87f6d203ac57239de32261c941e9748f9309cbc0da6295eabd0c438b920d3a", size = 152917 }, + { url = "https://files.pythonhosted.org/packages/9e/d3/956a13e628d722d649fbf2fded615134a308c082e122a48bad0e90a99ce9/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd72d8c2a165fe45ea7650b16eb8cc1792a94a722022006bb97c86fe51fd2091", size = 466242 }, + { url = "https://files.pythonhosted.org/packages/d6/dd/abe848678d82486940892f2cacf39e82eec790e8930d4d713d3f9191063b/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70d80fcb418a54ca208e9a38e58ddc425c07f66485176b261d9a67c7f2864f73", size = 457149 }, + { url = "https://files.pythonhosted.org/packages/fd/bb/797b583b5fb9da5700a5708ca6eb4f889c94d81abb28de4d642c0f4b3258/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:edea2f20c2040df8b54ee8ca8ebda63de9545b2112872466118e9df4d0ae99f3", size = 1426493 }, + { url = "https://files.pythonhosted.org/packages/77/c4/0519ab028fdc35e3e7ee700def7f2b4631b175cd9e1202bd7966c1695c33/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:790447be6879a6c51b9545f79612d24c9ea0a41d537a84e15e6a8ddef0b6268e", size = 1474413 }, + { url = "https://files.pythonhosted.org/packages/d4/4a/33044878c8f4a75213cfe9c11d4c02058bb710a7a063fe14f362e8de1077/numexpr-2.14.1-cp314-cp314t-win32.whl", hash = "sha256:538961096c2300ea44240209181e31fae82759d26b51713b589332b9f2a4117e", size = 169502 }, + { url = "https://files.pythonhosted.org/packages/41/a2/5a1a2c72528b429337f49911b18c302ecd36eeab00f409147e1aa4ae4519/numexpr-2.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:a40b350cd45b4446076fa11843fa32bbe07024747aeddf6d467290bf9011b392", size = 163589 }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194 }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111 }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159 }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936 }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692 }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164 }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877 }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487 }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945 }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406 }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528 }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119 }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246 }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410 }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240 }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012 }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538 }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706 }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541 }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825 }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687 }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482 }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648 }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902 }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992 }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944 }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392 }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220 }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800 }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600 }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134 }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598 }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272 }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197 }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287 }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763 }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070 }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752 }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024 }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398 }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971 }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532 }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881 }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458 }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559 }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716 }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947 }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197 }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245 }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587 }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226 }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196 }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334 }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678 }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672 }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731 }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805 }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496 }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616 }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145 }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813 }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982 }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908 }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867 }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511 }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064 }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157 }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728 }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374 }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286 }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263 }, +] + +[[package]] +name = "objsize" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/42/2de8994fbea1112d076d71aefaebad888ff01e5b52616895d510b73c3b96/objsize-0.8.0.tar.gz", hash = "sha256:df17998cf6ef4b24d52abee5020484491230e3f4af71a8ff0098c7455ad4d91c", size = 16593 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/53/157f8f4df3f43fdfdc627a56fa46135e4dcf806eb5bc6088811d968f8a21/objsize-0.8.0-py3-none-any.whl", hash = "sha256:afea5e61ba1e3e40c23b546028cdc1df88c5b097d2b0d6c6b8a4bf44fa7a3e1b", size = 11599 }, +] + +[[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 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/5d/b95ca542a001135cc250a49370f282f578c8f4e46cc8617d73775297eea8/orjson-3.11.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:135869ef917b8704ea0a94e01620e0c05021c15c52036e4663baffe75e72f8ce", size = 228986 }, + { url = "https://files.pythonhosted.org/packages/80/01/be33fbff646e22f93398429ea645f20d2097aea1a6cdc1e6628e70125f83/orjson-3.11.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115ab5f5f4a0f203cc2a5f0fb09aee503a3f771aa08392949ab5ca230c4fbdbd", size = 132558 }, + { url = "https://files.pythonhosted.org/packages/4e/61/73d49333bba660a075daccca10970dc6409ce1cf42ae4046646a19468aad/orjson-3.11.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4da3c38a2083ca4aaf9c2a36776cce3e9328e6647b10d118948f3cfb4913ffe4", size = 128213 }, + { url = "https://files.pythonhosted.org/packages/1f/7d/30e844b3dac3f74aed66b1f984daf9db3c98c0328c03d965a9e8dc06449e/orjson-3.11.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53b50b0e14084b8f7e29c5ce84c5af0f1160169b30d8a6914231d97d2fe297d4", size = 135430 }, + { url = "https://files.pythonhosted.org/packages/16/64/bd815f5c610b3facc204f26ba94e87a9eb49b0d83de3d5fc1eee2402d91b/orjson-3.11.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:231742b4a11dad8d5380a435962c57e91b7c37b79be858f4ef1c0df1a259897e", size = 146178 }, + { url = "https://files.pythonhosted.org/packages/c7/35/e744fd36c79b339d27beb06068b5a08a8882ef5418804d0ce545a31f718d/orjson-3.11.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34fd2317602587321faab75ab76c623a0117e80841a6413654f04e47f339a8fb", size = 133068 }, + { url = "https://files.pythonhosted.org/packages/2a/56/d54152b67b63a0b3e556cfc549d6ce84f74d7f425ddeadc6c8a74d913da7/orjson-3.11.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71f3db16e69b667b132e0f305a833d5497da302d801508cbb051ed9a9819da47", size = 134217 }, + { url = "https://files.pythonhosted.org/packages/0b/ee/66154baf69f71c7164a268a5e888908aec5a0819d13c81d5e2755a257758/orjson-3.11.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0b34789fa0da61cf7bef0546b09c738fb195331e017e477096d129e9105ab03d", size = 141917 }, + { url = "https://files.pythonhosted.org/packages/09/d3/c5824260ca8b9d7ba82648d042a3f8f4815d18c15bb98a1f30edd1bb2d83/orjson-3.11.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:87e4d4ab280b0c87424d47695bec2182caf8cfc17879ea78dab76680194abc13", size = 415356 }, + { url = "https://files.pythonhosted.org/packages/64/cb/509c2e816fe4df641d93dc92f6a89adc8df3ada8ebdee2bd44aba3264c3c/orjson-3.11.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ace6c58523302d3b97b6ac5c38a5298a54b473762b6be82726b4265c41029f92", size = 148112 }, + { url = "https://files.pythonhosted.org/packages/db/b5/3ceae56d2e4962979eedb023ba6a46a4bb65f333960379be0ca470686220/orjson-3.11.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:97d0d932803c1b164fde11cb542a9efcb1e0f63b184537cca65887147906ff48", size = 137112 }, + { url = "https://files.pythonhosted.org/packages/d7/7a/81fa3f2c7bef79b04cf2ab7838e5ac74b1f12511ceab979759b0275d6bb4/orjson-3.11.9-cp310-cp310-win32.whl", hash = "sha256:b3afcf569c15577a9fe64627292daa3e6b3a70f4fb77a5df246a87ec21681b94", size = 131706 }, + { url = "https://files.pythonhosted.org/packages/ae/d8/b64600f9083c7f151ad39717a5877fccbeb0ef6d7efcb55f971ce00b6bee/orjson-3.11.9-cp310-cp310-win_amd64.whl", hash = "sha256:8697ab6a080a5c46edaad50e2bc5bd8c7ca5c66442d24104fa44ec74910a8244", size = 127282 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { url = "https://files.pythonhosted.org/packages/0d/bd/70b6ab193594d7abb875320c0a7c8335e846f28968c432c31042409c3c8d/orjson-3.11.9-cp311-cp311-win32.whl", hash = "sha256:14ed654580c1ed2bc217352ec82f91b047aef82951aa71c7f64e0dcb03c0e180", size = 131533 }, + { url = "https://files.pythonhosted.org/packages/3f/17/1a1a228183d62d1b77e2c30d210f47dd4768b310ebe1607c63e3c0e3a71e/orjson-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:57ea77fb70a448ce87d18fca050193202a3da5e54598f6501ca5476fb66cfe02", size = 127106 }, + { url = "https://files.pythonhosted.org/packages/b8/95/285de5fa296d09681ee9c546cd4a8aeb773b701cf343dc125994f4d52953/orjson-3.11.9-cp311-cp311-win_arm64.whl", hash = "sha256:19b72ed11572a2ee51a67a903afbe5af504f84ed6f529c0fe44b0ab3fb5cc697", size = 126848 }, + { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515 }, + { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409 }, + { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106 }, + { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864 }, + { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213 }, + { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994 }, + { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744 }, + { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014 }, + { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509 }, + { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127 }, + { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025 }, + { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943 }, + { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606 }, + { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101 }, + { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736 }, + { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458 }, + { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368 }, + { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070 }, + { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892 }, + { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217 }, + { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980 }, + { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738 }, + { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033 }, + { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492 }, + { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087 }, + { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031 }, + { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915 }, + { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613 }, + { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086 }, + { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696 }, + { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465 }, + { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364 }, + { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063 }, + { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356 }, + { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592 }, + { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491 }, + { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309 }, + { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030 }, + { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482 }, + { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178 }, + { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089 }, + { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921 }, + { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638 }, + { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078 }, + { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687 }, +] + +[[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.3.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "python-dateutil", marker = "python_full_version < '3.11'" }, + { name = "pytz", marker = "python_full_version < '3.11'" }, + { name = "tzdata", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763 }, + { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217 }, + { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791 }, + { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373 }, + { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444 }, + { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459 }, + { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086 }, + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790 }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831 }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267 }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281 }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453 }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361 }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702 }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846 }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618 }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212 }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693 }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002 }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971 }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722 }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671 }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807 }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872 }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371 }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333 }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120 }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991 }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227 }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056 }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189 }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912 }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160 }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233 }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635 }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079 }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049 }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638 }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834 }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925 }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071 }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504 }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702 }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535 }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582 }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963 }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175 }, +] + +[[package]] +name = "pandas" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11'" }, + { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495 }, + { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250 }, + { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558 }, + { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611 }, + { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670 }, + { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708 }, + { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609 }, + { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596 }, + { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846 }, + { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550 }, + { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965 }, + { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600 }, + { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824 }, + { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889 }, + { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463 }, + { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158 }, + { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071 }, + { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690 }, + { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634 }, + { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243 }, + { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659 }, + { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880 }, + { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091 }, + { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282 }, + { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016 }, + { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210 }, + { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126 }, + { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051 }, + { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796 }, + { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741 }, + { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958 }, + { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065 }, + { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101 }, + { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553 }, + { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065 }, + { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188 }, + { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966 }, + { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755 }, + { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658 }, + { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242 }, + { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369 }, + { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306 }, + { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394 }, + { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717 }, + { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897 }, + { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855 }, + { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464 }, +] + +[[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 = "partd" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "locket" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905 }, +] + +[[package]] +name = "pdbufr" +version = "0.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "eccodes" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633 }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "(python_full_version < '3.11' and platform_machine != 'ARM64' and sys_platform == 'win32') or (python_full_version < '3.11' and sys_platform == 'emscripten') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +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 = "pint" +version = "0.24.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "flexcache", marker = "python_full_version < '3.11'" }, + { name = "flexparser", marker = "python_full_version < '3.11'" }, + { name = "platformdirs", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029 }, +] + +[[package]] +name = "pint" +version = "0.25.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "flexcache", marker = "python_full_version >= '3.11'" }, + { name = "flexparser", marker = "python_full_version >= '3.11'" }, + { name = "platformdirs", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488 }, +] + +[[package]] +name = "platformdirs" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743 }, +] + +[[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 = "pproc" +source = { editable = "." } +dependencies = [ + { name = "conflator" }, + { name = "earthkit-time" }, + { name = "earthkit-utils" }, + { name = "filelock" }, + { name = "numexpr" }, + { name = "pproc-core" }, + { name = "pproc-runtime" }, + { name = "psutil" }, + { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scikit-learn", version = "1.9.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] + +[package.optional-dependencies] +tcycl = [ + { name = "pyinfero" }, + { name = "wget" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pytest" }, + { name = "requests" }, +] + +[package.metadata] +requires-dist = [ + { name = "conflator", specifier = ">=0.1.7" }, + { name = "earthkit-time", specifier = ">=0.1.3" }, + { name = "earthkit-utils", specifier = ">=0.2.1" }, + { name = "filelock", specifier = ">=3.12" }, + { name = "numexpr" }, + { name = "pproc-core", editable = "../pproc-core" }, + { name = "pproc-runtime", editable = "../pproc-runtime" }, + { name = "psutil" }, + { name = "pyinfero", marker = "extra == 'tcycl'", git = "ssh://git@github.com/ecmwf/infero.git?subdirectory=src%2Finfero%2Fapi%2Fpyinfero&rev=0.3.1" }, + { name = "scikit-learn" }, + { name = "scipy", specifier = ">=1.8" }, + { name = "wget", marker = "extra == 'tcycl'" }, + { name = "xarray" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "pytest", specifier = ">=9.0.3" }, + { name = "requests", specifier = ">=2.34.2" }, +] + +[[package]] +name = "pproc-core" +source = { editable = "../pproc-core" } +dependencies = [ + { name = "code-meters" }, + { name = "earthkit-time" }, + { name = "earthkit-workflows", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "earthkit-workflows", version = "0.14.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pydantic" }, +] + +[package.dev-dependencies] +dev = [ + { name = "prek" }, + { name = "pytest" }, + { name = "ty" }, +] + +[package.metadata] +requires-dist = [ + { name = "code-meters" }, + { name = "earthkit-time" }, + { name = "earthkit-workflows" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "pydantic" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "prek", specifier = ">=0.4.4" }, + { name = "pytest", specifier = ">=9.0.3" }, + { name = "ty", specifier = ">=0.0.43" }, +] + +[[package]] +name = "pproc-runtime" +source = { editable = "../pproc-runtime" } +dependencies = [ + { name = "array-api-compat" }, + { name = "code-meters" }, + { name = "earthkit-data", extra = ["fdb", "mars"] }, + { name = "earthkit-meteo" }, + { name = "eccodes" }, + { name = "fdb5lib" }, + { name = "mir-python" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "thermofeel" }, +] + +[package.dev-dependencies] +dev = [ + { name = "prek" }, + { name = "pytest" }, + { name = "ty" }, +] + +[package.metadata] +requires-dist = [ + { name = "array-api-compat" }, + { name = "code-meters" }, + { name = "earthkit-data", extras = ["fdb", "mars"] }, + { name = "earthkit-meteo" }, + { name = "eccodes" }, + { name = "fdb5lib" }, + { name = "mir-python" }, + { name = "numpy" }, + { name = "thermofeel" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "prek", specifier = ">=0.4.4" }, + { name = "pytest", specifier = ">=9.0.3" }, + { name = "ty", specifier = ">=0.0.44" }, +] + +[[package]] +name = "prek" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/13/3d71b3adbf385f7dc7fb6e16d6e25421fd8398b45d8f8410a328bf22bd3f/prek-0.4.4.tar.gz", hash = "sha256:4ec5771153d158a0e4473933b7fd9b51e1b1f57f2df50aeb7560ea6812226dc5", size = 470641 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/9f/68a577888edf7f2647a652b02899508ccd84e57ce1f79c51a44edfd308d7/prek-0.4.4-py3-none-linux_armv6l.whl", hash = "sha256:23cfd96a25de1c93e3c43c746643b80489e3b2fa49ca9c0ffd6022e51535c900", size = 5550271 }, + { url = "https://files.pythonhosted.org/packages/35/b8/5427a0023116343a8d787b446536a7fddfa5db7eec7713dd05618da2bdfe/prek-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a427b792c4436f49732b1f6ebccf221fdcc6390c148474280da9c2c6eaabc9c4", size = 5910136 }, + { url = "https://files.pythonhosted.org/packages/9d/4f/d751e90b7e768e472e054cd41cbe502589436ca9c1a13bfe4fa9513f9cde/prek-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b998038fc92c990e03147eb5b95b0f2c394517f8857ab911aac8e092f1b9b3ab", size = 5470124 }, + { url = "https://files.pythonhosted.org/packages/c6/fe/e73241c5777b6f9b6b95132febbd27f9be9e89912e9e93c0982680593af2/prek-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:9cebca8c15da4f1d6e3a25e6ae0611425c8596e926222050f2588c390e42df8a", size = 5732725 }, + { url = "https://files.pythonhosted.org/packages/ca/a3/329bd910e7e5d9d0eb5e571f3ba48023213744e78411afb81f5ef8356cab/prek-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8742ac26363e74c855df6215a709d5db183204d00ac0f1a722b13aed4da3cd0", size = 5457953 }, + { url = "https://files.pythonhosted.org/packages/3d/f8/d642990513d9707398506bad45d39173d84266231f7d919899f694aefe2c/prek-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2b7c8710546a1e894afa7ab022030cd4e21f1ee7ffb301b4360773d22f1f00f", size = 5860556 }, + { url = "https://files.pythonhosted.org/packages/8d/17/a2e29cb278503a8c18612d8a62a15020648dc768e2e94bc4b4d4c9411e07/prek-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e02bd4d5e05c500e4d9f70f024e30d13aa361dc490724b7f476d2e35542c239f", size = 6652492 }, + { url = "https://files.pythonhosted.org/packages/ab/10/ad3270b18135ee5d1af6f6cf4b0c8601b1cc2cb38d16e835081da820833a/prek-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a25041733de987a47e5a7bace47182a6f0e2ae5f960cb54c1d4630afd2591", size = 6113837 }, + { url = "https://files.pythonhosted.org/packages/59/d9/e8c201b9b41c4561673cea01c630ab604df89d13e952f87dbcb807d32588/prek-0.4.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:0b04a0f36d07474f2a9fc5b1ba1197a1b326b2b211f39cd74cf0d4613545f7f4", size = 5729155 }, + { url = "https://files.pythonhosted.org/packages/e8/cd/227b0494fcbc91e8fe15c2a4db9e6dfff95314ef38db3e40e6ea96db249d/prek-0.4.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f032ccbe2d6edc345f81a6d772c18cc169d63c27b5a8292bfe416b352bdfee57", size = 5590775 }, + { url = "https://files.pythonhosted.org/packages/cc/e0/9d750b9cf21ece884afdc15668d0f005a36588fe1b0bb5ff4a8112ab51cb/prek-0.4.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:bad3586fcea3e913f0edf2e8f132f97889e03976b7ee3d120fd294ad4e89a5eb", size = 5437864 }, + { url = "https://files.pythonhosted.org/packages/3a/48/e2e5c0299590ad18a253c0ac09508b615baa1b382010c511186572f711d3/prek-0.4.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4058638532c6dcbf0076d23b9264cbdd9f0f0e320762e237a6b9e4e4b854a766", size = 5718579 }, + { url = "https://files.pythonhosted.org/packages/54/48/7fb3d4e7f664d1ce8ae35ec553872ffddf9fab4c5081735fdaae610b1e7c/prek-0.4.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:619bab14071670249777deea0cc0b29d904c4a514cf33b20e583900a544f0399", size = 6231622 }, + { url = "https://files.pythonhosted.org/packages/46/c0/a4ddbf38034afe67cfa97c4bd81c86429ada098e7c323218d9f9fd061566/prek-0.4.4-py3-none-win32.whl", hash = "sha256:143154b329c05b2f9fa3230e604d02d9c4297dd43f96135a8ba166772e8ecd60", size = 5240317 }, + { url = "https://files.pythonhosted.org/packages/bc/8c/fe97b5b095187bb2f93bbe406bccf108c879e5e4c83f165809b0d16ce0fb/prek-0.4.4-py3-none-win_amd64.whl", hash = "sha256:c38c5140ae2ea55ebb02e6ca590a416664ea1af287cdd21f54daeec53a81015a", size = 5626104 }, + { url = "https://files.pythonhosted.org/packages/25/63/3586226d536796e65f8e725b531d6104e55caaa18659bdcb512661629586/prek-0.4.4-py3-none-win_arm64.whl", hash = "sha256:3efa28fb37b9ddbafb7759da8d497f0d36cf02a05816e15d6541f5669d5d2114", size = 5470399 }, +] + +[[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 = "protobuf" +version = "7.35.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/fd/5b1491d9e4b586d621c54f4c36b888714164b6875f8d6afa3f9072906a51/protobuf-7.35.0.tar.gz", hash = "sha256:a2efd84605f41e559f1881b0912b44099d0a2ac9bf46b3474823f10fb393b0e6", size = 458677 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/ee/93d06e358a4aa32280b00e722d3ea0a1f25fc3cc5778d80581c9cca2c10e/protobuf-7.35.0-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:66be6c513931c794fa92c080ffee41671390da3d79da219cf9c0c0907f035dda", size = 433225 }, + { url = "https://files.pythonhosted.org/packages/8b/39/1c76c2da93f3c507e958e0aecee2391cc44d4625de6c728bbc555195b5a8/protobuf-7.35.0-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:fcbe42a4ac09d3ec9c987ddfcd956afd0b15f1ff613bd8371bde9405ffd5c8e5", size = 328847 }, + { url = "https://files.pythonhosted.org/packages/91/1a/39f7ce90a238c1a987a4d81ec26379e02ca0aff367de68e4a1fa474215b9/protobuf-7.35.0-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:4cbf5cc286130e06a6c9bbefac442431173906dfcc979712183d4adcc01b37ee", size = 344030 }, + { url = "https://files.pythonhosted.org/packages/70/5b/6baf9008817964454055ff3fe65f1de0b5f1e26c80c82f7fb108b7cd4ea3/protobuf-7.35.0-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:6c0f98f10c8a05ea30f8993dfef2de093d27b490fdae78bb60c8343795d55011", size = 327130 }, + { url = "https://files.pythonhosted.org/packages/8e/e5/e46adb0badc388bfb84877a5f9f026aff63f60e611016cf64dbe77e05446/protobuf-7.35.0-cp310-abi3-win32.whl", hash = "sha256:4c4617b83ade0e279d1d2bfe04025a1adb87f9ed657de038620dc0ff959357f6", size = 428946 }, + { url = "https://files.pythonhosted.org/packages/a7/ab/547fbd9e16d879dd13c167478f8ae0a83a428008ca07a5e06acdc23ad473/protobuf-7.35.0-cp310-abi3-win_amd64.whl", hash = "sha256:f05bcadf9a2a6b8dda047007075135fb7d08c73d9177aabc067e1be46881a201", size = 439996 }, + { url = "https://files.pythonhosted.org/packages/b8/ef/50433d346c56657a70d27f156c7b349ac59a068b01de4eb796e747eecc43/protobuf-7.35.0-py3-none-any.whl", hash = "sha256:c13f325cf242bad135c350629eeb5d54b24228eb472fb3e2e9ebbd4c5dc20ca0", size = 171659 }, +] + +[[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/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595 }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082 }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476 }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062 }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893 }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589 }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664 }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087 }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383 }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210 }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228 }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284 }, + { 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 = "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 = "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 = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262 }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146 }, + { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769 }, + { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958 }, + { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118 }, + { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876 }, + { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703 }, + { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042 }, + { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231 }, + { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388 }, + { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769 }, + { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312 }, + { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817 }, + { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085 }, + { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311 }, + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872 }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255 }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827 }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051 }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314 }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146 }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685 }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420 }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122 }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573 }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139 }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433 }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513 }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114 }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298 }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158 }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724 }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742 }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418 }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274 }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940 }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516 }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854 }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306 }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044 }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133 }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464 }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823 }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919 }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604 }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306 }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906 }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802 }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446 }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757 }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275 }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467 }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417 }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782 }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782 }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334 }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986 }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693 }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819 }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411 }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079 }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179 }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926 }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785 }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733 }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534 }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732 }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627 }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141 }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325 }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990 }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978 }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354 }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238 }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251 }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593 }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226 }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605 }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777 }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641 }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404 }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219 }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594 }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542 }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146 }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309 }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736 }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575 }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624 }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325 }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782 }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146 }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492 }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604 }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828 }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000 }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286 }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071 }, +] + +[[package]] +name = "pyfdb" +version = "0.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, + { name = "eccodes" }, + { name = "findlibs" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/b8/ee087c4bf0e8328eab5ddf738e1d9ee347a3463e6bbe3bf9d0c1b8b31379/pyfdb-0.1.3.tar.gz", hash = "sha256:b070f5dde8de850e82729d03c1e97a2f76281572624826383ac0049b3587352e", size = 17502 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/a8/b37e3e3398c54a33b994607e2808ef0de97809cbad3f0d784191862429eb/pyfdb-0.1.3-py3-none-any.whl", hash = "sha256:a9d3b69e19fbeb57bb0c6ccbe69d32fe3551e8b1eda4635c36ff6f88eacc2d66", size = 17202 }, +] + +[[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 = "pyinfero" +version = "0.1.1" +source = { git = "ssh://git@github.com/ecmwf/infero.git?subdirectory=src%2Finfero%2Fapi%2Fpyinfero&rev=0.3.1#63046295c28729d3eb0410a56ddfc4b68273e930" } +dependencies = [ + { name = "cffi" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] + +[[package]] +name = "pyrsistent" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/3a/5031723c09068e9c8c2f0bc25c3a9245f2b1d1aea8396c787a408f2b95ca/pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", size = 103642 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/19/c343b14061907b629b765444b6436b160e2bd4184d17d4804bbe6381f6be/pyrsistent-0.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c3aba3e01235221e5b229a6c05f585f344734bd1ad42a8ac51493d74722bbce", size = 83416 }, + { url = "https://files.pythonhosted.org/packages/9f/4f/8342079ea331031ef9ed57edd312a9ad283bcc8adfaf268931ae356a09a6/pyrsistent-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1beb78af5423b879edaf23c5591ff292cf7c33979734c99aa66d5914ead880f", size = 118021 }, + { url = "https://files.pythonhosted.org/packages/d7/b7/64a125c488243965b7c5118352e47c6f89df95b4ac306d31cee409153d57/pyrsistent-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21cc459636983764e692b9eba7144cdd54fdec23ccdb1e8ba392a63666c60c34", size = 117747 }, + { url = "https://files.pythonhosted.org/packages/fe/a5/43c67bd5f80df9e7583042398d12113263ec57f27c0607abe9d78395d18f/pyrsistent-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5ac696f02b3fc01a710427585c855f65cd9c640e14f52abe52020722bb4906b", size = 114524 }, + { url = "https://files.pythonhosted.org/packages/8a/98/b382a87e89ca839106d874f7bf78d226b3eedb26735eb6f751f1a3375f21/pyrsistent-0.20.0-cp310-cp310-win32.whl", hash = "sha256:0724c506cd8b63c69c7f883cc233aac948c1ea946ea95996ad8b1380c25e1d3f", size = 60780 }, + { url = "https://files.pythonhosted.org/packages/37/8a/23e2193f7adea6901262e3cf39c7fe18ac0c446176c0ff0e19aeb2e9681e/pyrsistent-0.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:8441cf9616d642c475684d6cf2520dd24812e996ba9af15e606df5f6fd9d04a7", size = 63310 }, + { url = "https://files.pythonhosted.org/packages/df/63/7544dc7d0953294882a5c587fb1b10a26e0c23d9b92281a14c2514bac1f7/pyrsistent-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", size = 83481 }, + { url = "https://files.pythonhosted.org/packages/ae/a0/49249bc14d71b1bf2ffe89703acfa86f2017c25cfdabcaea532b8c8a5810/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", size = 120222 }, + { url = "https://files.pythonhosted.org/packages/a1/94/9808e8c9271424120289b9028a657da336ad7e43da0647f62e4f6011d19b/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", size = 120002 }, + { url = "https://files.pythonhosted.org/packages/3f/f6/9ecfb78b2fc8e2540546db0fe19df1fae0f56664a5958c21ff8861b0f8da/pyrsistent-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6288b3fa6622ad8a91e6eb759cfc48ff3089e7c17fb1d4c59a919769314af224", size = 116850 }, + { url = "https://files.pythonhosted.org/packages/83/c8/e6d28bc27a0719f8eaae660357df9757d6e9ca9be2691595721de9e8adfc/pyrsistent-0.20.0-cp311-cp311-win32.whl", hash = "sha256:7d29c23bdf6e5438c755b941cef867ec2a4a172ceb9f50553b6ed70d50dfd656", size = 60775 }, + { url = "https://files.pythonhosted.org/packages/98/87/c6ef52ff30388f357922d08de012abdd3dc61e09311d88967bdae23ab657/pyrsistent-0.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:59a89bccd615551391f3237e00006a26bcf98a4d18623a19909a2c48b8e986ee", size = 63306 }, + { url = "https://files.pythonhosted.org/packages/15/ee/ff2ed52032ac1ce2e7ba19e79bd5b05d152ebfb77956cf08fcd6e8d760ea/pyrsistent-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e", size = 83537 }, + { url = "https://files.pythonhosted.org/packages/80/f1/338d0050b24c3132bcfc79b68c3a5f54bce3d213ecef74d37e988b971d8a/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a14798c3005ec892bbada26485c2eea3b54109cb2533713e355c806891f63c5e", size = 122615 }, + { url = "https://files.pythonhosted.org/packages/07/3a/e56d6431b713518094fae6ff833a04a6f49ad0fbe25fb7c0dc7408e19d20/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b14decb628fac50db5e02ee5a35a9c0772d20277824cfe845c8a8b717c15daa3", size = 122335 }, + { url = "https://files.pythonhosted.org/packages/4a/bb/5f40a4d5e985a43b43f607250e766cdec28904682c3505eb0bd343a4b7db/pyrsistent-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e2c116cc804d9b09ce9814d17df5edf1df0c624aba3b43bc1ad90411487036d", size = 118510 }, + { url = "https://files.pythonhosted.org/packages/1c/13/e6a22f40f5800af116c02c28e29f15c06aa41cb2036f6a64ab124647f28b/pyrsistent-0.20.0-cp312-cp312-win32.whl", hash = "sha256:e78d0c7c1e99a4a45c99143900ea0546025e41bb59ebc10182e947cf1ece9174", size = 60865 }, + { url = "https://files.pythonhosted.org/packages/75/ef/2fa3b55023ec07c22682c957808f9a41836da4cd006b5f55ec76bf0fbfa6/pyrsistent-0.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:4021a7f963d88ccd15b523787d18ed5e5269ce57aa4037146a2377ff607ae87d", size = 63239 }, + { url = "https://files.pythonhosted.org/packages/23/88/0acd180010aaed4987c85700b7cc17f9505f3edb4e5873e4dc67f613e338/pyrsistent-0.20.0-py3-none-any.whl", hash = "sha256:c55acc4733aad6560a7f5f818466631f07efc001fd023f34a6c203f8b6df0f0b", size = 58106 }, +] + +[[package]] +name = "pytest" +version = "9.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249 }, +] + +[[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 = "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 = "pyvis" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ipython", version = "9.14.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "jinja2" }, + { name = "jsonpickle" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/4b/e37e4e5d5ee1179694917b445768bdbfb084f5a59ecd38089d3413d4c70f/pyvis-0.3.2-py3-none-any.whl", hash = "sha256:5720c4ca8161dc5d9ab352015723abb7a8bb8fb443edeb07f7a322db34a97555", size = 756038 }, +] + +[[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/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227 }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019 }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646 }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793 }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293 }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872 }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828 }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415 }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561 }, + { 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/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063 }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973 }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116 }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011 }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870 }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089 }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181 }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159 }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626 }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613 }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115 }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814 }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809 }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454 }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355 }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175 }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228 }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194 }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108 }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641 }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901 }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132 }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261 }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272 }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923 }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 }, +] + +[[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/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850 }, + { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380 }, + { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421 }, + { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149 }, + { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070 }, + { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441 }, + { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529 }, + { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276 }, + { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208 }, + { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766 }, + { 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/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436 }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301 }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197 }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275 }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469 }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961 }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282 }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468 }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394 }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964 }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029 }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541 }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197 }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175 }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427 }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929 }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193 }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388 }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316 }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, + { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266 }, + { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206 }, + { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747 }, + { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371 }, + { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862 }, + { 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 = "qubed" +version = "0.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozendict", marker = "python_full_version >= '3.11'" }, + { name = "humanize", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "objsize", marker = "python_full_version >= '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "protobuf", marker = "python_full_version >= '3.11'" }, + { name = "requests", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/a2/d4cd7fbc41fef2b308f10ed3f9c5bb1cf40f338ff3a0e37692325ba28b77/qubed-0.3.1.tar.gz", hash = "sha256:fadcf4be1668f0cfc58fcf430a15613e0f53f0df4e07fd05694c9caba39e8258", size = 15152020 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/ae/8817f6db21335200da65434aaf1adb7ab86c38f7ac88cfbaaab9a50df335/qubed-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8a5ba2af717c5225b733ec6695bc848a6507e5590ea47310c36a204b03604da8", size = 392905 }, + { url = "https://files.pythonhosted.org/packages/3c/b2/253ddba74f5703677d5ee2232b1925578266e4023f7a3aaec6a17e5fd6b4/qubed-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2f0ac5b238de53baac98ea66e1e2a21fa729baf69789fb657b578e7d1dbda5d", size = 379845 }, + { url = "https://files.pythonhosted.org/packages/95/53/06c4c8f59b587b5ce087c796d362ecd57fea6a67fb73f380c7f8f4b5403e/qubed-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6de0a6783af5f6342f7f124c5a159fc0b84c78d95d2866801d9a280cba447a46", size = 417330 }, + { url = "https://files.pythonhosted.org/packages/a1/43/33caa7eefa46c21c6b9b3d3dd96f56772a46530a27577c63a273699b0bb1/qubed-0.3.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e2f16a2c6fbf52049cde9931d2cb6777e7b63c9a2e68b949a7bd06f6bbd6e66", size = 425131 }, + { url = "https://files.pythonhosted.org/packages/e9/01/7165694535259dfacff7d78377eb66b6e4187b69decbc81558a7170a8aa4/qubed-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2202d3f948231254d6c0ad19d10577ed663983c08b92a9ca8da00989465b013", size = 544973 }, + { url = "https://files.pythonhosted.org/packages/f3/85/9a7914ccfea96d24f15df68a93dbb99ff14b4e75f1dd326df58286b38a20/qubed-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a783825a8b5415ac4ba15d3495a8330a4d78882715b90869f66ae1ee147826a4", size = 453565 }, + { url = "https://files.pythonhosted.org/packages/b9/32/9c7cf964bea589da50bb572ee3bcd07641bf7e75961a14558dbee4b1a85c/qubed-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2edde67d3710ce780b85b18eab0749ebe1c77f92251e3d0c6efbd88ae7d661", size = 428033 }, + { url = "https://files.pythonhosted.org/packages/c4/2d/458d060268a5a38635994b854507e01038186a4d96cc5b5112680d70ca3c/qubed-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c576d6bf4fd6e6b6e44c5ef67b107fb3a0bf75bac89f25eeffdb7cd846e081cb", size = 451273 }, + { url = "https://files.pythonhosted.org/packages/be/2a/abfbeaa8590c39af25e71ff6c84fc3dbd77a18629046b2ae5dc05f1b5e9f/qubed-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ae99b8d994a26452b308ecc2e7f40b3209bdcc827a9966c9451dc6e124aab0a1", size = 592940 }, + { url = "https://files.pythonhosted.org/packages/59/33/84d0b4d21a5153131b4e8a321bb959ab0309a220a875001bcb3901393564/qubed-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b0819d34638e5a31891576feaa6889f4b16aa0f159876c83694281c86b628363", size = 694999 }, + { url = "https://files.pythonhosted.org/packages/6f/87/8d1dea898d0e70a46a9c788fee66c07fdfed08ab46b99849962458a1945e/qubed-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c9a047da1cd4ee8b6c8e84e8d26cae383c46033ae7af4c8b8641a36f5b1d9c43", size = 662808 }, + { url = "https://files.pythonhosted.org/packages/35/61/ac065cd10f6109e27b57b498d539be67ac1e594e7ede519124696d5175be/qubed-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1db61763554caf12adf40095fc6fb951bd115665ac692655ceed3c3dc9aaeeeb", size = 633806 }, + { url = "https://files.pythonhosted.org/packages/72/55/3761a4acd6169fed3cbe5cf809efada6ef14aa9c6cdb7007033a5f8f300b/qubed-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8a3734e6ee8954da87ebbf319402a0ab0e16e0d64a10b5b1a1e6ee13d0eec244", size = 274537 }, + { url = "https://files.pythonhosted.org/packages/f5/e1/ade8497e74afd3e6dae8ea1d79fec46ea0c284ae25e6f96ccb1b5c687496/qubed-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2f7ad49d36086114a9c48c5bbd774ec2fe9e4fbe7064e5af70eeeed1a1696444", size = 388382 }, + { url = "https://files.pythonhosted.org/packages/48/96/00629bd9796c7438b613dbeca97ae4349694ce45a9f1998ff45d3f3f7aab/qubed-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6832cc6010c2f0fffbca3751c0204876da03e5feae294d2896acaea9482f3e6", size = 376862 }, + { url = "https://files.pythonhosted.org/packages/f5/ae/b94eee7a2de48c1fe5fcff2abeb1f0b66f0e2959d8f8319b358814be896d/qubed-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f9273475076dafcb45bb8a510dc7a3a44c81d486edaf8fda88a3da414a318cb", size = 416993 }, + { url = "https://files.pythonhosted.org/packages/ea/cc/832aa8537960349d4bb043762d57171e1256611ebda815381cabb7f92ce1/qubed-0.3.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8825a2d7e0ddaf3b841f3a746669ca8a195a86e4a0a04a5a0ce26987f4b976b1", size = 424594 }, + { url = "https://files.pythonhosted.org/packages/d8/cd/21bc5fed290401da7774fc05b32cf045dae07b208b3169924ecbb59069fb/qubed-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0758cd417772386f7ba3972c6b4a23258569e654ef5cc77f15d0d19c1db8d7d8", size = 544629 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/0c291803b21b811c1398d8d1133dc3fabc2d6a8aab1804c2b8788af5eaee/qubed-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5f3999551b6d888320002a7c7c978c75efbce8f2ad449a2ddafbf3df89f4cfd", size = 453413 }, + { url = "https://files.pythonhosted.org/packages/ac/84/8ce812bae0fc382715eaf831bc3d6fbdd10683e1c9d47e0b7f0b62df60b7/qubed-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71e33a38e02b632efb454ae2ca90e818201e6f6706485f2ac1d45e69f977f1c", size = 427902 }, + { url = "https://files.pythonhosted.org/packages/69/40/40845475c5153521783adbf80f2455fbb33ff625c29b6ba8e57555970afc/qubed-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9de33e0a06bde6068ef1f2dc1df354826c9a1e63e8263cba4be55db3e24dd7a", size = 450608 }, + { url = "https://files.pythonhosted.org/packages/6b/c0/100edf7a233d917f2979fbbe3a18e20d515df4f7564847452e71cc8e914b/qubed-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4ed3902eaf6ffaf248cdd680f52cc48ca7a9c6a259738c013c382d6d9ae9a0bf", size = 592941 }, + { url = "https://files.pythonhosted.org/packages/ec/50/18bd283574ad125576b267e37cb906399abb80a3b30eda70cf629ea0d65b/qubed-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fb8344fd7942086f1878c355f5fa3bfd7241022b3264384d72af9dc21083da9e", size = 694756 }, + { url = "https://files.pythonhosted.org/packages/c7/44/c8154bb943855c3def9537b9643a901e4be827581b1240a69846ff6811a5/qubed-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a3c85eebed4bc4b229793fb27a2cad19caddd36df4115cbe62e3f2762ac94a6", size = 662092 }, + { url = "https://files.pythonhosted.org/packages/19/69/017821dda7e5fe9b69cf5ae962668c632c83448f47c4be1a1256ac7c7fae/qubed-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2e2ad894d86d07181d7345c7555835c3fbbf16655a3adbc15368b44b407c570", size = 634032 }, + { url = "https://files.pythonhosted.org/packages/7b/be/3e853dd96781110b82e2d5ba51a14884ef7518a85578f19db1fdfee5f74e/qubed-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:71541f0d98df10e22e40c11f54867df3272436f87758e1c10c49d074571b821d", size = 274558 }, + { url = "https://files.pythonhosted.org/packages/f6/78/00920a7dab93468c6abd4364900372adf5a6e02373874fee8a048b173e2f/qubed-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0982545641cb7877c25ceefc788e2e0c5918b8d942419b1b3ebecf8ef64aa6c1", size = 388026 }, + { url = "https://files.pythonhosted.org/packages/17/32/763131474decd86745ba83d5c7c77dcb95fc6144e44d61ac26c4970c8bc3/qubed-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:26432bf22b7aeab036c763639c1874471eea8f58b69bcc789c746fcf6a0135e0", size = 376678 }, + { url = "https://files.pythonhosted.org/packages/ec/33/859744b54e692514c18d7d1c356b0dd49e01308990962b3d05edacf421f0/qubed-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5144c5f0e9929ef0219b5a06d43d58c5c111c165a21313f98892200d23a46e40", size = 417055 }, + { url = "https://files.pythonhosted.org/packages/7b/52/d3fcd58088922485566dac0c613ce54b5afb411a47ac1c0fc30f394e4d56/qubed-0.3.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7be7875347f1fab4342e503f69f2cf7ec77e23134c17ee119489a26c6abf81dc", size = 424312 }, + { url = "https://files.pythonhosted.org/packages/6b/46/0159a2f0f3a9ac907454cf5e7e9de53409470535feeab1f005a57cff9869/qubed-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6b44d86229cd4b43b524eab440ae8b3e4a1e7706815d9393c56bf02c09f25f4", size = 544218 }, + { url = "https://files.pythonhosted.org/packages/aa/06/b890c192d4d05a9ceeaacfec2c9ef1bc7f4ed5a9a88613442cd409a7103c/qubed-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0426c2cc15f126584a64df6e27ee0162d44d413493689218544b444972d67b2", size = 453095 }, + { url = "https://files.pythonhosted.org/packages/01/88/31e64cd98f079243157ced5d0a6ca3c0637e3e93982269bff5d6accd36fa/qubed-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04ed84be17ecff54a813b159b0ade5b6fe1daf9d0d3e8cce58160a71898de084", size = 427903 }, + { url = "https://files.pythonhosted.org/packages/a4/c3/6fcdde26e45c18dfaf67cad426580d9efd8b44b839db29755cc10dde7e52/qubed-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ee277521885d362a2f4282874aadaa7b5b021473cf18b62ccbab49d02490738", size = 450209 }, + { url = "https://files.pythonhosted.org/packages/87/63/8eb2f83b994ed59c6526f09b72fa8898188a0023ad0348d14bbcfdfc715c/qubed-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5e716bd15a5e614da853a0b835ad16a9c57a13f9243194abd4d7a4aabbf82dd0", size = 592620 }, + { url = "https://files.pythonhosted.org/packages/4a/be/4fe1e7634101016eef06843805633c9ec6b8e69bc40ef50190de4284271d/qubed-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:71f18b847fa9bc205368dcd176cc27e1c5c0cd4cfd74d3e2770ba422b3b14ff0", size = 694654 }, + { url = "https://files.pythonhosted.org/packages/7c/17/84cf9d4615ea0e29d8709346ffd5bed5bcfdb29baf8101949181c5239cc8/qubed-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:eeeb96bf930b2bd944c0b3145c18dda22673dcbe98af1b4fca0429c96eeefae3", size = 661802 }, + { url = "https://files.pythonhosted.org/packages/7c/27/4826d44a5a47ed4d3ba3d64f519d6ce65511239dbd613081a2b5b03a425e/qubed-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c2a3519538aae695c2a129006010d1291bf387e86b2477587dd421d07d0d111", size = 634066 }, + { url = "https://files.pythonhosted.org/packages/c9/cf/97f4ea7ca129eea1d97139e56c3af415f082f6b063a0d3da537c4cf77984/qubed-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:677f12a55d20a43beade986c45508668d93762072a7f8710dc768263832305f2", size = 274355 }, + { url = "https://files.pythonhosted.org/packages/1c/25/2d77b2aa954c7581dfe614e4edc9e213e0bc537a791567955cc89c908ea3/qubed-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bce5c3ca22b4125f7b2337072892562949c66b22060f1458f0ffc8914dea664", size = 415858 }, + { url = "https://files.pythonhosted.org/packages/cd/38/145f404396aedeb65ea110d14a74f02ab5f2c64fcf0441f196a8b509394c/qubed-0.3.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c7eeb24e4d156df188000388b8b93b8659b8ff56a3a0204eb868a63d43c9fb5d", size = 423639 }, + { url = "https://files.pythonhosted.org/packages/52/54/04beadee9ce2fb42d9cd9dead26aebfd614f01d9c57287b07406abfbc567/qubed-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57bb442de810879c2e0801b6b9e32e9ec30d37dbd02b464809523ea5294fe655", size = 543014 }, + { url = "https://files.pythonhosted.org/packages/e6/f6/37e2e0efb56b29f16d533b0bfa56fdbff94289e527e0a529e9a6547ef8b7/qubed-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:738ab71e1a714f3a3e3110e3eaac2778a5684f21515196b6b3c83843f9c5243b", size = 452627 }, + { url = "https://files.pythonhosted.org/packages/e9/aa/699a433b495665b99c4bb2dd37f4c8a15147dc955174d4a4eec3a2105fc7/qubed-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:af5e093933172f0820860b2fb4d909a6bb8b17043bf40c143088bf1529da0d26", size = 591409 }, + { url = "https://files.pythonhosted.org/packages/b2/fe/0d701edc6db7c16f50c3d41387791eae38c475d3f63677823ec5549a9b1d/qubed-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f0a5caf87d9fc853adde336759ef88e174be84b74bc29d582788fe70735dbba4", size = 694115 }, + { url = "https://files.pythonhosted.org/packages/dd/5b/3a91f3ee0de53bcdb4a6c80590243952acb891c088ddcaf066d4a209d0df/qubed-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8144ab517ef48f43c49b97d07c05d230015222f8c091bb1daac00ef62bfc74d9", size = 661144 }, + { url = "https://files.pythonhosted.org/packages/34/3e/28ab2031409540bc38f3f6e2db1d546b9d7c242755b6bf5c1ad4b7cab85a/qubed-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e164e030591f2ed0eb5525efe785ff04fc7080f0ef4ccfe8d83e25091006d709", size = 633167 }, + { url = "https://files.pythonhosted.org/packages/a3/90/8651f479d7a726bc5f25cb90f99f33420fec6355b71248eb9b266753bce9/qubed-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:49b0eec981057347991bc80b3886501ca45ee0e426843c0450a8b0710d444659", size = 387842 }, + { url = "https://files.pythonhosted.org/packages/1d/69/679e544a4fe1505b9f78f047ce1c81cf6db84b382c58d4a6ca46cfa48327/qubed-0.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97f9c034ae3ad1d7123e269c7fba225c20dbbaeebdd80803c77a69f3b010f8ff", size = 376202 }, + { url = "https://files.pythonhosted.org/packages/0b/1d/d4a5fa3a40e697f1ec8337e152cc241ec6aeff84f7514a6cfbee6b6536f5/qubed-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d154b12afffb5891beb06157b5bfc31e33d579d6a8682d866eb848bb18cc55f", size = 416737 }, + { url = "https://files.pythonhosted.org/packages/6e/66/efc34b57ee3d21334d6127b187e51a249a37484b707cbed393d464419d09/qubed-0.3.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac14223782c4f346167a23511408347cf2a5c109c07f4319a9eb8f08bb4cdd53", size = 424440 }, + { url = "https://files.pythonhosted.org/packages/c2/11/27f13777d9a4f2f0425c32cdc4f6fb528393e238768c185124abe15ff024/qubed-0.3.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e80a636152fa172ac298cb87bdae96412fa5f9e9a2149d1cb94bb4068508c941", size = 540728 }, + { url = "https://files.pythonhosted.org/packages/9a/9c/8ed6325f5c9c8ff96a41adef53f111bcf5dec51d2687afd2fac8504f19fc/qubed-0.3.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cb088a6846416ca092be5793c5191df97a94a3c3e5c43468be42b811ef14020", size = 453464 }, + { url = "https://files.pythonhosted.org/packages/b1/d6/c0dac0a00e3730130f897389d263042c26b2dd182cbffb2960b93c64007d/qubed-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a5e0cae1aba8bd95d020bc127bc404211c96a0ff66502f2bd5ff04a8fa06643", size = 427694 }, + { url = "https://files.pythonhosted.org/packages/de/e6/51e368c70bc5d3ee557b92e059fe1280330ed70d537cf8739ba71f316319/qubed-0.3.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:409c6475c99f28e372e48c9fc13284a48fffadfb6f54e531aad59d608457de41", size = 451222 }, + { url = "https://files.pythonhosted.org/packages/3a/74/5deba084e718c14509af8a4bb676785d91dc6516ac633e1b72dbf0598216/qubed-0.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:246332f045e37f6e88c773d4c8684441d0ec2a40c8ede7bae896c8ac6d513471", size = 592438 }, + { url = "https://files.pythonhosted.org/packages/28/c6/f41468881fde149c23df5bf568bac54bce9409374c76043ba19f159185c2/qubed-0.3.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2caf36b5cba258fb2f6301f879d4a16ad1a74648a0593d9f057c6b6aff603fd5", size = 694800 }, + { url = "https://files.pythonhosted.org/packages/f2/76/409605ac8bf26382d51d0e9df55344fa3cede74feaaebaf75a9fc07b221e/qubed-0.3.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4c5ce4d40840f45d2c359649a49a4fb271ec1650a162d20d5fea1c7106cb375d", size = 661966 }, + { url = "https://files.pythonhosted.org/packages/83/56/6efbbf4df4d483390c679456f87daed5e80c8f663d4d5065689ae6e8fc27/qubed-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5aa6c0d749a3186f1d4fb38e5ece4ba3513ee9cf24d182156e35fc7d637ce08", size = 634051 }, + { url = "https://files.pythonhosted.org/packages/d3/8b/65aef7336037d71978ea2e33da4a6c43262f2e31b84ee74c32e85f2aff4e/qubed-0.3.1-cp314-cp314-win32.whl", hash = "sha256:f4b7f53c722d0550a6be0e1ac148a79228f0cda2f3c32e9297b86bdd61c228d9", size = 257945 }, + { url = "https://files.pythonhosted.org/packages/9b/89/0249375839f15086a08f213d25c0aa3828e16808cf68bdb088eb01125520/qubed-0.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:c861104640c86883a5e0c8ae8682eb5eb417f4506282d36adfa9329bad26a3a7", size = 274944 }, + { url = "https://files.pythonhosted.org/packages/9a/3a/4694ed8a3a70b5ea484d8e82cb1988ddc5b19aebf9433ea5ced28263b64f/qubed-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1ba620950ed169f9d9652597181b03fe37b7febef65c18956c5032006d06886", size = 416016 }, + { url = "https://files.pythonhosted.org/packages/43/2c/56fcd7992f12856ffb6b01aa3f17b0e799ddeec6cae97eb5e632413750c3/qubed-0.3.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f76e96ae183a5f72a03f36681e995db7b9b6ecd2bce6b880135ef5f0dba51ad5", size = 423689 }, + { url = "https://files.pythonhosted.org/packages/8e/40/0a3d024e77ec6223e7256dcb92013a1ba139e569cba5dcd1470679171f1a/qubed-0.3.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d256f1db00336ce347e1d646d2e1065bdfe1d8de9b06cc60ab1e81aa5a135363", size = 544069 }, + { url = "https://files.pythonhosted.org/packages/51/de/c32a46fbe272b436681bdda6d3073308598e98af4a74f6c26e1d07c0ddf4/qubed-0.3.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c38414c20f17128d0c62de60515e54d280fb35c13a576aa0d4bbf8e8b6b7ff7", size = 452810 }, + { url = "https://files.pythonhosted.org/packages/f5/e9/3059877538ad438428d12200141e155a5e3521fbeacb361a7d95c187fb2d/qubed-0.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6dba1d9c479c79605c1d0ddb841f93b5fac94f80085a9cbdca3319b1111baadd", size = 591547 }, + { url = "https://files.pythonhosted.org/packages/2d/0d/10ac0b1f602b6f54bc57b49bb9e672b9dacb70fff960206bcd52aff0de3b/qubed-0.3.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ee0f20cd860ca67136765ef12cdcb04fafc15c0eab33ed9d733603d237d5e328", size = 693845 }, + { url = "https://files.pythonhosted.org/packages/5f/47/3ed547c0fce3f7d5e794f739783ee758f72061b792053f68d99db89d852f/qubed-0.3.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9923d183c0c71a8c2a1b3e95a40df128141cedd7cd21f73c9d9a2aa34ad58f5a", size = 661304 }, + { url = "https://files.pythonhosted.org/packages/b7/cc/fb5e887dfe9561a96bcd9969f8412736aaf8b40ea7fc76edb7f6791b7787/qubed-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5fcee6ee49265f43fb986860f105b7a2c735e8f7c80feeb02f618f1354ab1", size = 633291 }, + { url = "https://files.pythonhosted.org/packages/8a/a4/61c0893c62b70b3ae7096b51071134939ce3a7a8dc6d3be3485a14c704ef/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0525ea3e7286a2e1306c2d53cde122d596fe32c97c4b77ffb791647b6d06df40", size = 417314 }, + { url = "https://files.pythonhosted.org/packages/97/88/75d5cea6fa9af6b25e93a6fb6775199601020193c813eba624d626265b6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97b8e5a1ceabf68032b8c38a1a0fa2b425e2f137e1ae0b29d27a9b2c640d2923", size = 424549 }, + { url = "https://files.pythonhosted.org/packages/0a/79/c14068df38c8bcadb81c204e06eb4f33388c40061792346b46c55864ec6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:536e9479355758596d552314b29185f8e9606ee1fa7551b9ad71d575fe41bfa0", size = 543966 }, + { url = "https://files.pythonhosted.org/packages/34/6d/ead34b0f6aa8049b29db20bdc38c3378a1a71e6a4b3ef4d4b2b658b54774/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:288446a11cb22d194322858ebed1882d48cde40e65c40a5b2bee4d1eb204a7e0", size = 453255 }, + { url = "https://files.pythonhosted.org/packages/6c/69/e0616ec49e8bbf7b2f365b93336b63ade3e10c377a0f7921f4f78da1cc5b/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:164eed7d512094c9f6bedcbf62dcc15d78cfcf42133fb594fc68494dac0dde9b", size = 427645 }, + { url = "https://files.pythonhosted.org/packages/ed/34/3455baea73fd18b29884c9e30806b20fffaccff1b57d533091e6cf849b4a/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48790481e503e6e65d0acd2afdc085bef6cc9f876d9d6ff791c1f6ece99b1e9f", size = 450995 }, + { url = "https://files.pythonhosted.org/packages/97/d2/57842a201a430afa1f6eec433f51cfcd08601486daaf074b42a1a4047314/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c7583848ea8e79d7b78427979fe7100fd0c271cf14efadfa5cd25e9878c67850", size = 593098 }, + { url = "https://files.pythonhosted.org/packages/09/b3/dacad16f12ce515f8ad3c61ed7b6d1749f90b9c36b1a0947ef5bace5ed0c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:ab4475288640f2e380f3704fb7b44f4e6d8a8987041f6fb3cc76ecdc02e333cd", size = 694846 }, + { url = "https://files.pythonhosted.org/packages/84/e6/78473835a64ba33c2e6963c120eeff496182f81006f955c19ca7ea17e25f/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:25d8d3603b16e3202b53145150bcb8ebedce14fc42fd076d17feaf3a0de897a2", size = 662539 }, + { url = "https://files.pythonhosted.org/packages/60/7f/ab8d6582ba660b03da7617bab310f1db095a3ce622fdfcc5c2e50778208c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:cd90899b3182ecf6bfac689664be37726a1f28d06200a8b15b22fdc3b79cd72b", size = 633528 }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +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.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075 }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654 }, +] + +[[package]] +name = "rich-argparse" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/e5/1064c43203a357d668cd42435f7a15fe6af51512d85b2104fecb937aa861/rich_argparse-1.8.0.tar.gz", hash = "sha256:679df3d832fa94ad6e4bdb07ded088cd7ea2dddc58ae9b2b46346a40b06cbc0c", size = 38940 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl", hash = "sha256:d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142", size = 25616 }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +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/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490 }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751 }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696 }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136 }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699 }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022 }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522 }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579 }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305 }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503 }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322 }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792 }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901 }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823 }, + { 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/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086 }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053 }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763 }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951 }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622 }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492 }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080 }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680 }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589 }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289 }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737 }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120 }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782 }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463 }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868 }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887 }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904 }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945 }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783 }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021 }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589 }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025 }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895 }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799 }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731 }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027 }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020 }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139 }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224 }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645 }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443 }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375 }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850 }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812 }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841 }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149 }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843 }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507 }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949 }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790 }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217 }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806 }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341 }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768 }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099 }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192 }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080 }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841 }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670 }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005 }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112 }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049 }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661 }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606 }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126 }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371 }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298 }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604 }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391 }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868 }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747 }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795 }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330 }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194 }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340 }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765 }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834 }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470 }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630 }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148 }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030 }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570 }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532 }, + { 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 = "rpds-py" +version = "2026.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609 }, + { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460 }, + { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031 }, + { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121 }, + { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026 }, + { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865 }, + { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012 }, + { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111 }, + { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225 }, + { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487 }, + { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798 }, + { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053 }, + { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390 }, + { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097 }, + { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361 }, + { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040 }, + { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775 }, + { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329 }, + { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539 }, + { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674 }, + { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268 }, + { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280 }, + { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233 }, + { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009 }, + { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113 }, + { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838 }, + { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436 }, + { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734 }, + { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045 }, + { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967 }, + { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787 }, + { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179 }, + { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173 }, + { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162 }, + { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093 }, + { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829 }, + { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786 }, + { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920 }, + { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059 }, + { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030 }, + { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975 }, + { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178 }, + { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481 }, + { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519 }, + { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446 }, + { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287 }, + { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033 }, + { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891 }, + { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646 }, + { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830 }, + { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830 }, + { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613 }, + { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183 }, + { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578 }, + { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573 }, + { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861 }, + { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633 }, + { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074 }, + { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635 }, + { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756 }, + { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831 }, + { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127 }, + { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034 }, + { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823 }, + { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144 }, + { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959 }, + { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558 }, + { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789 }, + { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405 }, + { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975 }, + { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701 }, + { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806 }, + { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985 }, + { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219 }, + { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148 }, + { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196 }, + { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981 }, + { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961 }, + { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965 }, + { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526 }, + { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190 }, + { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921 }, + { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766 }, + { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343 }, + { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502 }, + { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916 }, + { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855 }, + { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422 }, + { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576 }, + { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640 }, + { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322 }, + { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066 }, + { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586 }, + { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415 }, + { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427 }, + { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615 }, + { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786 }, + { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583 }, + { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941 }, + { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349 }, + { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922 }, + { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003 }, + { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245 }, + { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015 }, + { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016 }, + { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775 }, + { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270 }, + { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285 }, + { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581 }, + { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041 }, + { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946 }, + { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526 }, + { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165 }, + { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778 }, + { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839 }, + { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866 }, + { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441 }, + { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151 }, + { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195 }, + { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850 }, + { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899 }, + { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618 }, + { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003 }, + { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778 }, + { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359 }, + { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820 }, + { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243 }, + { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541 }, + { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326 }, +] + +[[package]] +name = "scikit-learn" +version = "1.7.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "joblib", marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "threadpoolctl", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/3e/daed796fd69cce768b8788401cc464ea90b306fb196ae1ffed0b98182859/scikit_learn-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b33579c10a3081d076ab403df4a4190da4f4432d443521674637677dc91e61f", size = 9336221 }, + { url = "https://files.pythonhosted.org/packages/1c/ce/af9d99533b24c55ff4e18d9b7b4d9919bbc6cd8f22fe7a7be01519a347d5/scikit_learn-1.7.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:36749fb62b3d961b1ce4fedf08fa57a1986cd409eff2d783bca5d4b9b5fce51c", size = 8653834 }, + { url = "https://files.pythonhosted.org/packages/58/0e/8c2a03d518fb6bd0b6b0d4b114c63d5f1db01ff0f9925d8eb10960d01c01/scikit_learn-1.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7a58814265dfc52b3295b1900cfb5701589d30a8bb026c7540f1e9d3499d5ec8", size = 9660938 }, + { url = "https://files.pythonhosted.org/packages/2b/75/4311605069b5d220e7cf5adabb38535bd96f0079313cdbb04b291479b22a/scikit_learn-1.7.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a847fea807e278f821a0406ca01e387f97653e284ecbd9750e3ee7c90347f18", size = 9477818 }, + { url = "https://files.pythonhosted.org/packages/7f/9b/87961813c34adbca21a6b3f6b2bea344c43b30217a6d24cc437c6147f3e8/scikit_learn-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:ca250e6836d10e6f402436d6463d6c0e4d8e0234cfb6a9a47835bd392b852ce5", size = 8886969 }, + { url = "https://files.pythonhosted.org/packages/43/83/564e141eef908a5863a54da8ca342a137f45a0bfb71d1d79704c9894c9d1/scikit_learn-1.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7509693451651cd7361d30ce4e86a1347493554f172b1c72a39300fa2aea79e", size = 9331967 }, + { url = "https://files.pythonhosted.org/packages/18/d6/ba863a4171ac9d7314c4d3fc251f015704a2caeee41ced89f321c049ed83/scikit_learn-1.7.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:0486c8f827c2e7b64837c731c8feff72c0bd2b998067a8a9cbc10643c31f0fe1", size = 8648645 }, + { url = "https://files.pythonhosted.org/packages/ef/0e/97dbca66347b8cf0ea8b529e6bb9367e337ba2e8be0ef5c1a545232abfde/scikit_learn-1.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89877e19a80c7b11a2891a27c21c4894fb18e2c2e077815bcade10d34287b20d", size = 9715424 }, + { url = "https://files.pythonhosted.org/packages/f7/32/1f3b22e3207e1d2c883a7e09abb956362e7d1bd2f14458c7de258a26ac15/scikit_learn-1.7.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8da8bf89d4d79aaec192d2bda62f9b56ae4e5b4ef93b6a56b5de4977e375c1f1", size = 9509234 }, + { url = "https://files.pythonhosted.org/packages/9f/71/34ddbd21f1da67c7a768146968b4d0220ee6831e4bcbad3e03dd3eae88b6/scikit_learn-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:9b7ed8d58725030568523e937c43e56bc01cadb478fc43c042a9aca1dacb3ba1", size = 8894244 }, + { url = "https://files.pythonhosted.org/packages/a7/aa/3996e2196075689afb9fce0410ebdb4a09099d7964d061d7213700204409/scikit_learn-1.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8d91a97fa2b706943822398ab943cde71858a50245e31bc71dba62aab1d60a96", size = 9259818 }, + { url = "https://files.pythonhosted.org/packages/43/5d/779320063e88af9c4a7c2cf463ff11c21ac9c8bd730c4a294b0000b666c9/scikit_learn-1.7.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:acbc0f5fd2edd3432a22c69bed78e837c70cf896cd7993d71d51ba6708507476", size = 8636997 }, + { url = "https://files.pythonhosted.org/packages/5c/d0/0c577d9325b05594fdd33aa970bf53fb673f051a45496842caee13cfd7fe/scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b", size = 9478381 }, + { url = "https://files.pythonhosted.org/packages/82/70/8bf44b933837ba8494ca0fc9a9ab60f1c13b062ad0197f60a56e2fc4c43e/scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44", size = 9300296 }, + { url = "https://files.pythonhosted.org/packages/c6/99/ed35197a158f1fdc2fe7c3680e9c70d0128f662e1fee4ed495f4b5e13db0/scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290", size = 8731256 }, + { url = "https://files.pythonhosted.org/packages/ae/93/a3038cb0293037fd335f77f31fe053b89c72f17b1c8908c576c29d953e84/scikit_learn-1.7.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b7dacaa05e5d76759fb071558a8b5130f4845166d88654a0f9bdf3eb57851b7", size = 9212382 }, + { url = "https://files.pythonhosted.org/packages/40/dd/9a88879b0c1104259136146e4742026b52df8540c39fec21a6383f8292c7/scikit_learn-1.7.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:abebbd61ad9e1deed54cca45caea8ad5f79e1b93173dece40bb8e0c658dbe6fe", size = 8592042 }, + { url = "https://files.pythonhosted.org/packages/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f", size = 9434180 }, + { url = "https://files.pythonhosted.org/packages/f1/fd/df59faa53312d585023b2da27e866524ffb8faf87a68516c23896c718320/scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0", size = 9283660 }, + { url = "https://files.pythonhosted.org/packages/a7/c7/03000262759d7b6f38c836ff9d512f438a70d8a8ddae68ee80de72dcfb63/scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c", size = 8702057 }, + { url = "https://files.pythonhosted.org/packages/55/87/ef5eb1f267084532c8e4aef98a28b6ffe7425acbfd64b5e2f2e066bc29b3/scikit_learn-1.7.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9acb6c5e867447b4e1390930e3944a005e2cb115922e693c08a323421a6966e8", size = 9558731 }, + { url = "https://files.pythonhosted.org/packages/93/f8/6c1e3fc14b10118068d7938878a9f3f4e6d7b74a8ddb1e5bed65159ccda8/scikit_learn-1.7.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:2a41e2a0ef45063e654152ec9d8bcfc39f7afce35b08902bfe290c2498a67a6a", size = 9038852 }, + { url = "https://files.pythonhosted.org/packages/83/87/066cafc896ee540c34becf95d30375fe5cbe93c3b75a0ee9aa852cd60021/scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c", size = 9527094 }, + { url = "https://files.pythonhosted.org/packages/9c/2b/4903e1ccafa1f6453b1ab78413938c8800633988c838aa0be386cbb33072/scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c", size = 9367436 }, + { url = "https://files.pythonhosted.org/packages/b5/aa/8444be3cfb10451617ff9d177b3c190288f4563e6c50ff02728be67ad094/scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973", size = 9275749 }, + { url = "https://files.pythonhosted.org/packages/d9/82/dee5acf66837852e8e68df6d8d3a6cb22d3df997b733b032f513d95205b7/scikit_learn-1.7.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fa8f63940e29c82d1e67a45d5297bdebbcb585f5a5a50c4914cc2e852ab77f33", size = 9208906 }, + { url = "https://files.pythonhosted.org/packages/3c/30/9029e54e17b87cb7d50d51a5926429c683d5b4c1732f0507a6c3bed9bf65/scikit_learn-1.7.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:f95dc55b7902b91331fa4e5845dd5bde0580c9cd9612b1b2791b7e80c3d32615", size = 8627836 }, + { url = "https://files.pythonhosted.org/packages/60/18/4a52c635c71b536879f4b971c2cedf32c35ee78f48367885ed8025d1f7ee/scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106", size = 9426236 }, + { url = "https://files.pythonhosted.org/packages/99/7e/290362f6ab582128c53445458a5befd471ed1ea37953d5bcf80604619250/scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61", size = 9312593 }, + { url = "https://files.pythonhosted.org/packages/8e/87/24f541b6d62b1794939ae6422f8023703bbf6900378b2b34e0b4384dfefd/scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8", size = 8820007 }, +] + +[[package]] +name = "scikit-learn" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "joblib", marker = "python_full_version >= '3.11'" }, + { name = "narwhals", marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "threadpoolctl", marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/be/e844fd9586e66540a15b71924d17a6cbc1bb749e81ddd0a796bcdba4c055/scikit_learn-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9db6f4d34e68c8899e4cab27fdf8eafe6ed21f2ba52ceb25ea250cd237f8e47b", size = 8789686 }, + { url = "https://files.pythonhosted.org/packages/42/e2/ff880f62677a17d035817d543cb0fc8727d01eccbee81c5f7fc733a9d856/scikit_learn-1.9.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f401448645a3e7bc115aa3c094097865155b34bff1cba8101857d9104e99074c", size = 8256782 }, + { url = "https://files.pythonhosted.org/packages/25/64/eb40435e1a508ab1b4e284ce43ae80f6a162e5be5e38ed5a6fab467a9ea4/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd3a8ef0c758555a3b23c03adaa858af32f7736785ded50ad5991f59c4ed03fa", size = 8992419 }, + { url = "https://files.pythonhosted.org/packages/8d/da/4810a28e473185429e45a57eebcc91fc991b33d889cc0676063e671db03d/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7e254636164090da847715a27f8e5478feb98c40a9e0ee90cbd277de9e5ceb8", size = 9281411 }, + { url = "https://files.pythonhosted.org/packages/3b/67/be3d369f40d8178ba3bd86635d132e08cb5329b023e4669d9426d84bc007/scikit_learn-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:5dc1818c77575d149e25fce9ef82dd7b7263ae372f03494158668ad632a69759", size = 8272736 }, + { url = "https://files.pythonhosted.org/packages/37/79/a733f02dc2118da7e77a134b34f39f40201a353311b011d20859d2db3556/scikit_learn-1.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:366652351f092b219c248f1e72821e841960a63d8f358f1dcfd54dc1cbdbbc28", size = 7919564 }, + { url = "https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2bd41b0d201bc81575531b96b713d3eb5e5f50fb0b82101ff0f92294fdc236ac", size = 8741122 }, + { url = "https://files.pythonhosted.org/packages/cc/d5/2b5148f2279196775e1db2aeb85d14b70ac80e7e32b3b28e7ebeafb0901d/scikit_learn-1.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5be45aa4a42a68a533913a6ed736cf309de2226411c79ef8d609a5456f1939b1", size = 8261512 }, + { url = "https://files.pythonhosted.org/packages/a0/ee/5adbc77656b71f9456a2f5a7a9fdb4bcf9207a6b962889f1c2f9323afa4e/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e50ed4da51974e86e940690e9a3d82e729b62b5a49f7c9bac534d515d39d86f", size = 8837603 }, + { url = "https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8", size = 9132097 }, + { url = "https://files.pythonhosted.org/packages/83/a4/c8e67227c680e2259c8864ae72ff48b06e16a6f51253a22167aa02a8aa4e/scikit_learn-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:4306775fad04cc4b472a1b15af1ae9cede1540fbfcc17fbce3767cd8dc7ae283", size = 8211173 }, + { url = "https://files.pythonhosted.org/packages/cf/fd/3c0863792e98e67e9184aa4029288a175935eb65443afcd30d4f143450cf/scikit_learn-1.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:26e22435f63bcdcf396b574273f29f13dd531f5ea035801f5be10ba1540a4e60", size = 7867451 }, + { url = "https://files.pythonhosted.org/packages/3c/01/cf3310626b6d48d3e9be69a1223f9180360b5e6edb045f50fade723ce494/scikit_learn-1.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:80746d63bd4b6eaca54d36fe5feaf4d28bb38dc6f9470f81c7cad7c40155f119", size = 8705188 }, + { url = "https://files.pythonhosted.org/packages/3e/04/5acd7ae280c5f93b6ac5ef6cdec14eef4c8d1cd91d85b3292989c94d96b1/scikit_learn-1.9.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5b934c45c252844a91d69fda3a34cff5e7307e1db10d77cb10a3980312c74713", size = 8228299 }, + { url = "https://files.pythonhosted.org/packages/0c/39/ffe829a5b8ecb40a518724a997794657fdc354ada5e8fe8e64d998c0bac9/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:38c3dcb9a1ffb85505ec53d54c7b4aea0cff70050425a7760c2af661ac85df05", size = 8789690 }, + { url = "https://files.pythonhosted.org/packages/1f/88/8dab5de10c638c083772a6be83a3d8106ced492f74a928c8693638e5bb50/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da76d09304a4706db7cc1e3ebaa3b6b98a67365cc11d2996c4f1e58ba47df714", size = 9087723 }, + { url = "https://files.pythonhosted.org/packages/20/3f/7917ca72464038f6240ec70c29f94862d08a34a74291ae4d4ec5eb8186a0/scikit_learn-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5808d98f15c6bf6d9d96d2348c1997392a5888ce7097e664105f930c4bca1277", size = 8184330 }, + { url = "https://files.pythonhosted.org/packages/78/c7/15739eb2f61fda3c54639e9942414e5a19ad8a8d1f5a3266afad7cb7df80/scikit_learn-1.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:d77f54c017633791bc0225a43e2f8d03745fdcfe4880268fcc4df15f505dec2e", size = 7840653 }, + { url = "https://files.pythonhosted.org/packages/f4/7d/c9a35cf59b20a86fec24d306f1547b78dec194b08d367ce2a3e4854169d9/scikit_learn-1.9.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9656acd4e93f74e0b66c8a36c88830a99252dfa900044d36bc2212ae89a47162", size = 8713289 }, + { url = "https://files.pythonhosted.org/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:24360002ae845e7866522b0a5bbf690802e7bc388cac8663502e78aa98598aa2", size = 8245141 }, + { url = "https://files.pythonhosted.org/packages/7d/79/f4a0c4fe9711154cddabf913471153af79056382ddc612cfe5ee0ff4b72e/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5162ad10a418c8a282dde04c9aa06965de3e9a65f33c1440c0ae69bb1a09d913", size = 8847671 }, + { url = "https://files.pythonhosted.org/packages/f0/af/4d72d9e475ac83719160c662619e4bf7b95c19507cd582e7d0167a3c3dae/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fea2cc5677ab49d6f5bade978c866da44957b712d92e9635e8b4f723013c3cb", size = 9118104 }, + { url = "https://files.pythonhosted.org/packages/a2/d5/6a58eea2cb9abbb9b3f2bb8b2cfb3243d1152d69f442d256c7af71304769/scikit_learn-1.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:64fa347efc1c839c487433e40c5144d38c336e8a2b59c81aa8660373945c2673", size = 8290674 }, + { url = "https://files.pythonhosted.org/packages/65/5b/d4c879cf358f1187141cf90ced473f087183489090244f50c124a2ee478b/scikit_learn-1.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:1b944b6db288f6b926e3650026ddafb988929de95d11fc2cc5fa117773c9ba42", size = 7978807 }, + { url = "https://files.pythonhosted.org/packages/8a/43/bfae3121ec67ae09150d453c442c7c1cc166e9aefe056e6ab3b7728a5cfc/scikit_learn-1.9.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4ccacf04ca5f4b492158a5f28afe0ace43f81b2571e4b9a66d34848b46128949", size = 9031941 }, + { url = "https://files.pythonhosted.org/packages/75/b0/20a4546eb17f3b25d3c66df15810411c14ed5065bcfab50b53c96fb627b2/scikit_learn-1.9.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:ee1a8db2c18c08e34c7412d4b10be1cac214cd4ea7dc9715a6a327eb49a37c96", size = 8613528 }, + { url = "https://files.pythonhosted.org/packages/18/3c/e440e039bb82cd19004edaaad00acbde0fb9b461083c3ecf37941c557312/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:147e9329ef0e39f75d4cffa02b2aa48d827832684926cd5210d9a2cb5c57246b", size = 8855050 }, + { url = "https://files.pythonhosted.org/packages/43/26/b341b8dab5998da6270a3a42c2152c578501354d36f944b5856757035ef8/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bad8f8b9950321b54c965fdcbac6c6c55e79e16646b49977bcf3668d3870a1a", size = 9097190 }, + { url = "https://files.pythonhosted.org/packages/fb/de/b650b4d69b84468cfa2e28a3ff7b8103743029e6446ce1a97fe060ef688c/scikit_learn-1.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:78fc56eafd4edb9575d2d8950d1dd152061abb573341a1cb7e099fc40f6c6666", size = 8963204 }, + { url = "https://files.pythonhosted.org/packages/ee/f3/ff83d76d7418112e5a61326443cdda87be3545dd8d6599c95b2481a4419e/scikit_learn-1.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa", size = 8222661 }, +] + +[[package]] +name = "scipy" +version = "1.15.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770 }, + { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511 }, + { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151 }, + { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732 }, + { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617 }, + { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964 }, + { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749 }, + { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383 }, + { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201 }, + { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255 }, + { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035 }, + { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499 }, + { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602 }, + { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415 }, + { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622 }, + { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796 }, + { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684 }, + { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504 }, + { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735 }, + { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284 }, + { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958 }, + { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454 }, + { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199 }, + { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455 }, + { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140 }, + { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549 }, + { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184 }, + { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256 }, + { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540 }, + { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115 }, + { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884 }, + { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018 }, + { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716 }, + { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342 }, + { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869 }, + { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851 }, + { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011 }, + { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407 }, + { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030 }, + { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709 }, + { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045 }, + { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062 }, + { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132 }, + { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503 }, + { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097 }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675 }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057 }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032 }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533 }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057 }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300 }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333 }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314 }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512 }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248 }, + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954 }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662 }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366 }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017 }, + { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842 }, + { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890 }, + { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557 }, + { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856 }, + { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682 }, + { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340 }, + { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199 }, + { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001 }, + { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719 }, + { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595 }, + { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429 }, + { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952 }, + { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063 }, + { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449 }, + { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943 }, + { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621 }, + { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708 }, + { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135 }, + { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977 }, + { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601 }, + { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667 }, + { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159 }, + { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771 }, + { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910 }, + { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980 }, + { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543 }, + { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510 }, + { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131 }, + { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032 }, + { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766 }, + { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007 }, + { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333 }, + { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066 }, + { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763 }, + { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984 }, + { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877 }, + { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750 }, + { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858 }, + { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723 }, + { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098 }, + { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397 }, + { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163 }, + { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291 }, + { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317 }, + { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327 }, + { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165 }, +] + +[[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 = "sortedcontainers" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575 }, +] + +[[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 = "tblib" +version = "3.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f4/8a/14c15ae154895cc131174f858c707790d416c444fc69f93918adfd8c4c0b/tblib-3.2.2.tar.gz", hash = "sha256:e9a652692d91bf4f743d4a15bc174c0b76afc750fe8c7b6d195cc1c1d6d2ccec", size = 35046 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/be/5d2d47b1fb58943194fb59dcf222f7c4e35122ec0ffe8c36e18b5d728f0b/tblib-3.2.2-py3-none-any.whl", hash = "sha256:26bdccf339bcce6a88b2b5432c988b266ebbe63a4e593f6b578b1d2e723d2b76", size = 12893 }, +] + +[[package]] +name = "termcolor" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/79/cf31d7a93a8fdc6aa0fbb665be84426a8c5a557d9240b6239e9e11e35fc5/termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5", size = 14434 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/d1/8bb87d21e9aeb323cc03034f5eaf2c8f69841e40e4853c2627edf8111ed3/termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5", size = 7734 }, +] + +[[package]] +name = "thermofeel" +version = "2.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/9b/467dc4de053aa5ba379ecc9ac000c62551520fc4bcc1a079ddbdbaebfa11/thermofeel-2.1.7.tar.gz", hash = "sha256:f034ffa8d8d096416cd94cc234a67db8afc2ae72ca872144c59e9fc104b09073", size = 38251 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/4b/90bb6dfe1828aae53d99c7fdbf5232f2a0037d9d30b2ac946c50366da319/thermofeel-2.1.7-py3-none-any.whl", hash = "sha256:ede7e3c4cb818803173468cb9a6b9ca9c91fc310fa93978eba24505bf9baa9e0", size = 42533 }, +] + +[[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 = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704 }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454 }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561 }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824 }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227 }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859 }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204 }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084 }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285 }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924 }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018 }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948 }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341 }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159 }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290 }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141 }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847 }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088 }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866 }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887 }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704 }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628 }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180 }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674 }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976 }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755 }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265 }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726 }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859 }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713 }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084 }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973 }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223 }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973 }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082 }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490 }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263 }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736 }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717 }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461 }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855 }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144 }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683 }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196 }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393 }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, +] + +[[package]] +name = "toolz" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093 }, +] + +[[package]] +name = "tornado" +version = "6.5.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/57/6d7303a77ae439d9189108f76c0c4fd89ee5e2cc8387bffb55232565c4ed/tornado-6.5.6.tar.gz", hash = "sha256:9a365179fe8ff6b8766f602c0f67c185d778193e9bdd828b19f0b6ed7764177d", size = 518139 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/0d/b4f481e18c5a51864e6d12b9a05ecf72919696680b747c958c3fc1f4fbae/tornado-6.5.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:65fcfaafb079435c2c19dc9e07c0f1cf0fa9051759ed0a7d0a3ba7ea7f64919c", size = 447737 }, + { url = "https://files.pythonhosted.org/packages/9e/9c/5430c39fcab1144d35860f457b15e9c08b4bc7ac86764354204e983d6183/tornado-6.5.6-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:38bc01b4acacded2de63ae78023548e41ebe6fbed3ec05a796d7ae3ad893887e", size = 445899 }, + { url = "https://files.pythonhosted.org/packages/8b/79/fa7e14a2f939c807a8d30619b4eb604eab219601b78792516ebe22d40cf9/tornado-6.5.6-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b942e6a137fda31ff54bf8e6e2c8d1c37f1f50583f3ed53fb840b53b9601d104", size = 448964 }, + { url = "https://files.pythonhosted.org/packages/a7/71/bd67d5f5199f937dafe03a49a37989f60f600ff6fef34c79412a829d97bd/tornado-6.5.6-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8666946e70171b8c3f1fc9b7876fac492e84822c4c7f3746f4e8f8bc9ac92a79", size = 449935 }, + { url = "https://files.pythonhosted.org/packages/cc/a4/c24388c9cf5b3c3a513b56a158af9f23092c9a2810d789e294310797df21/tornado-6.5.6-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c34cfab7ad6d104f052f55de06d39bbafc5885cfeb4da688803308dbcfa90b7", size = 449767 }, + { url = "https://files.pythonhosted.org/packages/a5/eb/6a07ad550c3f7b37244bd0becdf293ec3d3e961783d8b720a97df50de1b2/tornado-6.5.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:385f35e4e22fb52551dfcda4cdc8c30c61c2c001aef5ddad99cdfe116952efd3", size = 449174 }, + { url = "https://files.pythonhosted.org/packages/bb/84/3469e098dccdb6763130e06aacd786bb4363fca7b590a55c101ddf34ed30/tornado-6.5.6-cp39-abi3-win32.whl", hash = "sha256:db475f1b67b2809b10bb16264829087724ca8d24fe4ed47f7b8675cae453ef86", size = 450230 }, + { url = "https://files.pythonhosted.org/packages/d2/3c/273a04e0b9dd9016f1685cca0c1c8795a71ac88a34a8c889a0b443483226/tornado-6.5.6-cp39-abi3-win_amd64.whl", hash = "sha256:6739bf1e8eb09230f1280ddbd3236f0309db70f2c551a8dbc40f62babdf82f79", size = 450667 }, + { url = "https://files.pythonhosted.org/packages/02/98/0cffe22a224f60c5fb1e3aa0b76f9da2e1ca78b0e9545e3d077c68ce60a7/tornado-6.5.6-cp39-abi3-win_arm64.whl", hash = "sha256:2543597b24a695d72338a9a77818362d72387c03ae173f1f169eadc5c91466ac", size = 449690 }, +] + +[[package]] +name = "tqdm" +version = "4.68.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/b3/36c8ecf72e8925200671613332db156d84b99b3aee742a41c1938ebb0808/tqdm-4.68.1.tar.gz", hash = "sha256:fc163d96b287bd031e1aa24421ce4411b25559bd0a1be4fe649bdaa4d2c02bf5", size = 171236 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/aa/218a0eb34de1f753c83e4d0d1c8e7c4cef27f20dcb8342e024f63a80dc86/tqdm-4.68.1-py3-none-any.whl", hash = "sha256:fea4a90e4023f764914569f7802a297277c5ab1a66be5144143e142e1a4031d8", size = 78354 }, +] + +[[package]] +name = "traitlets" +version = "5.15.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858 }, +] + +[[package]] +name = "ty" +version = "0.0.44" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/f4/fbb120226e4f239652525a664bad976a23fea58c646d1323f2296fee8a61/ty-0.0.44.tar.gz", hash = "sha256:5886229830ab77022842a1c55d2ef57405621a91fc465969fa6d538661898173", size = 5803665 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/c6/b5b8c4762efb4d85401652658786506867553ecfc2beac3bcf361a15937f/ty-0.0.44-py3-none-linux_armv6l.whl", hash = "sha256:272d31e7ad49b1dc5e8465a9fe700354e14c755b40d9c75f08f031d786903df3", size = 11607267 }, + { url = "https://files.pythonhosted.org/packages/1c/5c/f4b405570737f44ab0fc4214117fe43353f8f0825a1823d9e99e9c8e57be/ty-0.0.44-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b92c4ddd7a3daf2049715edec9dc70cf6fd31a5a318ee647258f90dd75495eed", size = 11382826 }, + { url = "https://files.pythonhosted.org/packages/9d/aa/fb9835aa492b148d7754cb4c3db07f31a7e2e09f0d8e0e8e297f01125dd2/ty-0.0.44-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4d42cfd84a690f6654b2a4f0515027c21b692cf2512d32e6433f754893a95609", size = 10809741 }, + { url = "https://files.pythonhosted.org/packages/47/f5/0b20ba6b66837a5a37bab7f74ac0732c66e766b5f0b2d55b30816b15f348/ty-0.0.44-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc47ae87e4cb7db2a9166bb23b78a905c3626e523296ec5bccf36b5e89bda6b", size = 11318153 }, + { url = "https://files.pythonhosted.org/packages/ca/bb/b82ea730774a4f950f06d355fbc120d51eac7da23b57fc79ef6ff7c79cbb/ty-0.0.44-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46d867e80f16f421ac72c9a85240dbf050d62d9b3fbd10a8b5b082fb21679e0b", size = 11403108 }, + { url = "https://files.pythonhosted.org/packages/8b/41/e2c83856165291049c702eda4e2ef3d3ebd875e8a0a77b8cc4ef3156aa1c/ty-0.0.44-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:411f5de0f96a4e4e5cccc3e0d55954c41f6a99ee6ca1fe5a7226cbc68406e053", size = 11944815 }, + { url = "https://files.pythonhosted.org/packages/66/95/1fa6a101eb9d5bec042b87e5ca9c8fc349b75961beca6306f95af5cd5539/ty-0.0.44-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b15f01ecb4e2b46c05a1769293f9d32c3d4a1e4e7dfccf37c604d705dc3e3f4", size = 12476121 }, + { url = "https://files.pythonhosted.org/packages/72/6a/da4b45b1229d39207c6140681c2aaf4f5691bcb1dc830b84450ca25c8f57/ty-0.0.44-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:edd32b7467af509c99c0244c2226a4e4c03400699003ec33373282ab931654d9", size = 12091340 }, + { url = "https://files.pythonhosted.org/packages/16/c7/e1c9260ea5188195962ff1214ace418b5d69187e8fa7c0a1ec4994b8071b/ty-0.0.44-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503a585f4007387c3afc58bae23a7ca1b9f236cbdb1a881dc36110655ceb1937", size = 11986201 }, + { url = "https://files.pythonhosted.org/packages/92/f9/312bb112da9b1a7da295bb0426be85e72ad48da4e4266c36d77256b4058d/ty-0.0.44-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d28bcfa83243d77c2316944e8cf197f73597bf17d1ddc047d0b10a762531252", size = 12168475 }, + { url = "https://files.pythonhosted.org/packages/02/de/64978d603f6c3e5dd7cb97eca2214567d8ad0c85fa4a7435b7852ae4b779/ty-0.0.44-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:56fd2dd0192def189715b25f5338f6222fb827884dc34111e50aa1c4e061cee5", size = 11292937 }, + { url = "https://files.pythonhosted.org/packages/64/63/a625d8a3c71dcaa01988d330f849c465fe72ead4b0bbab44fe4bd6e672b5/ty-0.0.44-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7f8d990489032de1984e73c159f3e760d754cf83a602b874827d943821f63595", size = 11421560 }, + { url = "https://files.pythonhosted.org/packages/99/96/61aeba0e629b0c91bd316ff94d00e38817ec493ae4316f39508988daa287/ty-0.0.44-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f61ffe72996a755432922fe90b28db593f572eb5cbf48e3ef4e67b282533d1b0", size = 11580282 }, + { url = "https://files.pythonhosted.org/packages/fa/f7/256e1538ce21cab67b381201444c42454de69d310059c4929d92a0ee9c48/ty-0.0.44-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2b237a143bac4f30cec9257d45f01e72da97030a80a09a2b69cfef065f09c37f", size = 12085723 }, + { url = "https://files.pythonhosted.org/packages/d3/76/ec3957c10872643a98db7a7895101ad89c5b7cba4bc6c4aebbbfc91756cc/ty-0.0.44-py3-none-win32.whl", hash = "sha256:6a24586c65419223ac5bab4822d49ab493a5d19ea2a897514284c232b9d6166a", size = 10892978 }, + { url = "https://files.pythonhosted.org/packages/a5/7d/ba24050432196e7d7f03945e5c379951593c48e04e5c5d5275cfc4624791/ty-0.0.44-py3-none-win_amd64.whl", hash = "sha256:8cccb27e348c89a9733fbad1b2efadfbad79b107c7e52adb52dfd8a70156a38d", size = 11987058 }, + { url = "https://files.pythonhosted.org/packages/71/34/16ec3f1fec75292d9c56a8b5fef037ceaba85a5c30562206c1a245a00a67/ty-0.0.44-py3-none-win_arm64.whl", hash = "sha256:58049504e7a12bf1957f24a5384a332c94d5590127083a80db5e5a1bed34190b", size = 11329961 }, +] + +[[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 = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611 }, +] + +[[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 = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087 }, +] + +[[package]] +name = "wcwidth" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/b4/51fe890511f0f242d07cb1ebe6a5b6db417262b9d2568b460347c57d95cc/wcwidth-0.8.1.tar.gz", hash = "sha256:faf5b4a5366a72dc49cad48cdf21f52bdf63bdda995178e483ba247ff79089b9", size = 1466072 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/6e/95b0e537de1f4d4301f76f944642c6da50d1511cc7b3d64dc418a66c7509/wcwidth-0.8.1-py3-none-any.whl", hash = "sha256:f453740b1e4a4f3291faa37944c555d71056c4da08d59809b307ef4feba695c8", size = 323092 }, +] + +[[package]] +name = "wget" +version = "3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/6a/62e288da7bcda82b935ff0c6cfe542970f04e29c756b0e147251b2fb251f/wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061", size = 10857 } + +[[package]] +name = "xarray" +version = "2025.6.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739 }, +] + +[[package]] +name = "xarray" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326 }, +] + +[[package]] +name = "zict" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/ac/3c494dd7ec5122cff8252c1a209b282c0867af029f805ae9befd73ae37eb/zict-3.0.0.tar.gz", hash = "sha256:e321e263b6a97aafc0790c3cfb3c04656b7066e6738c37fffcca95d803c9fba5", size = 33238 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl", hash = "sha256:5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae", size = 43332 }, +] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238 }, +] From fb5f7604fb84cd133f390c95490aeab042a761d9 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 9 Jun 2026 10:23:03 +0000 Subject: [PATCH 10/95] Fix workflow --- .github/workflows/ci.yml | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fa9a4e59..675d846c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,15 @@ name: ci on: + # Trigger the workflow manually + workflow_dispatch: ~ + push: - branches: [ main, develop ] - pull_request: - branches: [ main, develop ] + branches: + - 'main' + - 'develop' + + pull_request: ~ jobs: quality_assurance: @@ -22,9 +27,6 @@ jobs: steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v7 - - name: Set up Python ${{ matrix.python-version }} - with: - python-version: ${{ matrix.python-version }} - name: Run checks and tests run: | cd pproc-runtime @@ -46,9 +48,6 @@ jobs: steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v7 - - name: Set up Python ${{ matrix.python-version }} - with: - python-version: ${{ matrix.python-version }} - name: Run checks and tests run: | cd pproc-core @@ -65,14 +64,9 @@ jobs: fail-fast: true matrix: python-version: ['3.11', '3.12', '3.13'] - steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v7 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - name: Run pproc tests run: | cd pproc From 1d30dd7a8d7fc4f6ce51d359de6a05e3dacddc21 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 22 Jun 2026 10:01:16 +0000 Subject: [PATCH 11/95] Add pproc-core entrypoints and v3 tests --- pproc-core/.gitignore | 1 + pproc-core/pyproject.toml | 6 + .../plugins/pproc/config/__init__.py | 88 ----- .../plugins/pproc/config/accumulation.py | 45 +++ .../plugins/pproc/config/ensemble.py | 43 --- .../workflows/plugins/pproc/config/mask.py | 19 + .../plugins/pproc/config/threshold.py | 28 ++ .../workflows/plugins/pproc/fluent.py | 332 +++++++++--------- .../plugins/pproc/metadata/accumulation.py | 49 +++ .../plugins/pproc/metadata/threshold.py | 84 +++++ .../workflows/plugins/pproc/products.py | 152 -------- .../workflows/plugins/pproc/templates.py | 39 -- .../workflows/plugins/pproc/utils/metadata.py | 49 ++- pproc-core/src/ppcore/config.py | 206 +++++++++++ pproc-core/src/ppcore/config/threshold.py | 111 ------ pproc-core/src/ppcore/configs/__init__.py | 44 +++ .../src/ppcore/configs/common/__init__.py | 0 .../src/ppcore/configs/common/accumulation.py | 44 +++ pproc-core/src/ppcore/configs/common/input.py | 86 +++++ .../src/ppcore/configs/common/output.py | 76 ++++ .../common}/preprocessing.py | 38 +- .../src/ppcore/configs/common/source.py | 24 ++ pproc-core/src/ppcore/configs/common/stats.py | 45 +++ .../src/ppcore/configs/common/target.py | 40 +++ .../src/ppcore/configs/entrypoint/base.py | 42 +++ .../ppcore/configs/entrypoint/execution.py | 16 + .../src/ppcore/configs/entrypoint}/log.py | 0 .../src/ppcore/configs/product/__init__.py | 62 ++++ .../configs/product}/anomaly.py | 56 ++- .../src/ppcore/configs/product/ensemble.py | 60 ++++ .../configs/product}/extreme.py | 47 ++- pproc-core/src/ppcore/configs/utils.py | 5 + pproc-core/src/ppcore/product.py | 47 +++ pproc-core/src/ppcore/products/__init__.py | 66 ++++ pproc-core/src/ppcore/products/base.py | 18 + pproc-core/src/ppcore/products/ensemble.py | 123 +++++++ pproc-core/src/ppcore/schema/config.py | 2 +- pproc-core/src/ppcore/schema/input.py | 34 +- pproc-core/src/ppcore/schema/schema.py | 2 +- pproc-core/src/ppcore/utils/entrypoint.py | 21 ++ pproc-core/src/ppcore/utils/helpers.py | 27 -- pproc-core/src/ppcore/utils/io.py | 13 + pproc-core/src/ppcore/utils/mars.py | 73 ++++ pproc-core/src/ppcore/utils/requests.py | 33 -- .../ppcore/configs/entrypoint}/test_log.py | 2 +- .../products}/templates/ensms.yaml | 10 + .../products}/templates/extreme.yaml | 0 .../products}/templates/prob.yaml | 14 + .../products}/templates/quantiles.yaml | 0 .../products}/templates/t850.yaml | 0 .../products}/templates/wind.yaml | 0 .../tests/ppcore/products/test_products.py | 68 ++++ pproc-core/tests/ppcore/schema/test_schema.py | 26 ++ .../tests/ppcore/utils}/test_mars.py | 2 +- pproc-core/tests/schema.yaml | 80 +++-- pproc-core/tests/workflows/test_products.py | 36 -- pproc-core/tests/workflows/test_templates.py | 91 ----- pproc-core/uv.lock | 62 ++++ pproc-runtime/.gitignore | 1 + pproc-runtime/src/ppruntime/io.py | 112 +++--- pproc-runtime/src/ppruntime/metadata.py | 22 +- pproc-runtime/tests/conftest.py | 48 +++ pproc-runtime/tests/test_io.py | 78 +++- pproc/pyproject.toml | 5 + pproc/src/pproc/common/accumulation.py | 2 +- pproc/src/pproc/common/mars.py | 40 +-- pproc/src/pproc/config/accumulation.py | 2 +- pproc/src/pproc/config/base.py | 5 +- pproc/src/pproc/config/io.py | 5 +- pproc/src/pproc/config/param.py | 3 +- pproc/src/pproc/config/targets.py | 4 +- pproc/src/pproc/config/types.py | 3 +- pproc/src/pproc/config/utils.py | 20 -- pproc/src/pproc/ensms.py | 2 +- pproc/src/pproc/quantiles.py | 2 +- pproc/tests/config/test_factory.py | 2 +- pproc/tests/config/types/test_flightlevels.py | 54 +-- .../tests/templates/{ => v2}/clustereps.yaml | 0 pproc/tests/templates/{ => v2}/ensms.yaml | 0 pproc/tests/templates/{ => v2}/extreme.yaml | 0 pproc/tests/templates/{ => v2}/prob.yaml | 0 pproc/tests/templates/{ => v2}/quantiles.yaml | 0 pproc/tests/templates/{ => v2}/t850.yaml | 0 pproc/tests/templates/{ => v2}/thermo.yaml | 0 pproc/tests/templates/{ => v2}/wind.yaml | 0 pproc/tests/templates/v3/ensms.yaml | 223 ++++++++++++ pproc/tests/test_products.py | 38 +- pproc/uv.lock | 2 + 88 files changed, 2382 insertions(+), 1078 deletions(-) delete mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/config/__init__.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py delete mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/config/ensemble.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py create mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py delete mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/products.py delete mode 100644 pproc-core/src/earthkit/workflows/plugins/pproc/templates.py create mode 100644 pproc-core/src/ppcore/config.py delete mode 100644 pproc-core/src/ppcore/config/threshold.py create mode 100644 pproc-core/src/ppcore/configs/__init__.py create mode 100644 pproc-core/src/ppcore/configs/common/__init__.py create mode 100644 pproc-core/src/ppcore/configs/common/accumulation.py create mode 100644 pproc-core/src/ppcore/configs/common/input.py create mode 100644 pproc-core/src/ppcore/configs/common/output.py rename pproc-core/src/ppcore/{config => configs/common}/preprocessing.py (67%) create mode 100644 pproc-core/src/ppcore/configs/common/source.py create mode 100644 pproc-core/src/ppcore/configs/common/stats.py create mode 100644 pproc-core/src/ppcore/configs/common/target.py create mode 100644 pproc-core/src/ppcore/configs/entrypoint/base.py create mode 100644 pproc-core/src/ppcore/configs/entrypoint/execution.py rename {pproc/src/pproc/config => pproc-core/src/ppcore/configs/entrypoint}/log.py (100%) create mode 100644 pproc-core/src/ppcore/configs/product/__init__.py rename pproc-core/src/{earthkit/workflows/plugins/pproc/config => ppcore/configs/product}/anomaly.py (59%) create mode 100644 pproc-core/src/ppcore/configs/product/ensemble.py rename pproc-core/src/{earthkit/workflows/plugins/pproc/config => ppcore/configs/product}/extreme.py (57%) create mode 100644 pproc-core/src/ppcore/configs/utils.py create mode 100644 pproc-core/src/ppcore/product.py create mode 100644 pproc-core/src/ppcore/products/__init__.py create mode 100644 pproc-core/src/ppcore/products/base.py create mode 100644 pproc-core/src/ppcore/products/ensemble.py create mode 100644 pproc-core/src/ppcore/utils/entrypoint.py create mode 100644 pproc-core/src/ppcore/utils/io.py create mode 100644 pproc-core/src/ppcore/utils/mars.py rename {pproc/tests/config => pproc-core/tests/ppcore/configs/entrypoint}/test_log.py (97%) rename pproc-core/tests/{workflows => ppcore/products}/templates/ensms.yaml (89%) rename pproc-core/tests/{workflows => ppcore/products}/templates/extreme.yaml (100%) rename pproc-core/tests/{workflows => ppcore/products}/templates/prob.yaml (88%) rename pproc-core/tests/{workflows => ppcore/products}/templates/quantiles.yaml (100%) rename pproc-core/tests/{workflows => ppcore/products}/templates/t850.yaml (100%) rename pproc-core/tests/{workflows => ppcore/products}/templates/wind.yaml (100%) create mode 100644 pproc-core/tests/ppcore/products/test_products.py rename {pproc/tests/common => pproc-core/tests/ppcore/utils}/test_mars.py (98%) delete mode 100644 pproc-core/tests/workflows/test_products.py delete mode 100644 pproc-core/tests/workflows/test_templates.py create mode 100644 pproc-runtime/tests/conftest.py rename pproc/tests/templates/{ => v2}/clustereps.yaml (100%) rename pproc/tests/templates/{ => v2}/ensms.yaml (100%) rename pproc/tests/templates/{ => v2}/extreme.yaml (100%) rename pproc/tests/templates/{ => v2}/prob.yaml (100%) rename pproc/tests/templates/{ => v2}/quantiles.yaml (100%) rename pproc/tests/templates/{ => v2}/t850.yaml (100%) rename pproc/tests/templates/{ => v2}/thermo.yaml (100%) rename pproc/tests/templates/{ => v2}/wind.yaml (100%) create mode 100644 pproc/tests/templates/v3/ensms.yaml diff --git a/pproc-core/.gitignore b/pproc-core/.gitignore index b3c1c591..cca35b1c 100644 --- a/pproc-core/.gitignore +++ b/pproc-core/.gitignore @@ -1,6 +1,7 @@ *.sw[op] .DS_Store .idea/ +.venv/ # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index f45e9f42..849ad8ed 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -32,6 +32,7 @@ dynamic = [ "version" ] dependencies = [ "code-meters", + "conflator>=0.1.8", "earthkit-time", "earthkit-workflows", "numpy", @@ -39,6 +40,8 @@ dependencies = [ "pydantic", ] +scripts.ppcore-config = "ppcore.config:main" + [dependency-groups] dev = [ "prek>=0.4.4", @@ -66,3 +69,6 @@ lint.ignore = [ "E722", "E731", "E741" ] [tool.pytest.ini_options] log_cli = true testpaths = [ "tests/" ] + +[tool.uv] +package = true diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/__init__.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/__init__.py deleted file mode 100644 index afa5cefa..00000000 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/__init__.py +++ /dev/null @@ -1,88 +0,0 @@ -from typing import Optional -from ppcore.config.preprocessing import PreprocessingConfig -from .ensemble import EnsembleConfig -from .extreme import ExtremeConfig -from .anomaly import AnomalyConfig - -ENTRYPOINT_TO_CONFIG = { - "pproc-ensms": "ensemble", - "pproc-quantiles": "ensemble", - "pproc-probabilities": "ensemble", - "pproc-accumulate": "ensemble", - "pproc-extreme": "extreme", -} - -CONFIGS = { - "ensemble": EnsembleConfig, - "extreme": ExtremeConfig, - "anomaly": AnomalyConfig, -} - - -def _translate_accum_op(accum: dict) -> str: - OPS = { - "aggregation": None, - "difference": "diff", - "maximum": "max", - "minimum": "min", - "mean": "mean", - "standard_deviation": "std", - "sum": "add", - } - operation = accum.setdefault("operation", "aggregation") - if operation not in OPS: - raise ValueError(f"Accumulation operation {operation} not supported") - return OPS[operation] - - -def schema_to_config( - schema_config: dict, request: dict, metadata: Optional[dict] = None -) -> object: - entrypoint = schema_config.pop("entrypoint") - config_name = schema_config.pop("config", ENTRYPOINT_TO_CONFIG[entrypoint]) - ensemble_operation = { - "em": "mean", - "es": "std", - "pb": "quantiles", - "ep": "threshold_prob", - "fcmean": None, - "fcstdev": None, - "fcmin": None, - "fcmax": None, - "efi": "efi", - "efic": "efi", - "sot": "sot", - "cf": None, - "pf": None, - } - schema_config.pop("interp_keys") - schema_config.pop("name", None) - schema_config.pop("dtype", None) - inputs = schema_config.pop("inputs") - - # Populate coords in accumulations with values from inputs - accums = schema_config.pop("accumulations", {}) - for dim, accum in accums.items(): - accum["operation"] = _translate_accum_op(accum) - values = inputs[0][dim] - accum["coords"] = [values] if isinstance(values, (str, int)) else values - - config = { - "inputs": inputs, - "preprocessing": PreprocessingConfig( - actions=schema_config.pop("preprocessing", []) - ), - "accumulations": accums, - "stats": { - "operation": ensemble_operation[request["type"]], - **schema_config, - }, - } - config["stats"].setdefault("metadata", {}).setdefault("type", request["type"]) - if metadata: - config["stats"]["metadata"].update(metadata) - if config_name not in CONFIGS: - raise ValueError( - f"Unknown config {config_name}: supported configs are {list(CONFIGS.keys())}" - ) - return CONFIGS[config_name](**config) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py new file mode 100644 index 00000000..39f3cdad --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py @@ -0,0 +1,45 @@ +from typing import Literal, Optional, Union +import datetime + +from earthkit.time.calendar import MonthInYear +from earthkit.time.sequence import MonthlySequence + +from pydantic import BaseModel, Field + +NumericCoord = int +NumericCoords = Union[list[int], range] + +Coord = Union[str, NumericCoord] +Coords = Union[list[str], NumericCoords] + + +class Default(BaseModel): + type_: Literal["default"] = Field("default", alias="type") + length: Optional[int] = None + + def name(self, coords: Coords) -> str: + if len(coords) == 0: + return "" + end = coords[-1] + if len(coords) == 1 and (self.length is None or isinstance(coords[0], str)): + return f"{end}" + start = coords[0] if self.length is None else int(end) - self.length + return f"{start}-{end}" + + +class Monthly(BaseModel): + type_: Literal["monthly"] = Field("monthly", alias="type") + date: str + + def name(self, coords: Coords) -> str: + if len(coords) == 0: + return "" + end = coords[-1] + fcdate = datetime.datetime.strptime(self.date, "%Y%m%d") + end = int(end) + seq = MonthlySequence(1) + seq.next(fcdate, False) + this_month = fcdate + datetime.timedelta(hours=end - 1) + month_length = MonthInYear(this_month.year, this_month.month).length() * 24 + start = end - month_length + return f"{start}-{end}" diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/ensemble.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/ensemble.py deleted file mode 100644 index fb7808f3..00000000 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/ensemble.py +++ /dev/null @@ -1,43 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -from dataclasses import dataclass - -from earthkit.workflows.plugins.pproc.fluent import Action -from ppcore.config.preprocessing import PreprocessingConfig - - -@dataclass -class EnsembleConfig: - inputs: list[dict] - preprocessing: PreprocessingConfig - accumulations: dict[str, dict] - stats: dict - - def action( - self, forecast: Action, preprocessing_dim="param", ensemble_dim="number" - ) -> Action: - action = forecast - for preprocessing in self.preprocessing.actions: - action = action.param_operation( - dim=preprocessing_dim, **preprocessing.model_dump() - ) - for dim, accumulation in self.accumulations.items(): - action = action.accum_operation( - accumulation["operation"], - dim=dim, - coords=[accumulation["coords"]], - metadata=accumulation.get("metadata", None), - include_start=accumulation.get("include_start", False), - deaccumulate=accumulation.get("deaccumulate", False), - ) - return action.ensemble_operation( - dim=ensemble_dim, - **self.stats, - ) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py new file mode 100644 index 00000000..358aa8de --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py @@ -0,0 +1,19 @@ +from typing import Any, Literal + +from pydantic import BaseModel, model_validator + + +class MaskExpression(BaseModel): + select: dict + comparison: Literal["<", ">", ">=", "<=", "==", "!="] + value: float + + @model_validator(mode="before") + @classmethod + def validate_model(cls, data: Any) -> Any: + if isinstance(data, list): + assert ( + len(data) == 3 + ), "Mask expression should be a [select, comparison, value] list" + return {"select": data[0], "comparison": data[1], "value": data[2]} + return data diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py new file mode 100644 index 00000000..bcb9e47f --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py @@ -0,0 +1,28 @@ +from pydantic import BaseModel, model_validator +from typing import Any, Optional, Literal + +Comparisons = Literal["<", ">", "<=", ">="] + + +class Threshold(BaseModel): + select: Optional[dict] = None + lower_scale_factor: int = 0 + lower_comparison: Comparisons + lower_value: float + upper_scale_factor: int = 0 + upper_comparison: Optional[Comparisons] = None + upper_value: Optional[float] = None + + @model_validator(mode="before") + def validate_threshold(cls, data: Any) -> Any: + if "comparison" in data and "value" in data: + data["lower_comparison"] = data.pop("comparison") + data["lower_value"] = data.pop("value") + data["lower_scale_factor"] = data.get("scale_factor", 0) + if any(k in data for k in ["upper_comparison", "upper_value"]) and not all( + k in data for k in ["upper_comparison", "upper_value"] + ): + raise ValueError( + "Both upper_comparison and upper_value must be provided together" + ) + return data diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 21faeb59..70f413f8 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -8,24 +8,33 @@ # nor does it submit to any jurisdiction. import inspect -from typing import Any +from typing import Optional, Union import numpy as np from earthkit.workflows.backends.earthkit import FieldListBackend from earthkit.workflows.nodetree import nodetree_size from earthkit.workflows import fluent +from earthkit.workflows.nodetree import nodetree_arrays from earthkit.workflows.plugins.pproc.utils.request import MultiSourceRequest from earthkit.workflows.plugins.pproc.utils.request import Request -from ppcore.config.preprocessing import MaskExpression -from ppcore.config.threshold import ThresholdConfig +from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values +from earthkit.workflows.plugins.pproc.config.mask import MaskExpression +from earthkit.workflows.plugins.pproc.config.threshold import Threshold +from earthkit.workflows.plugins.pproc.config.accumulation import ( + Coords, + Default, + Monthly, +) +from earthkit.workflows.plugins.pproc.metadata.accumulation import accumulation_metadata +from earthkit.workflows.plugins.pproc.metadata.threshold import threshold_metadata class Action(fluent.Action): # TODO: migrate to schema _THERMAL_CONFIG = { "utci": { - "operation": "ppcore.thermal_indices.calc_utci", + "operation": "ppruntime.thermal_indices.calc_utci", "params": ["2t", "2d", "10si", "mrt"], }, "10si": { @@ -34,44 +43,47 @@ class Action(fluent.Action): "params": ["10u", "10v"], }, "mrt": { - "operation": "ppcore.thermal_indices.calc_mrt", + "operation": "ppruntime.thermal_indices.calc_mrt", "params": ["cossza", "dsrp", "ssrd", "fdir", "strd", "str", "ssr"], }, "cossza": { - "operation": "ppcore.thermal_indices.calc_cossza", + "operation": "ppruntime.thermal_indices.calc_cossza", "params": ["2t", "fdir"], }, "dsrp": { - "operation": "ppcore.thermal_indices.calc_dsrp", + "operation": "ppruntime.thermal_indices.calc_dsrp", "params": ["fdir", "cossza"], }, "hmdx": { - "operation": "ppcore.thermal_indices.calc_hmdx", + "operation": "ppruntime.thermal_indices.calc_hmdx", + "params": ["2t", "2d"], + }, + "2r": { + "operation": "ppruntime.thermal_indices.calc_rhp", "params": ["2t", "2d"], }, - "2r": {"operation": "ppcore.thermal_indices.calc_rhp", "params": ["2t", "2d"]}, "heatx": { - "operation": "ppcore.thermal_indices.calc_heatx", + "operation": "ppruntime.thermal_indices.calc_heatx", "params": ["2t", "2d"], }, "wbgt": { - "operation": "ppcore.thermal_indices.calc_wbgt", + "operation": "ppruntime.thermal_indices.calc_wbgt", "params": ["2t", "2d", "10si", "mrt"], }, "gt": { - "operation": "ppcore.thermal_indices.calc_gt", + "operation": "ppruntime.thermal_indices.calc_gt", "params": ["2t", "10si", "mrt"], }, "nefft": { - "operation": "ppcore.thermal_indices.calc_nefft", + "operation": "ppruntime.thermal_indices.calc_nefft", "params": ["2t", "10si", "2r"], }, "wcf": { - "operation": "ppcore.thermal_indices.calc_wcf", + "operation": "ppruntime.thermal_indices.calc_wcf", "params": ["2t", "10si"], }, "aptmp": { - "operation": "ppcore.thermal_indices.calc_aptmp", + "operation": "ppruntime.thermal_indices.calc_aptmp", "params": ["2t", "2r", "10si"], }, } @@ -85,18 +97,47 @@ def _reduction_with_metadata( metadata: dict | None = None, ) -> "Action": batched = batch_size > 1 and self.nodes.sizes[dim] > batch_size - op = getattr(super(), operation) + if not batched or metadata is None: - return op( + if isinstance(operation, str): + if hasattr(super(), operation): + return getattr(super(), operation)( + dim=dim, + batch_size=batch_size, + keep_dim=keep_dim, + backend_kwargs={"metadata": metadata}, + ) + else: + operation = ( + fluent.Payload(operation, kwargs={"metadata": metadata}), + ) + else: + operation.kwargs.setdefault("metadata", {}).update(metadata or {}) + return super().reduce( + operation, dim=dim, batch_size=batch_size, keep_dim=keep_dim, - backend_kwargs={"metadata": metadata}, ) + if isinstance(operation, str): + if hasattr(super(), operation): + batched_action = getattr(super(), operation)( + dim=dim, batch_size=batch_size, keep_dim=keep_dim + ) + else: + batched_action = super().reduce( + fluent.Payload(operation), + dim=dim, + batch_size=batch_size, + keep_dim=keep_dim, + ) + else: + batched_action = super().reduce( + operation, dim=dim, batch_size=batch_size, keep_dim=keep_dim + ) # If batched, add additional node for setting window operation metadata. Doing this in a separate tasks # allows batched operations for overlapping windows to be identified and only computed once - batched_action = op(dim=dim, batch_size=batch_size, keep_dim=keep_dim) return batched_action.map( fluent.Payload( FieldListBackend.set_metadata, [fluent.Node.input_name(0), metadata] @@ -173,6 +214,21 @@ def prod( "prod", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata ) + def norm( + self, + dim: str = "", + batch_size: int = 0, + keep_dim: bool = False, + metadata: dict | None = None, + ) -> "Action": + return self._reduction_with_metadata( + fluent.Payload(FieldListBackend.norm), + dim=dim, + batch_size=batch_size, + keep_dim=keep_dim, + metadata=metadata, + ) + def subtract( self, other: "Action | float", metadata: dict | None = None ) -> "Action": @@ -189,57 +245,13 @@ def multiply( ) -> "Action": return super().multiply(other, backend_kwargs={"metadata": metadata}) + def scale(self, value: float, metadata: dict | None = None) -> "Action": + return super().multiply(value, backend_kwargs={"metadata": metadata}) + def power(self, other: "Action | float", metadata: dict | None = None) -> "Action": return super().power(other, backend_kwargs={"metadata": metadata}) def extreme( - self, - climatology: fluent.Action, - step_ranges: list[str], - sot: list[int], - eps: float, - efi_control: dict | None = None, - ensemble_dim: str = "number", - step_dim: str = "step", - new_dim: str = "type", - metadata: dict | None = None, - ) -> "Action": - """ - Create nodes computing the EFI and SOT - - Parameters - ---------- - climatology: Action, nodes containing climatology data - step_ranges: list of str, list of step ranges - sot: list of ints, Shift-Of-Tail values - eps: float - efi_control: dict, selection for control member. If None, efi is not - computed for the control member - ensemble_dim: str, name of dimension for ensemble members - step_dim: str, name of dimension for steps - new_dim: str, name of new dimension corresponding to EFI/SOT nodes. - - Return - ------ - Action - """ - eps = float(eps) - concat = self.concatenate(dim=ensemble_dim) - efi = concat.efi(climatology, step_ranges, eps, step_dim, metadata) - efi._add_dimension(new_dim, "efi") - if efi_control is not None: - control = self.select(efi_control, drop=True).efi( - climatology, step_ranges, eps, step_dim, metadata - ) - control._add_dimension(new_dim, "efic") - efi = efi.join(control, new_dim) - sot = concat.sot( - climatology, step_ranges, eps, sot, step_dim, new_dim, metadata - ) - ret = efi.join(sot, dim=new_dim) - return ret - - def ensemble_extreme( self, operation: str, climatology: fluent.Action, @@ -248,14 +260,6 @@ def ensemble_extreme( step_dim: str = "step", **kwargs, ) -> "Action": - if operation == "extreme": - return self.extreme( - climatology, - step_ranges, - ensemble_dim=ensemble_dim, - step_dim=step_dim, - **kwargs, - ) return self.concatenate(ensemble_dim).__getattribute__(operation)( climatology, step_ranges, dim=step_dim, **kwargs ) @@ -288,7 +292,7 @@ def efi( if len(step_ranges) != 1: raise ValueError("Single node, but multiple step ranges") payload = fluent.Payload( - "ppcore.stats.efi", + "ppruntime.stats.efi", (fluent.Node.input_name(1), fluent.Node.input_name(0), eps), {"metadata": metadata}, ) @@ -351,55 +355,22 @@ def sot( ).transform(_sot_window_transform, params, dim) return ret - def ensms( - self, - dim: str = "number", - new_dim: str | tuple[str, list] = ("type", ["mean", "std"]), - batch_size: int = 0, - metadata: dict | None = None, - ) -> "Action": - """ - Creates nodes computing the mean and standard deviation along the specified dimension. A new dimension - is created joining the mean and standard deviation. If batch_size > 1 and less than the size - of the named dimension, the reduction will be computed first in - batches and then aggregated, otherwise no batching will be performed. - - Parameters - ---------- - dim: str, dimension to compute mean and standard deviation along - new_dim: str or tuple, name of new dimension or tuple specifying new dimension name and - coordinate values - batch_size: int, size of batches to split reduction into. If 0, - computation is not batched - - Return - ------ - Action - """ - metadata = metadata or {} - mean = self.mean( - dim=dim, batch_size=batch_size, metadata={"type": "em", **metadata} - ) - std = self.std( - dim=dim, batch_size=batch_size, metadata={"type": "es", **metadata} - ) - res = mean.join(std, new_dim) - return res - def threshold_prob( self, - threshold: dict, + thresholds: list[Union[Threshold, dict]], dim: str = "number", batch_size: int = 0, - metadata: dict | None = None, + metadata: Optional[dict] = None, + clim_metadata: Optional[dict] = None, ) -> "Action": - thresholds = ThresholdConfig(**threshold) combined = None - for threshold in thresholds.param_thresholds: + for threshold in thresholds: + if isinstance(threshold, dict): + threshold = Threshold(**threshold) selected = self.sel(threshold.select) if threshold.select else self selected.map( fluent.Payload( - "ppcore.stats.mask", + "ppruntime.stats.mask", (fluent.Node.input_name(0),), threshold.model_dump( exclude=("select", "lower_scale_factor", "upper_scale_factor") @@ -413,11 +384,11 @@ def threshold_prob( "ppruntime.stats.logical_and", dim="param" ) - metadata = metadata or {} - threshold_metadata = thresholds.grib_keys(edition=metadata.get("edition", 1)) - threshold_metadata.update(metadata) + thr_metadata = threshold_metadata( + threshold=thresholds[0], metadata=metadata, clim_metadata=clim_metadata + ) return combined.multiply(100).mean( - dim=dim, batch_size=batch_size, metadata=threshold_metadata + dim=dim, batch_size=batch_size, metadata=thr_metadata ) def anomaly( @@ -453,22 +424,6 @@ def quantiles( ret = self.concatenate(dim).transform(_quantiles_transform, params, new_dim) return ret - def wind_speed( - self, vod2uv: bool, dim: str = "param", metadata: dict | None = None - ) -> "Action": - kwargs = {"metadata": metadata} - if vod2uv: - ret = self.map( - fluent.Payload( - FieldListBackend.norm, (fluent.Node.input_name(0),), kwargs - ) - ) - else: - ret = self.reduce( - fluent.Payload(FieldListBackend.norm, kwargs=kwargs), dim=dim - ) - return ret - def _wrapped_reduction( self, operation: str | fluent.Payload | None, @@ -490,7 +445,9 @@ def _wrapped_reduction( ] if "batch_size" in args: kwargs["batch_size"] = batch_size - return op(dim=dim, metadata=metadata, **kwargs) + if "dim" in args: + kwargs["dim"] = dim + return op(metadata=metadata, **kwargs) if metadata is not None: kwargs.setdefault("metadata", {}).update(metadata) op_function = getattr(FieldListBackend, operation, None) or operation @@ -500,7 +457,7 @@ def _wrapped_reduction( ) return self.reduce(operation, dim=dim, batch_size=batch_size) - def param_operation( + def preprocessing( self, operation: str | fluent.Payload | None, dim: str = "param", @@ -520,8 +477,6 @@ def param_operation( ------ Action """ - if "operation" == "scale": - return self.multiply(kwargs["value"], metadata=metadata) return self._wrapped_reduction(operation, dim, batch_size, metadata, **kwargs) # TODO: turn this into more general param operation that scans schema to look for @@ -557,16 +512,17 @@ def thermal_index( def mask( self, select: dict, - mask: dict, + mask: Union[MaskExpression, dict], replacement: float = 0.0, dim: str = "param", metadata: dict | None = None, ) -> "Action": - mask = MaskExpression(**mask) + if isinstance(mask, dict): + mask = MaskExpression(**mask) mask_action = self.sel(mask.select, drop=True) if select else self mask_action = mask_action.map( fluent.Payload( - "ppcore.stats.mask", + "ppruntime.stats.mask", (fluent.Node.input_name(0),), {"lower_comparison": mask.comparison, "lower_value": mask.value}, ) @@ -582,7 +538,7 @@ def mask( ) ) - def ensemble_operation( + def ensemble_statistics( self, operation: str | fluent.Payload | None, dim: str = "number", @@ -610,21 +566,31 @@ def ensemble_operation( ------ ValueError if payload function is not batchable and batch_size is not 0 """ - if operation in ["mean", "std"]: - metadata = {} if metadata is None else metadata.copy() - if "type" not in metadata: - metadata["type"] = "em" if operation == "mean" else "es" - return self._wrapped_reduction(operation, dim, batch_size, metadata, **kwargs) + metadata = metadata or {} + + for _, narray in nodetree_arrays(self.nodes): + if dim not in narray.coords: + raise ValueError( + f"Dimension {dim} not found in nodes for ensemble_statistics" + ) + stat_metadata = fill_template_values( + metadata, {"num_fields": narray.coords[dim].size} + ) + break - def accum_operation( + return self._wrapped_reduction( + operation, dim, batch_size, stat_metadata, **kwargs + ) + + def accumulation( self, operation: str | fluent.Payload, - coords: list[list[Any]], + coords: list[Coords], dim: str = "step", batch_size: int = 0, metadata: dict | None = None, - include_start: bool = False, deaccumulate: bool = False, + name: Union[Default, Monthly, dict] = Default(), **kwargs, ) -> "Action": """ @@ -640,7 +606,6 @@ def accum_operation( batch_size: int, size of batches to split reduction into. If 0, computation is not batched metadata: optional dict, metadata to set on the output - include_init: bool, whether to include the initial value in the accumulation deaccumulate: bool, whether to deaccumulate consecutive values before accumulation Return @@ -662,21 +627,37 @@ def accum_operation( operation, batch_size, metadata, - include_start, deaccumulate, + name, kwargs, ) for coord in coords ] return self.transform(_accum_transform, params, dim) - def write(self, target: dict) -> "Action": - return self.map( - fluent.Payload( - "ppcore.io.write", - (fluent.Node.input_name(0), target), - ) + def write(self, targets: list[dict], metadata: Optional[dict] = None) -> "Action": + if len(targets) == 0: + raise ValueError("No targets provided for write") + return self.transform( + _write_transform, + [(target, metadata) for target in targets], + dim="target", + ) + + +def _write_transform( + action: fluent.Action, target: dict, metadata: Optional[dict] = None +) -> fluent.Action: + kwargs = target.copy() + if metadata is not None: + kwargs["metadata"] = metadata + return action.map( + fluent.Payload( + "ppruntime.io.write", + (fluent.Node.input_name(0),), + kwargs, ) + ) def _sot_transform( @@ -684,7 +665,7 @@ def _sot_transform( ) -> fluent.Action: new_sot = action.reduce( fluent.Payload( - "ppcore.stats.sot", + "ppruntime.stats.sot", (fluent.Node.input_name(1), fluent.Node.input_name(0), number, eps), {"metadata": metadata}, ) @@ -711,7 +692,7 @@ def _efi_window_transform( ) -> fluent.Action: ret = action.select(selection).reduce( fluent.Payload( - "ppcore.stats.efi", + "ppruntime.stats.efi", (fluent.Node.input_name(1), fluent.Node.input_name(0), eps), {"metadata": metadata}, ), @@ -724,7 +705,7 @@ def _quantiles_transform( action, q_number: int, total_number: int, new_dim: str, metadata: dict | None ): payload = fluent.Payload( - "ppcore.stats.quantiles", + "ppruntime.stats.quantiles", (fluent.Node.input_name(0), q_number, total_number), {"metadata": metadata}, ) @@ -736,13 +717,13 @@ def _quantiles_transform( def _accum_transform( action: fluent.Action, dim: str, - coords: list[Any], + coords: Coords, operation: str | fluent.Payload, batch_size: int, - metadata: dict | None, - include_start: bool, - deaccumulate: bool, - kwargs: dict, + metadata: Optional[dict] = None, + deaccumulate: bool = False, + name: Union[Default, Monthly, dict] = Default(), + kwargs: dict = {}, ) -> fluent.Action: if len(coords) == 1: # Nothing to reduce and no metadata to set @@ -752,24 +733,31 @@ def _accum_transform( accum_action = action.select({dim: coords[:-1]}) accum_action = accum_action.subtract(action.select({dim: coords[1:]})) else: - accum_action = action.select({dim: coords if include_start else coords[1:]}) + accum_action = action.select({dim: coords}) + + if isinstance(name, dict): + name = Default(**name) if name.get("type_") == "default" else Monthly(**name) + accum_name = name.name(coords) + accum_metadata = accumulation_metadata(dim, coords, accum_name, metadata) accum_action = accum_action._wrapped_reduction( operation, dim=dim, batch_size=batch_size, - metadata=metadata, + metadata=accum_metadata, **kwargs, ) - accum_action._add_dimension(dim, f"{coords[0]}-{coords[-1]}") + accum_action._add_dimension(dim, accum_name) + return accum_action def from_source( + sources: list[Union[str, dict]], requests: list[dict | Request | MultiSourceRequest], + dtype: Optional[str] = None, join_key: str = "", - backend_kwargs: dict = {}, ): all_actions = None for request in requests: @@ -778,7 +766,7 @@ def from_source( payloads = np.empty(tuple(request.dims.values()), dtype=object) for indices, new_request in request.expand(): payloads[indices] = fluent.Payload( - "ppruntime.io.retrieve", [new_request], backend_kwargs + "ppruntime.io.retrieve", [sources, [new_request], dtype] ) new_action = fluent.from_source( payloads, diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py new file mode 100644 index 00000000..1f35ea4b --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py @@ -0,0 +1,49 @@ +from typing import Optional +from earthkit.workflows.plugins.pproc.config.accumulation import Coords +from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values + + +def accumulation_metadata( + dim: str, coords: Coords, name: str, metadata: Optional[dict] = None +) -> dict: + metadata = (metadata or {}).copy() + if dim == "step": + steps = name.split("-") + if len(steps) > 1: + start = int(steps[0].split("_")[-1]) + end = int(steps[-1].split("_")[0]) + else: + start = coords[0] + end = start + + if end > start: + steprange = f"{start}-{end}" + if end >= 256 and metadata.get("edition", 1) == 1: + # The range is encoded as two 8-bit integers + metadata.setdefault("unitOfTimeRange", 11) + if coords[0] != steprange: + metadata.setdefault( + "stepType", "max" + ) # Don't override if set in config + metadata["stepRange"] = steprange + else: + assert end == start, "Start step can not be greater than end step" + if "timeRangeIndicator" not in metadata: + if end >= 256: + metadata["timeRangeIndicator"] = 10 + elif end == 0: + metadata["timeRangeIndicator"] = 1 + else: + metadata["timeRangeIndicator"] = 0 + metadata.setdefault("step", str(start)) + else: + start = coords[0] + end = coords[-1] + return fill_template_values( + metadata, + { + "num_coords": len(coords), + "start_coord": start, + "end_coord": end, + }, + ) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py new file mode 100644 index 00000000..cc11c765 --- /dev/null +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py @@ -0,0 +1,84 @@ +from typing import Optional + +from earthkit.workflows.plugins.pproc.config.threshold import Threshold + + +def threshold_metadata( + threshold: Threshold, + metadata: Optional[dict] = None, + clim_metadata: Optional[dict] = None, +) -> dict: + metadata = metadata or {} + edition = metadata.get("edition", 1) + thr_metadata = {} + if "paramId" in metadata: + thr_metadata["paramId"] = metadata["paramId"] + + if threshold.upper_comparison is None: + threshold_value = round( + threshold.lower_value * 10**threshold.lower_scale_factor, 0 + ) + comparison = threshold.lower_comparison.strip("=") + if edition == 1 and comparison == "<": + thr_metadata.update( + { + "localDefinitionNumber": 5, + "localDecimalScaleFactor": threshold.lower_scale_factor, + "thresholdIndicator": 2, + "upperThreshold": threshold_value, + } + ) + elif edition == 1 and comparison == ">": + thr_metadata.update( + { + "localDefinitionNumber": 5, + "localDecimalScaleFactor": threshold.lower_scale_factor, + "thresholdIndicator": 1, + "lowerThreshold": threshold_value, + } + ) + elif edition == 2: + # GRIB 2 has probability types above/below upper/lower limits (see Code Table 4.9) + # Default is to use limit_type=lower probability types + # where the threshold value can correspond to either limit. The default limit type + # is upper for "<" and lower for ">", consistent with the GRIB 1 to GRIB 2 conversion + # assumption. + limit_type = "lower" + prob_types = { + "<": {"upper": 4, "lower": 0}, + ">": {"upper": 1, "lower": 3}, + } + probability_type = prob_types[comparison][limit_type] + missing = "Upper" if limit_type == "lower" else "Lower" + thr_metadata.update( + { + f"scaleFactorOf{limit_type.capitalize()}Limit": threshold.lower_scale_factor, + f"scaledValueOf{limit_type.capitalize()}Limit": threshold_value, + "probabilityType": probability_type, + f"scaleFactorOf{missing}Limit": "MISSING", + f"scaledValueOf{missing}Limit": "MISSING", + } + ) + thr_metadata.update(clim_metadata or {}) + else: + raise ValueError( + f"Unsupported threshold comparison {comparison} for grib edition {edition}" + ) + return thr_metadata + if edition != 2: + raise ValueError("Threshold ranges are only supported for GRIB edition 2") + thr_metadata.update( + { + "scaleFactorOfLowerLimit": threshold.lower_scale_factor, + "scaledValueOfLowerLimit": round( + threshold.lower_value * 10**threshold.lower_scale_factor, 0 + ), + "probabilityType": 2, + "scaleFactorOfUpperLimit": threshold.upper_scale_factor, + "scaledValueOfUpperLimit": round( + threshold.upper_value * 10**threshold.upper_scale_factor, 0 + ), + } + ) + thr_metadata.update(clim_metadata or {}) + return thr_metadata diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/products.py b/pproc-core/src/earthkit/workflows/plugins/pproc/products.py deleted file mode 100644 index e5244282..00000000 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/products.py +++ /dev/null @@ -1,152 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -from earthkit.workflows.graph import Graph -from earthkit.workflows.graph import deduplicate_nodes - -from earthkit.workflows.plugins.pproc.fluent import from_source -from earthkit.workflows.plugins.pproc.templates import derive_template -from earthkit.workflows.plugins.pproc.utils.request import Request -from ppcore.utils.requests import expand -from ppcore.utils.requests import squeeze - - -def ensemble( - output_requests: list[dict], pproc_schema: str, target: str = "null:" -) -> Graph: - """ - Generate graph for ensemble member processing products e.g. ensms, - quantiles, threshold probabilties. - - Parameters - ---------- - output_requests: list[dict], list of dictionaries containing output requests - pproc_schema: str, path to schema file - target: str, target and location to write output - - Returns - ------- - Graph - """ - - total_graph = Graph([]) - ensemble_dim = "type" - for req in output_requests: - config = derive_template(req, pproc_schema) - source = from_source( - [ - Request(x, no_expand=("number")) - for x in squeeze( - sum([list(expand(x)) for x in config.inputs], []), - ["step", "number", "param", "levelist"], - ) - ], - join_key=ensemble_dim, - backend_kwargs={"stream": True}, - ) - total_graph += ( - config.action(forecast=source, ensemble_dim=ensemble_dim) - .write(target) - .graph() - ) - return deduplicate_nodes(total_graph) - - -def anomaly( - output_requests: list[dict], pproc_schema: str, target: str = "null:" -) -> Graph: - """ - Generate graph for ensemble member anomaly products e.g. threshold probabilities - for t850. - Parameters - ---------- - output_requests: list[dict], list of dictionaries containing output requests - pproc_schema: str, path to schema file - target: str, target and location to write output - - Returns - ------- - Graph - """ - total_graph = Graph([]) - ensemble_dim = "type" - for req in output_requests: - config = derive_template(req, pproc_schema) - forecast = from_source( - [ - Request(x, no_expand=("number",)) - for x in squeeze( - sum([list(expand(x)) for x in config.forecast], []), - ["step", "number", "param", "levelist"], - ) - ], - join_key=ensemble_dim, - backend_kwargs={"stream": True}, - ) - climatology = from_source( - [ - Request(x) - for x in squeeze( - sum([list(expand(x)) for x in config.climatology], []), - ["type", "step"], - ) - ], - join_key="step", - ) - total_graph += ( - config.action( - forecast=forecast, climatology=climatology, ensemble_dim=ensemble_dim - ) - .write(target) - .graph() - ) - return deduplicate_nodes(total_graph) - - -def extreme( - output_requests: list[dict], pproc_schema: str, target: str = "null:" -) -> Graph: - """ - Generate graph for EFI/SOT products. - Parameters - ---------- - output_requests: list[dict], list of dictionaries containing output requests - pproc_schema: str, path to schema file - target: str, target and location to write output - - Returns - ------- - Graph - """ - total_graph = Graph([]) - ensemble_dim = "type" - for req in output_requests: - config = derive_template(req, pproc_schema) - forecast = from_source( - [ - Request(x, no_expand=("number")) - for x in squeeze( - sum([list(expand(x)) for x in config.forecast], []), - ["step", "number", "param", "levelist"], - ) - ], - join_key=ensemble_dim, - backend_kwargs={"stream": True}, - ) - climatology = from_source( - [Request(x, no_expand=("quantile")) for x in config.climatology] - ) - total_graph += ( - config.action( - forecast=forecast, climatology=climatology, ensemble_dim=ensemble_dim - ) - .write(target) - .graph() - ) - return deduplicate_nodes(total_graph) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py b/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py deleted file mode 100644 index 91491ec8..00000000 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/templates.py +++ /dev/null @@ -1,39 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -from typing import Optional - -from earthkit.workflows.plugins.pproc.fluent import Action -from earthkit.workflows.plugins.pproc.config import schema_to_config -from ppcore.schema.schema import Schema - - -def derive_template( - request: dict, - pproc_schema: str, - inputs: Optional[list[dict]] = None, - metadata: Optional[dict] = None, -) -> Action: - schema = Schema.from_file(pproc_schema) - schema_config = schema.config_from_output(request, inputs=inputs) - return schema_to_config(schema_config, request, metadata) - - -def from_request( - request: dict, - pproc_schema: str, - preprocessing_dim: str = "param", - ensemble_dim: str = "number", - metadata: Optional[dict] = None, - **sources: Action, -) -> Action: - config = derive_template(request, pproc_schema, metadata=metadata) - return config.action( - **sources, preprocessing_dim=preprocessing_dim, ensemble_dim=ensemble_dim - ) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py index 92296008..f633082e 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py @@ -1,30 +1,27 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +import re -from typing import Any +_TEMPLATE_RE = re.compile("^{([a-z_]*)}:?([a-z]*)$", re.I) +_TYPES = { + "int": int, + "str": str, + "float": float, +} -def window(operation: str, coords: list[Any], include_init: bool) -> dict: - if len(coords) == 1: - return {} +def fill_template_value(val: str, template_map: dict): + m = _TEMPLATE_RE.fullmatch(val) + if m is None: + return val + value, tp = m.groups() + if value not in template_map: + return val - ret = {} - if operation == "diff": - ret.update({"timeRangeIndicator": 5, "stepType": "diff"}) - if operation == "mean": - ret["timeRangeIndicator"] = 3 - ret["numberIncludedInAverage"] = ( - len(coords) if include_init else len(coords) - 1 - ) - ret["numberMissingFromAveragesOrAccumulations"] = 0 - if operation in ["min", "max"]: - ret["timeRangeIndicator"] = 2 - ret.setdefault("stepType", "max") - ret["stepRange"] = f"{coords[0]}-{coords[-1]}" - return ret + return template_map[value] if len(tp) == 0 else _TYPES[tp](template_map[value]) + + +def fill_template_values(metadata: dict, template_map: dict) -> dict: + metadata = metadata.copy() + for key, val in metadata.items(): + if isinstance(val, str): + metadata[key] = fill_template_value(val, template_map) + return metadata diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py new file mode 100644 index 00000000..55a5a971 --- /dev/null +++ b/pproc-core/src/ppcore/config.py @@ -0,0 +1,206 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import argparse +import sys +import os +from typing import List +import logging + +import yaml +import json + +from ppcore.configs import from_outputs as config_from_outputs +from ppcore.configs import from_inputs as config_from_inputs +from ppcore.configs.entrypoint.base import EntrypointConfig +from ppcore.products import product_from_config +from ppcore.utils import mars + +logging.basicConfig( + format="%(asctime)s; %(name)s; %(levelname)s - %(message)s", + level=os.environ.get("PPROC_LOG", "INFO").upper(), +) + + +def from_outputs(args): + overrides = {} + if args.overrides: + with open(args.overrides, "r") as f: + overrides = yaml.safe_load(f) + + with open(args.outputs, "r") as f: + output_requests = yaml.safe_load(f) + + entrypoint_config = EntrypointConfig( + products=config_from_outputs(output_requests, args.schema, **overrides) + ) + with open(args.config, "w") as f: + yaml.dump( + entrypoint_config.model_dump(exclude_none=True, by_alias=True), + f, + sort_keys=False, + ) + + +def from_inputs(args): + overrides = {} + if args.overrides: + with open(args.overrides, "r") as f: + overrides = yaml.safe_load(f) + + with open(args.inputs, "r") as f: + input_requests = yaml.safe_load(f) + + configs = config_from_inputs( + input_requests, args.schema, args.restriction, **overrides + ) + config_dict = configs.model_dump(exclude_none=True, by_alias=True) + with open(args.config, "w") as f: + yaml.dump(config_dict, f, sort_keys=False) + + +def _to_mars(requests: list[dict]) -> str: + ret = b"" + for req in requests: + source = req.pop("source", None) + target = req.pop("target", None) + # Reverse source/target keys so request can be used to + # create/extract from the input/output files + if source and source not in ["fdb", "mars"]: + req["target"] = f"'{source}'" + elif target and target != "fdb": + req["source"] = f"'{target}'" + ret += mars.to_mars(b"retrieve", req) + ret += b"\n" + return ret.decode("utf-8") + + +def requests(args): + with open(args.config, "r") as f: + config = yaml.safe_load(f) + entrypoint_config = EntrypointConfig(**config) + + inputs = [] + outputs = [] + for prod_config in entrypoint_config.products: + product = product_from_config(prod_config) + + inputs.extend(product.in_mars(args.source)) + outputs.extend(product.out_mars(args.target)) + + # TODO: Add method to simplify requests + if args.inputs: + _, extension = os.path.splitext(args.inputs) + with open(args.inputs, "w") as f: + if args.mars: + f.write(_to_mars(inputs)) + elif extension == ".json": + json.dump(inputs, f, sort_keys=False, indent=2) + else: + yaml.dump(inputs, f, sort_keys=False) + + if args.outputs: + _, extension = os.path.splitext(args.outputs) + with open(args.outputs, "w") as f: + if args.mars: + f.write(_to_mars(outputs)) + elif extension == ".json": + json.dump(outputs, f, sort_keys=False, indent=2) + else: + yaml.dump(outputs, f, sort_keys=False) + + +def main(args: List[str] = sys.argv[1:]): + parser = argparse.ArgumentParser("Generate configuration file for PProc") + parser.add_argument( + "--config", + type=str, + required=True, + help="Path to configuration file", + ) + + subparsers = parser.add_subparsers(required=True) + output_parser = subparsers.add_parser( + "from_outputs", help="Generate configuration from output requests" + ) + output_parser.add_argument( + "--outputs", type=str, required=True, help="Path to output request file" + ) + output_parser.add_argument( + "--overrides", + type=str, + required=False, + help="Path to configuration template for overriding default configuration", + ) + output_parser.add_argument( + "--schema", type=str, required=True, help="Path to products schema" + ) + output_parser.set_defaults(func=from_outputs) + + input_parser = subparsers.add_parser( + "from_inputs", help="Generate configuration from input requests" + ) + input_parser.add_argument( + "--restriction", + type=str, + required=False, + help="Restriction to place on output requests e.g. type=em", + ) + input_parser.add_argument( + "--inputs", type=str, required=True, help="Path to input request file" + ) + input_parser.add_argument( + "--schema", + type=str, + required=True, + help="Path to products schema", + ) + input_parser.add_argument( + "--overrides", + type=str, + required=False, + help="Path to configuration template for overriding default configuration", + ) + input_parser.set_defaults(func=from_inputs) + + request_parser = subparsers.add_parser( + "requests", help="Generate input/output requests from PProc config file" + ) + request_parser.add_argument( + "--outputs", type=str, required=False, help="Path to output request file" + ) + request_parser.add_argument( + "--target", + action="append", + default=None, + help="Target type to select output requests for", + ) + request_parser.add_argument( + "--inputs", type=str, required=False, help="Path to input request file" + ) + request_parser.add_argument( + "--source", + action="append", + default=None, + help="Source type to select input requests for", + ) + request_parser.add_argument( + "--mars", + action="store_true", + default=False, + help="Output in MARS request format", + ) + request_parser.set_defaults(func=requests) + + args = parser.parse_args(args) + args.func(args) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/pproc-core/src/ppcore/config/threshold.py b/pproc-core/src/ppcore/config/threshold.py deleted file mode 100644 index 8426c542..00000000 --- a/pproc-core/src/ppcore/config/threshold.py +++ /dev/null @@ -1,111 +0,0 @@ -from pydantic import BaseModel, Field, model_validator -from typing import Any, Optional, Literal, List - -Comparisons = Literal["<", ">", "<=", ">="] - - -class Threshold(BaseModel): - select: Optional[dict] = None - lower_scale_factor: int = 0 - lower_comparison: Comparisons - lower_value: float - upper_scale_factor: int = 0 - upper_comparison: Optional[Comparisons] = None - upper_value: Optional[float] = None - - @model_validator(mode="before") - def validate_threshold(cls, data: Any) -> Any: - if "comparison" in data and "value" in data: - data["lower_comparison"] = data.pop("comparison") - data["lower_value"] = data.pop("value") - data["lower_scale_factor"] = data.get("scale_factor", 0) - if any(k in data for k in ["upper_comparison", "upper_value"]) and not all( - k in data for k in ["upper_comparison", "upper_value"] - ): - raise ValueError( - "Both upper_comparison and upper_value must be provided together" - ) - return data - - def grib_keys(self, edition: int) -> dict: - if self.upper_comparison is None: - threshold_value = round(self.lower_value * 10**self.lower_scale_factor, 0) - comparison = self.lower_comparison.strip("=") - if edition == 1 and comparison == "<": - grib_keys = { - "localDefinitionNumber": 5, - "localDecimalScaleFactor": self.lower_scale_factor, - "thresholdIndicator": 2, - "upperThreshold": threshold_value, - } - elif edition == 1 and comparison == ">": - grib_keys = { - "localDefinitionNumber": 5, - "localDecimalScaleFactor": self.lower_scale_factor, - "thresholdIndicator": 1, - "lowerThreshold": threshold_value, - } - elif edition == 2: - # GRIB 2 has probability types above/below upper/lower limits (see Code Table 4.9) - # Default is to use limit_type=lower probability types - # where the threshold value can correspond to either limit. The default limit type - # is upper for "<" and lower for ">", consistent with the GRIB 1 to GRIB 2 conversion - # assumption. - limit_type = "lower" - prob_types = { - "<": {"upper": 4, "lower": 0}, - ">": {"upper": 1, "lower": 3}, - } - probability_type = prob_types[comparison][limit_type] - missing = "Upper" if limit_type == "lower" else "Lower" - grib_keys = { - f"scaleFactorOf{limit_type.capitalize()}Limit": self.lower_scale_factor, - f"scaledValueOf{limit_type.capitalize()}Limit": threshold_value, - "probabilityType": probability_type, - f"scaleFactorOf{missing}Limit": "MISSING", - f"scaledValueOf{missing}Limit": "MISSING", - } - else: - raise ValueError( - f"Unsupported threshold comparison {comparison} for grib edition {edition}" - ) - return grib_keys - if edition != 2: - raise ValueError("Threshold ranges are only supported for GRIB edition 2") - return { - "scaleFactorOfLowerLimit": self.lower_scale_factor, - "scaledValueOfLowerLimit": round( - self.lower_value * 10**self.lower_scale_factor, 0 - ), - "probabilityType": 2, - "scaleFactorOfUpperLimit": self.upper_scale_factor, - "scaledValueOfUpperLimit": round( - self.upper_value * 10**self.upper_scale_factor, 0 - ), - } - - -class ThresholdConfig(BaseModel): - param_thresholds: List[Threshold] = Field(default_factory=list) - metadata: dict = {} - - @model_validator(mode="before") - def validate_thresholds(cls, data: Any) -> Any: - if isinstance(data, dict) and "param_thresholds" not in data: - data["param_thresholds"] = [ - {k: data[k] for k in data if k not in cls.model_fields} - ] - return data - - def grib_keys(self, edition: int, clim_metadata: Optional[dict] = None) -> dict: - """ - Creates dictionary of threshold related grib headers - """ - threshold_dict = {} - if "paramId" in self.metadata: - threshold_dict["paramId"] = self.metadata["paramId"] - threshold_dict.update(self.param_thresholds[0].grib_keys(edition)) - if edition == 2 and clim_metadata: - threshold_dict.update(clim_metadata) - threshold_dict.update(self.metadata) - return threshold_dict diff --git a/pproc-core/src/ppcore/configs/__init__.py b/pproc-core/src/ppcore/configs/__init__.py new file mode 100644 index 00000000..c2bc7c4b --- /dev/null +++ b/pproc-core/src/ppcore/configs/__init__.py @@ -0,0 +1,44 @@ +from typing import Iterator, Optional + +from ppcore.schema.schema import Schema +from ppcore.configs.product import from_schema, ProductConfig + + +def config_from_output( + request: dict, + pproc_schema: str, + inputs: Optional[list[dict]] = None, + metadata: Optional[dict] = None, + **overrides, +) -> ProductConfig: + schema = Schema.from_file(pproc_schema) + schema_config = schema.config_from_output(request, inputs=inputs) + return from_schema(schema_config, request, metadata, **overrides) + + +def from_outputs( + requests: list[dict], + pproc_schema: str, + inputs: Optional[list[dict]] = None, + metadata: Optional[dict] = None, + **overrides, +) -> Iterator[ProductConfig]: + """ + Returns product configuration from output request and PProc schema + """ + schema = Schema.from_file(pproc_schema) + for request in requests: + schema_config = schema.config_from_output(request, inputs=inputs) + yield from_schema(schema_config, request, metadata, **overrides) + + +def from_inputs( + requests: list[dict], + pproc_schema: str, + inputs: Optional[list[dict]] = None, + metadata: Optional[dict] = None, + **overrides, +) -> Iterator[ProductConfig]: + raise NotImplementedError( + "Generation of configuration from input requests not yet implemented" + ) diff --git a/pproc-core/src/ppcore/configs/common/__init__.py b/pproc-core/src/ppcore/configs/common/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pproc-core/src/ppcore/configs/common/accumulation.py b/pproc-core/src/ppcore/configs/common/accumulation.py new file mode 100644 index 00000000..e2eb8611 --- /dev/null +++ b/pproc-core/src/ppcore/configs/common/accumulation.py @@ -0,0 +1,44 @@ +from typing import Optional, Union, Literal, Annotated, Any + +from pydantic import BaseModel, Field, field_validator + +from earthkit.workflows.plugins.pproc.config.accumulation import ( + Default, + Monthly, +) + + +class Accumulation(BaseModel): + operation: Optional[Literal["min", "max", "mean", "std", "add", "diff"]] = None + coords: list[Union[list[int], list[str]]] + metadata: Optional[dict] = None + deaccumulate: bool = False + name: Optional[ + Annotated[ + Union[Default, Monthly], + Field(discriminator="type_"), + ] + ] = None + + @field_validator("operation", mode="before") + @classmethod + def validate_operation(cls, operation: str) -> Optional[str]: + OPS = { + "aggregation": None, + "difference": "diff", + "maximum": "max", + "minimum": "min", + "mean": "mean", + "standard_deviation": "std", + "sum": "add", + } + return OPS.get(operation, operation) + + @field_validator("coords", mode="before") + @classmethod + def validate_coords(cls, values: Any) -> list[Union[list[int], list[str]]]: + if isinstance(values, (str, int)): + return [[values]] + if isinstance(values, list) and all(isinstance(v, (str, int)) for v in values): + return [values] + return values diff --git a/pproc-core/src/ppcore/configs/common/input.py b/pproc-core/src/ppcore/configs/common/input.py new file mode 100644 index 00000000..533f01f1 --- /dev/null +++ b/pproc-core/src/ppcore/configs/common/input.py @@ -0,0 +1,86 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from typing import Any, ClassVar, Union + +from annotated_types import Annotated +from pydantic import ( + BaseModel, + Field, + create_model, + field_validator, +) +from ppcore.configs.common.source import ( + FDBSource, + FilePatternSource, + FileSource, + MARSSource, +) +from ppcore.utils.io import split_location + + +class Input(BaseModel): + sources: list[ + Annotated[ + Union[FileSource, FilePatternSource, FDBSource, MARSSource], + Field(discriminator="name"), + ] + ] = [FDBSource()] + requests: list[dict] = [] + dtype: str = "float32" + + @field_validator("sources", mode="before") + @classmethod + def validate_sources(cls, data: Any) -> Any: + for index, source in enumerate(data): + if isinstance(source, str): + name, loc = split_location(source, default="file") + config = {"name": name} + if loc: + if name == "fdb": + config["config"] = loc + elif name == "file": + config["file"] = loc + elif name == "file-pattern": + config["pattern"] = loc + else: + raise ValueError( + f"Source type {name} does not support location specification" + ) + data[index] = config + return data + + def base_request(self) -> dict: + keys = set(self.requests[0].keys()) + for ireq in range(1, len(self.requests)): + keys.intersection_update(self.requests[ireq].keys()) + return { + k: self.requests[0][k] + for k in keys + if all(self.requests[0][k] == x[k] for x in self.requests) + } + + +class InputsCollection(BaseModel): + names: ClassVar[list[str]] + + +def create_input_model( + name: str, inputs: list[str], optional: list[str] = [], **kwargs +) -> InputsCollection: + field_definitions = {input: (Input, ...) for input in inputs} + for input in optional: + field_definitions[input] = (Input, Input(source={"type": "null"})) + return create_model( + f"{name}InputModel", + names=(ClassVar[list[str]], inputs + optional), + **field_definitions, + __base__=InputsCollection, + **kwargs, + ) diff --git a/pproc-core/src/ppcore/configs/common/output.py b/pproc-core/src/ppcore/configs/common/output.py new file mode 100644 index 00000000..dcc28792 --- /dev/null +++ b/pproc-core/src/ppcore/configs/common/output.py @@ -0,0 +1,76 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from typing import Any, ClassVar, Union + +from annotated_types import Annotated +from pydantic import ( + BaseModel, + Field, + create_model, + field_validator, +) +from ppcore.utils.io import split_location +from ppcore.configs.common.target import ( + NullTarget, + FileTarget, + FilePatternTarget, + FDBTarget, + ZarrTarget, +) + + +class Output(BaseModel): + targets: list[ + Annotated[ + Union[FileTarget, FilePatternTarget, FDBTarget, NullTarget, ZarrTarget], + Field(discriminator="name"), + ] + ] = [] + request: dict + metadata: dict = {} + + @field_validator("targets", mode="before") + @classmethod + def validate_targets(cls, data: Any) -> Any: + for index, target in enumerate(data): + if isinstance(target, str): + name, loc = split_location(target, default="file") + config = {"name": name} + if loc: + if name == "fdb": + config["config"] = loc + elif name in ["file", "file-pattern"]: + config["file"] = loc + elif name == "zarr": + config["xarray_to_zarr_kwargs"] = {"store": loc, "mode": "w"} + else: + raise ValueError( + f"Target type {name} does not support location specification" + ) + data[index] = config + return data + + +class OutputsCollection(BaseModel): + names: ClassVar[list[str]] + + +def create_output_model( + name: str, outputs: Union[list[str], dict[str, dict]], **kwargs +): + field_definitions = {output: (Output, ...) for output in outputs} + names = outputs if isinstance(outputs, list) else list(outputs.keys()) + return create_model( + f"{name}OutputModel", + names=(ClassVar[list[str]], names), + **field_definitions, + __base__=OutputsCollection, + **kwargs, + ) diff --git a/pproc-core/src/ppcore/config/preprocessing.py b/pproc-core/src/ppcore/configs/common/preprocessing.py similarity index 67% rename from pproc-core/src/ppcore/config/preprocessing.py rename to pproc-core/src/ppcore/configs/common/preprocessing.py index d0e17ce6..c58c8e73 100644 --- a/pproc-core/src/ppcore/config/preprocessing.py +++ b/pproc-core/src/ppcore/configs/common/preprocessing.py @@ -19,6 +19,8 @@ from pydantic import Field from pydantic import model_validator +from earthkit.workflows.plugins.pproc.config.mask import MaskExpression + class Preprocessing(BaseModel, ABC): metadata: Optional[dict] = None @@ -36,33 +38,17 @@ class Combination(Preprocessing): operation: Literal["direction", "norm", "sum"] -class Reshape(Preprocessing): - operation: Literal["reshape"] = "reshape" - shape: Union[int, tuple[int, int]] - order: Literal["F", "C"] = "F" - - -class Expression(Preprocessing): - operation: Literal["expression"] = "expression" - expr: str - expr_data: dict - dtype: Optional[str] = None +# class Reshape(Preprocessing): +# operation: Literal["reshape"] = "reshape" +# shape: Union[int, tuple[int, int]] +# order: Literal["F", "C"] = "F" -class MaskExpression(BaseModel): - select: dict - comparison: Literal["<", ">", ">=", "<=", "==", "!="] - value: float - - @model_validator(mode="before") - @classmethod - def validate_model(cls, data: Any) -> Any: - if isinstance(data, list): - assert ( - len(data) == 3 - ), "Mask expression should be a [select, comparison, value] list" - return {"select": data[0], "comparison": data[1], "value": data[2]} - return data +# class Expression(Preprocessing): +# operation: Literal["expression"] = "expression" +# expr: str +# expr_data: dict +# dtype: Optional[str] = None class Masking(Preprocessing): @@ -85,7 +71,7 @@ class PreprocessingConfig(BaseModel): # value: 3600 actions: List[ Annotated[ - Union[Scaling, Combination, Masking, Reshape, Expression], + Union[Scaling, Combination, Masking], Field(discriminator="operation"), ] ] = Field(default_factory=list) diff --git a/pproc-core/src/ppcore/configs/common/source.py b/pproc-core/src/ppcore/configs/common/source.py new file mode 100644 index 00000000..eab1d574 --- /dev/null +++ b/pproc-core/src/ppcore/configs/common/source.py @@ -0,0 +1,24 @@ +from typing import Optional, Literal + +from pydantic import BaseModel + + +class FDBSource(BaseModel): + name: Literal["fdb"] = "fdb" + config: Optional[str] = None + stream: bool = True + + +class MARSSource(BaseModel): + name: Literal["mars"] = "mars" + + +class FileSource(BaseModel): + name: Literal["file"] = "file" + path: str + + +class FilePatternSource(BaseModel): + name: Literal["file-pattern"] = "file-pattern" + pattern: str + hive_partitioning: bool = True diff --git a/pproc-core/src/ppcore/configs/common/stats.py b/pproc-core/src/ppcore/configs/common/stats.py new file mode 100644 index 00000000..691dd9de --- /dev/null +++ b/pproc-core/src/ppcore/configs/common/stats.py @@ -0,0 +1,45 @@ +from typing import Literal, Any +from pydantic import BaseModel, Field, model_validator + +from earthkit.workflows.plugins.pproc.config.threshold import Threshold + + +class Statistics(BaseModel): + metadata: dict = Field(default_factory=dict) + + +class Quantiles(Statistics): + operation: Literal["quantiles"] = "quantiles" + quantiles: int | list[float] = 100 + + +class EFI(Statistics): + operation: Literal["efi"] = "efi" + eps: float = -1.0 + + +class SOT(Statistics): + operation: Literal["sot"] = "sot" + eps: float = -1.0 + sot: list[int] + + +class Mean(Statistics): + operation: Literal["mean"] = "mean" + + +class StandardDeviation(Statistics): + operation: Literal["std"] = "std" + + +class ThresholdProbability(Statistics): + operation: Literal["threshold_probability"] = "threshold_probability" + thresholds: list[Threshold] = Field(default_factory=list) + + @model_validator(mode="before") + def validate_thresholds(cls, data: Any) -> Any: + if isinstance(data, dict) and "thresholds" not in data: + data["thresholds"] = [ + {k: data[k] for k in data if k not in cls.model_fields} + ] + return data diff --git a/pproc-core/src/ppcore/configs/common/target.py b/pproc-core/src/ppcore/configs/common/target.py new file mode 100644 index 00000000..18255e2b --- /dev/null +++ b/pproc-core/src/ppcore/configs/common/target.py @@ -0,0 +1,40 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + + +from typing import Literal, Optional + +from pydantic import BaseModel + + +class NullTarget(BaseModel): + name: Literal["null"] = "null" + + +class FileTarget(BaseModel): + name: Literal["file"] = "file" + file: str + append: bool = False + + +class FilePatternTarget(BaseModel): + name: Literal["file-pattern"] = "file-pattern" + file: str + append: bool = False + + +class FDBTarget(BaseModel): + name: Literal["fdb"] = "fdb" + config: Optional[str] = None + + +class ZarrTarget(BaseModel): + name: Literal["zarr"] = "zarr" + earthkit_to_xarray_kwargs: Optional[dict] = None + xarray_to_zarr_kwargs: Optional[dict] = None diff --git a/pproc-core/src/ppcore/configs/entrypoint/base.py b/pproc-core/src/ppcore/configs/entrypoint/base.py new file mode 100644 index 00000000..8ce1a057 --- /dev/null +++ b/pproc-core/src/ppcore/configs/entrypoint/base.py @@ -0,0 +1,42 @@ +import yaml +from annotated_types import Annotated +from pydantic import Field, BeforeValidator +from conflator import ConfigModel, CLIArg + +from ppcore.configs.entrypoint.log import LoggingConfig +from ppcore.configs.entrypoint.execution import ExecutionConfig +from ppcore.configs.product import ProductConfig +from ppcore.utils.entrypoint import validate_overrides + + +class EntrypointConfig(ConfigModel): + log: LoggingConfig = LoggingConfig() + execution: ExecutionConfig = ExecutionConfig() + products: list[ProductConfig] + input_overrides: Annotated[ + dict, + BeforeValidator(validate_overrides), + CLIArg( + "--override-input", + action="append", + default=[], + metavar="KEY=VALUE,...", + ), + Field( + default_factory=dict, description="Override input requests with these keys" + ), + ] + output_overrides: Annotated[ + dict, + BeforeValidator(validate_overrides), + CLIArg( + "--override-output", + action="append", + default=[], + metavar="KEY=VALUE,...", + ), + Field(default_factory=dict, description="Override outputs with these keys"), + ] + + def dump(self) -> str: + return yaml.dump(self.model_dump(by_alias=True), sort_keys=False) diff --git a/pproc-core/src/ppcore/configs/entrypoint/execution.py b/pproc-core/src/ppcore/configs/entrypoint/execution.py new file mode 100644 index 00000000..d26903f8 --- /dev/null +++ b/pproc-core/src/ppcore/configs/entrypoint/execution.py @@ -0,0 +1,16 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + + +from conflator import ConfigModel + + +class ExecutionConfig(ConfigModel): + hosts: int = 1 + workers: int = 1 diff --git a/pproc/src/pproc/config/log.py b/pproc-core/src/ppcore/configs/entrypoint/log.py similarity index 100% rename from pproc/src/pproc/config/log.py rename to pproc-core/src/ppcore/configs/entrypoint/log.py diff --git a/pproc-core/src/ppcore/configs/product/__init__.py b/pproc-core/src/ppcore/configs/product/__init__.py new file mode 100644 index 00000000..1bb24c6f --- /dev/null +++ b/pproc-core/src/ppcore/configs/product/__init__.py @@ -0,0 +1,62 @@ +import logging +from typing import Optional, Union +from annotated_types import Annotated +import copy +from pydantic import Field + +from ppcore.configs.product.ensemble import Ensemble + +logger = logging.getLogger(__name__) + +ENTRYPOINT_TO_CONFIG = { + "pproc-ensms": "ensemble", + "pproc-quantiles": "ensemble", + "pproc-probabilities": "ensemble", + "pproc-accumulate": "ensemble", + "pproc-extreme": "extreme", +} + + +ProductConfig = Annotated[ + Union[Ensemble], + Field(discriminator="name"), +] + + +def from_schema( + schema: dict, request: dict, metadata: Optional[dict] = None, **overrides +) -> ProductConfig: + name = schema.pop("config", "ensemble") + schema.pop("name") + schema.pop("entrypoint", None) + interp_keys = schema.pop("interp_keys", {}) + dtype = schema.pop("dtype", "float32") + inputs = copy.deepcopy(schema.pop("inputs")) + accums = schema.pop("accumulations", None) + + for req in inputs: + if grid := req.pop("target_grid", None): + req["interpolate"] = { + "grid": grid, + **interp_keys, + } + + config = { + "name": name, + "requests": inputs, + "dtype": dtype, + "sources": request.pop("sources", None), + "outputs": request.pop("outputs", None), + "metadata": metadata, + **schema, + } + + if accums is not None: + # Populate coords in accumulations with values from inputs + for dim, accum in accums.items(): + accum["coords"] = inputs[0][dim] + config["accumulations"] = accums + + logger.info("Schema config", config) + base = ProductConfig(**config) + return ProductConfig(**{**base.model_dump(), **overrides}) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/anomaly.py b/pproc-core/src/ppcore/configs/product/anomaly.py similarity index 59% rename from pproc-core/src/earthkit/workflows/plugins/pproc/config/anomaly.py rename to pproc-core/src/ppcore/configs/product/anomaly.py index d714382b..d2503c8d 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/anomaly.py +++ b/pproc-core/src/ppcore/configs/product/anomaly.py @@ -13,10 +13,11 @@ from earthkit.workflows.plugins.pproc.fluent import Action -from .ensemble import EnsembleConfig +from .ensemble import Ensemble -class AnomalyConfig(EnsembleConfig): + +class Anomaly(Ensemble): @property def climatology(self) -> list[dict]: return [x for x in self.inputs if x["type"] in ["em", "es"]] @@ -66,3 +67,54 @@ def action( return stats.join(clim_headers, "**datatype**", match_coord_values=True).reduce( FieldListBackend.set_metadata, dim="**datatype**" ) + + +# def anomaly( +# output_requests: list[dict], pproc_schema: str, target: str = "null:" +# ) -> Graph: +# """ +# Generate graph for ensemble member anomaly products e.g. threshold probabilities +# for t850. +# Parameters +# ---------- +# output_requests: list[dict], list of dictionaries containing output requests +# pproc_schema: str, path to schema file +# target: str, target and location to write output + +# Returns +# ------- +# Graph +# """ +# total_graph = Graph([]) +# ensemble_dim = "type" +# for req in output_requests: +# config = derive_template(req, pproc_schema) +# forecast = from_source( +# [ +# Request(x, no_expand=("number",)) +# for x in squeeze( +# sum([list(expand(x)) for x in config.forecast], []), +# ["step", "number", "param", "levelist"], +# ) +# ], +# join_key=ensemble_dim, +# backend_kwargs={"stream": True}, +# ) +# climatology = from_source( +# [ +# Request(x) +# for x in squeeze( +# sum([list(expand(x)) for x in config.climatology], []), +# ["type", "step"], +# ) +# ], +# join_key="step", +# ) +# total_graph += ( +# config.action( +# forecast=forecast, climatology=climatology, ensemble_dim=ensemble_dim +# ) +# .write(target) +# .graph() +# ) +# return deduplicate_nodes(total_graph) diff --git a/pproc-core/src/ppcore/configs/product/ensemble.py b/pproc-core/src/ppcore/configs/product/ensemble.py new file mode 100644 index 00000000..5d30c135 --- /dev/null +++ b/pproc-core/src/ppcore/configs/product/ensemble.py @@ -0,0 +1,60 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from typing import Any, Optional, Union, Literal +from pydantic import BaseModel, Field, model_validator + +from ppcore.configs.common.preprocessing import PreprocessingConfig +from ppcore.configs.common.input import create_input_model +from ppcore.configs.common.output import Output +from ppcore.configs.common.accumulation import Accumulation +from ppcore.configs.common.stats import ( + Mean, + StandardDeviation, + Quantiles, + ThresholdProbability, +) + + +EnsembleInputModel = create_input_model("EnsembleInputsModel", inputs=["fc"]) + + +class Ensemble(BaseModel): + name: Literal["ensemble"] = Field("ensemble") + preprocessing: PreprocessingConfig = Field(default_factory=PreprocessingConfig) + accumulations: dict[str, Accumulation] = Field(default_factory=dict) + statistics: Union[Mean, StandardDeviation, Quantiles, ThresholdProbability] + inputs: Optional[EnsembleInputModel] = None + output: Optional[Output] = None + + @model_validator(mode="before") + def validate_config(cls, data: Any) -> Any: + if isinstance(data, dict): + if "requests" in data: + if sources := data.pop("sources", None): + if isinstance(sources, dict): + sources = sources["fc"] + if isinstance(sources, str): + sources = [sources] + data["inputs"] = { + "fc": { + "requests": data.pop("requests"), + "sources": sources, + "dtype": data.pop("dtype"), + } + } + if output := data.pop("outputs", None): + data["output"] = output + if metadata := data.pop("metadata", None): + stat_metadata = data["statistics"].setdefault("metadata", {}) + stat_metadata.update(metadata) + return data + + +Config = Ensemble diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/extreme.py b/pproc-core/src/ppcore/configs/product/extreme.py similarity index 57% rename from pproc-core/src/earthkit/workflows/plugins/pproc/config/extreme.py rename to pproc-core/src/ppcore/configs/product/extreme.py index c8874c3f..e28834ff 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/extreme.py +++ b/pproc-core/src/ppcore/configs/product/extreme.py @@ -10,10 +10,10 @@ from earthkit.workflows.plugins.pproc.fluent import Action -from .ensemble import EnsembleConfig +from .ensemble import Ensemble -class ExtremeConfig(EnsembleConfig): +class Extreme(Ensemble): @property def climatology(self) -> list[dict]: return [x for x in self.inputs if x["type"] == "cd"] @@ -56,3 +56,46 @@ def action( step_ranges=[self.step_range], **self.stats, ) + + +# def extreme( +# output_requests: list[dict], pproc_schema: str, target: str = "null:" +# ) -> Graph: +# """ +# Generate graph for EFI/SOT products. +# Parameters +# ---------- +# output_requests: list[dict], list of dictionaries containing output requests +# pproc_schema: str, path to schema file +# target: str, target and location to write output + +# Returns +# ------- +# Graph +# """ +# total_graph = Graph([]) +# ensemble_dim = "type" +# for req in output_requests: +# config = derive_template(req, pproc_schema) +# forecast = from_source( +# [ +# Request(x, no_expand=("number")) +# for x in squeeze( +# sum([list(expand(x)) for x in config.forecast], []), +# ["step", "number", "param", "levelist"], +# ) +# ], +# join_key=ensemble_dim, +# backend_kwargs={"stream": True}, +# ) +# climatology = from_source( +# [Request(x, no_expand=("quantile")) for x in config.climatology] +# ) +# total_graph += ( +# config.action( +# forecast=forecast, climatology=climatology, ensemble_dim=ensemble_dim +# ) +# .write(target) +# .graph() +# ) +# return deduplicate_nodes(total_graph) diff --git a/pproc-core/src/ppcore/configs/utils.py b/pproc-core/src/ppcore/configs/utils.py new file mode 100644 index 00000000..dabcdec7 --- /dev/null +++ b/pproc-core/src/ppcore/configs/utils.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel, ConfigDict + + +class PProcCoreBaseModel(BaseModel): + model_config = ConfigDict(extra="forbid") diff --git a/pproc-core/src/ppcore/product.py b/pproc-core/src/ppcore/product.py new file mode 100644 index 00000000..c9aea713 --- /dev/null +++ b/pproc-core/src/ppcore/product.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +# +# (C) Copyright 1996- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation nor +# does it submit to any jurisdiction. +import sys +import logging + +from conflator import Conflator + +from earthkit.workflows.compilers import graph2job +from cascade.low.core import JobInstanceRich +from cascade.main import run_locally +from ppcore.configs.entrypoint.base import EntrypointConfig +from ppcore.products import graph_from_configs + +logger = logging.getLogger(__name__) + + +def main(): + sys.stdout.reconfigure(line_buffering=True) + cfg = Conflator(app_name="pproc-product", model=EntrypointConfig).load() + logger.info(cfg.dump()) + graph = graph_from_configs(cfg.products, cfg.input_overrides, cfg.output_overrides) + run_locally( + JobInstanceRich(jobInstance=graph2job(graph), checkpointSpec=None), + hosts=cfg.execution.hosts, + workers=cfg.execution.workers, + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py new file mode 100644 index 00000000..215b6acf --- /dev/null +++ b/pproc-core/src/ppcore/products/__init__.py @@ -0,0 +1,66 @@ +from typing import Optional + +from earthkit.workflows.graph import Graph, deduplicate_nodes + +from ppcore.configs import from_outputs as config_from_outputs +from ppcore.configs.product import ProductConfig +from ppcore.products.base import Product +from ppcore.products.ensemble import Ensemble + + +_PRODUCTS = {"ensemble": Ensemble} + + +def product_from_config( + config: ProductConfig, input_overrides: dict = {}, output_overrides: dict = {} +) -> Product: + if config.name not in _PRODUCTS: + raise ValueError(f"Product {config.name} not supported") + return _PRODUCTS[config.name]( + config=config, + input_overrides=input_overrides, + output_overrides=output_overrides, + ) + + +def product_from_output( + request: dict, + pproc_schema: str, + metadata: Optional[dict] = None, +) -> Product: + """ + Returns fluent.Action for computing the product specified by the output request + and PProc schema + """ + config = list(config_from_outputs([request], pproc_schema, metadata=metadata))[0] + return product_from_config(config) + + +def graph_from_outputs( + requests: list[dict], + pproc_schema: str, + metadata: Optional[dict] = None, +) -> Product: + """ + Returns fluent.Action for computing the product specified by the output request + and PProc schema + """ + graph = Graph([]) + for request in requests: + graph += product_from_output(request, pproc_schema, metadata).action().graph() + return deduplicate_nodes(graph) + + +def graph_from_configs( + configs: list[ProductConfig], + input_overrides: dict = {}, + output_overrides: dict = {}, +) -> Graph: + graph = Graph([]) + for config in configs: + graph += ( + product_from_config(config, input_overrides, output_overrides) + .action() + .graph() + ) + return deduplicate_nodes(graph) diff --git a/pproc-core/src/ppcore/products/base.py b/pproc-core/src/ppcore/products/base.py new file mode 100644 index 00000000..03cbf1f2 --- /dev/null +++ b/pproc-core/src/ppcore/products/base.py @@ -0,0 +1,18 @@ +from abc import ABC +from dataclasses import dataclass +from typing import Iterator, Optional + + +@dataclass +class Product(ABC): + input_overrides: dict + output_overrides: dict + + def action(self, *args, **kwargs): + raise NotImplementedError + + def in_mars(self, sources: Optional[list[str]] = None) -> Iterator[dict]: + raise NotImplementedError + + def out_mars(self, targets: Optional[list[str]] = None) -> Iterator[dict]: + raise NotImplementedError diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py new file mode 100644 index 00000000..53d52c62 --- /dev/null +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -0,0 +1,123 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from typing import Optional, Iterator +from dataclasses import dataclass + +from earthkit.workflows.plugins.pproc.fluent import Action +from earthkit.workflows.plugins.pproc.fluent import from_source +from earthkit.workflows.plugins.pproc.utils.request import Request + +from ppcore.utils.requests import ( + expand, + squeeze, + validate_request, +) +from ppcore.configs.product.ensemble import Config +from ppcore.products.base import Product + + +@dataclass +class Ensemble(Product): + config: Config + preprocessing_dim: str = "param" + ensemble_dim: str = "number" + + def source(self, ensemble_dim: Optional[str] = None) -> Action: + if self.config.inputs is None: + raise ValueError("No inputs provided for ensemble config") + input_config = self.config.inputs.fc + ensemble_dim = ensemble_dim or self.ensemble_dim + requests = [] + for x in squeeze( + sum( + [ + list(expand(dict(x, **self.input_overrides))) + for x in input_config.requests + ], + [], + ), + ["step", "number", "param", "levelist"], + ): + req = Request(validate_request(x), no_expand=("levelist")) + if "number" not in req and ensemble_dim == "number": + req.make_dim("number", 0) + requests.append(req) + return from_source( + input_config.sources, + requests, + input_config.dtype, + join_key=ensemble_dim, + ) + + def action( + self, + forecast: Optional[Action] = None, + preprocessing_dim: Optional[str] = None, + ensemble_dim: Optional[str] = None, + ) -> Action: + ret = forecast or self.source(ensemble_dim=ensemble_dim) + for preprocessing in self.config.preprocessing.actions: + ret = ret.preprocessing( + preprocessing_dim or self.preprocessing_dim, + **preprocessing.model_dump(), + ) + for dim, accumulation in self.config.accumulations.items(): + ret = ret.accumulation( + dim=dim, + **accumulation.model_dump(), + ) + ret = ret.ensemble_statistics( + dim=ensemble_dim or self.ensemble_dim, + **self.config.statistics.model_dump(), + ) + + if self.config.output is not None: + output_config = self.config.output.model_dump() + out_metadata = output_config["metadata"].copy() + out_metadata.update(self.output_overrides) + ret = ret.write(output_config["targets"], metadata=out_metadata) + return ret + + def in_mars(self, sources: Optional[list[str]] = None) -> Iterator[dict]: + if self.config.inputs is None: + return + inputs = self.config.inputs.fc + if not sources or set.intersection( + set(sources), set(x.name for x in inputs.sources) + ): + source = inputs.sources[0] + for input in inputs.requests: + overridden = input.copy() + if source.name == "file": + overridden["source"] = source.path + elif source.name == "file-pattern": + overridden["source"] = source.pattern + else: + overridden["source"] = source.name + overridden.update(self.input_overrides) + yield overridden + + def out_mars(self, targets: Optional[list[str]] = None) -> Iterator[dict]: + output = self.config.output + if output is None: + return + if not targets or set.intersection( + set(targets), set(x.name for x in output.targets) + ): + target = output.targets[0] + overridden = output.request.copy() + if target.name == "file": + overridden["target"] = target.file + elif target.name == "file-pattern": + overridden["target"] = target.file + else: + overridden["target"] = target.name + overridden.update(self.output_overrides) + yield overridden diff --git a/pproc-core/src/ppcore/schema/config.py b/pproc-core/src/ppcore/schema/config.py index 51f7be1a..d73e6f00 100644 --- a/pproc-core/src/ppcore/schema/config.py +++ b/pproc-core/src/ppcore/schema/config.py @@ -9,13 +9,13 @@ import numpy as np +from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_value from ppcore.schema.base import BaseSchema from ppcore.schema.base import dict_update from ppcore.schema.filters import _selection from ppcore.schema.filters import _steplength from ppcore.schema.filters import _steptype from ppcore.utils.dicts import dict_apply -from ppcore.utils.helpers import fill_template_value from ppcore.utils.helpers import to_list from ppcore.utils.requests import validate_request diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index 6cb95543..2209ca22 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -22,23 +22,29 @@ from typing_extensions import Self from ppcore.schema.base import BaseSchema -from ppcore.schema.deriver import ClimDateDeriver -from ppcore.schema.deriver import ClimStepDeriver -from ppcore.schema.deriver import DefaultStepDeriver -from ppcore.schema.deriver import ForecastStepDeriver -from ppcore.schema.deriver import HindcastDatesDeriver -from ppcore.schema.filters import _members -from ppcore.schema.filters import _selection -from ppcore.schema.filters import _steplength -from ppcore.schema.filters import _steptype from ppcore.schema.step import StepSchema from ppcore.utils.dicts import deep_update from ppcore.utils.helpers import to_list -from ppcore.utils.requests import expand -from ppcore.utils.requests import extract_mars -from ppcore.utils.requests import squeeze -from ppcore.utils.requests import update_request -from ppcore.utils.requests import validate_request +from ppcore.utils.mars import extract_mars +from ppcore.schema.deriver import ( + ClimDateDeriver, + ClimStepDeriver, + DefaultStepDeriver, + ForecastStepDeriver, + HindcastDatesDeriver, +) +from ppcore.schema.filters import ( + _members, + _selection, + _steplength, + _steptype, +) +from ppcore.utils.requests import ( + expand, + squeeze, + update_request, + validate_request, +) logger = logging.getLogger(__name__) diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index 6b8319b3..464de46d 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -18,7 +18,7 @@ from ppcore.schema.config import ConfigSchema from ppcore.schema.input import InputSchema from ppcore.schema.step import StepSchema -from ppcore.utils.requests import METADATA_KEYS +from ppcore.utils.mars import METADATA_KEYS from ppcore.utils.requests import VALUE_TYPES from ppcore.utils.requests import validate_request diff --git a/pproc-core/src/ppcore/utils/entrypoint.py b/pproc-core/src/ppcore/utils/entrypoint.py new file mode 100644 index 00000000..538333bb --- /dev/null +++ b/pproc-core/src/ppcore/utils/entrypoint.py @@ -0,0 +1,21 @@ +from typing import Any + + +def parse_vars(items: list[str]) -> dict: + """ + Parse a series of key-value pairs and return a dictionary + """ + return dict(map(lambda s: s.split("="), items)) + + +def parse_var_strs(items: list[str]) -> dict: + """ + Parse a list of comma-separated lists of key-value pairs and return a dictionary + """ + return parse_vars(sum((s.split(",") for s in items if s), start=[])) + + +def validate_overrides(data: Any) -> Any: + if isinstance(data, list): + return parse_var_strs(data) + return data diff --git a/pproc-core/src/ppcore/utils/helpers.py b/pproc-core/src/ppcore/utils/helpers.py index c85873c6..1546e019 100644 --- a/pproc-core/src/ppcore/utils/helpers.py +++ b/pproc-core/src/ppcore/utils/helpers.py @@ -1,36 +1,9 @@ -import re from typing import Any import numpy as np -_TEMPLATE_RE = re.compile("^{([a-z_]*)}:?([a-z]*)$", re.I) -_TYPES = { - "int": int, - "str": str, - "float": float, -} - def to_list(value: Any) -> list[Any]: if np.ndim(value) == 0: return [value] return list(value) - - -def fill_template_value(val: str, template_map: dict): - m = _TEMPLATE_RE.fullmatch(val) - if m is None: - return val - value, tp = m.groups() - if value not in template_map: - return val - - return template_map[value] if len(tp) == 0 else _TYPES[tp](template_map[value]) - - -def fill_template_values(metadata: dict, template_map: dict) -> dict: - metadata = metadata.copy() - for key, val in metadata.items(): - if isinstance(val, str): - metadata[key] = fill_template_value(val, template_map) - return metadata diff --git a/pproc-core/src/ppcore/utils/io.py b/pproc-core/src/ppcore/utils/io.py new file mode 100644 index 00000000..86a2a769 --- /dev/null +++ b/pproc-core/src/ppcore/utils/io.py @@ -0,0 +1,13 @@ +from typing import Optional, Tuple +import re + +_LOCATION_RE = re.compile("^([a-z](?:[a-z0-9+-.])*):(.*)$", re.I) + + +def split_location( + loc: str, default: Optional[str] = None +) -> Tuple[Optional[str], str]: + m = _LOCATION_RE.fullmatch(loc) + if m is None: + return (default, loc) + return m.groups() diff --git a/pproc-core/src/ppcore/utils/mars.py b/pproc-core/src/ppcore/utils/mars.py new file mode 100644 index 00000000..c1960b22 --- /dev/null +++ b/pproc-core/src/ppcore/utils/mars.py @@ -0,0 +1,73 @@ +from typing import Optional +from datetime import datetime, date +from math import ceil + +METADATA_KEYS = {"param": "paramId", "date": "dataDate"} + + +def _val_to_mars(val): + if isinstance(val, bytes): + return val + elif isinstance(val, (list, tuple)): + return b"/".join(_val_to_mars(v) for v in val) + elif isinstance(val, str): + pass + elif isinstance(val, int): + val = str(val) + elif isinstance(val, (datetime, date)): + val = val.strftime("%Y%m%d") + elif isinstance(val, range): + first = val.start + last = val.start + (ceil((val.stop - val.start) / val.step) - 1) * val.step + step = val.step + val = f"{first}/to/{last}" + if step != 1: + val += f"/by/{step}" + elif isinstance(val, float) and val.is_integer(): + val = str(int(val)) + else: + raise TypeError(f"Cannot convert {type(val)} to MARS request") + return val.encode("utf-8") + + +def to_mars(verb: bytes, req: dict) -> bytes: + def _gen_req(): + yield verb + for key, val in req.items(): + key = key.encode("utf-8") + val = _val_to_mars(val) + yield key + b"=" + val + + return b",".join(_gen_req()) + + +def extract_mars(keys: dict, additional: Optional[list[str]] = None) -> dict: + additional = additional or [] + for key, metadata_key in METADATA_KEYS.items(): + if metadata_key in keys: + keys[key] = keys.pop(metadata_key) + mars_namespace = [ + "class", + "type", + "stream", + "expver", + "model", + "levtype", + "levelist", + "param", + "date", + "year", + "month", + "hdate", + "fcmonth", + "fcperiod", + "time", + "step", + "number", + "domain", + "quantile", + "method", + "origin", + "system", + ] + return {k: v for k, v in keys.items() if (k in mars_namespace) or (k in additional)} diff --git a/pproc-core/src/ppcore/utils/requests.py b/pproc-core/src/ppcore/utils/requests.py index 2346509b..68ae4df3 100644 --- a/pproc-core/src/ppcore/utils/requests.py +++ b/pproc-core/src/ppcore/utils/requests.py @@ -10,7 +10,6 @@ from ppcore.utils.dicts import dict_product from ppcore.utils.helpers import to_list -METADATA_KEYS = {"param": "paramId", "date": "dataDate"} VALUE_TYPES = { "param": str, @@ -133,35 +132,3 @@ def update_request( if inp not in deduplicated: deduplicated.append(inp) return deduplicated - - -def extract_mars(keys: dict, additional: Optional[list[str]] = None) -> dict: - additional = additional or [] - for key, metadata_key in METADATA_KEYS.items(): - if metadata_key in keys: - keys[key] = keys.pop(metadata_key) - mars_namespace = [ - "class", - "type", - "stream", - "expver", - "model", - "levtype", - "levelist", - "param", - "date", - "year", - "month", - "hdate", - "fcmonth", - "fcperiod", - "time", - "step", - "number", - "domain", - "quantile", - "method", - "origin", - "system", - ] - return {k: v for k, v in keys.items() if (k in mars_namespace) or (k in additional)} diff --git a/pproc/tests/config/test_log.py b/pproc-core/tests/ppcore/configs/entrypoint/test_log.py similarity index 97% rename from pproc/tests/config/test_log.py rename to pproc-core/tests/ppcore/configs/entrypoint/test_log.py index 43343de3..9b735cb2 100644 --- a/pproc/tests/config/test_log.py +++ b/pproc-core/tests/ppcore/configs/entrypoint/test_log.py @@ -14,7 +14,7 @@ from conflator import Conflator from pydantic import ValidationError -from pproc.config.log import LoggingConfig +from ppcore.configs.entrypoint.log import LoggingConfig def test_logging_model_default(): diff --git a/pproc-core/tests/workflows/templates/ensms.yaml b/pproc-core/tests/ppcore/products/templates/ensms.yaml similarity index 89% rename from pproc-core/tests/workflows/templates/ensms.yaml rename to pproc-core/tests/ppcore/products/templates/ensms.yaml index e8fbcd67..07d8e448 100644 --- a/pproc-core/tests/workflows/templates/ensms.yaml +++ b/pproc-core/tests/ppcore/products/templates/ensms.yaml @@ -9,6 +9,7 @@ time: 12 expver: "0001" step: 0 + sources: "fdb:" - class: od stream: enfo type: em @@ -20,6 +21,7 @@ time: 12 expver: "0001" step: 3 + sources: "fdb:" - class: od stream: enfo type: em @@ -31,6 +33,7 @@ time: 12 expver: "0001" step: 6 + sources: "fdb:" - class: od stream: enfo type: es @@ -42,6 +45,7 @@ time: 12 expver: "0001" step: 0 + sources: "fdb:" - class: od stream: enfo type: es @@ -53,6 +57,7 @@ time: 12 expver: "0001" step: 3 + sources: "fdb:" - class: od stream: enfo type: es @@ -64,6 +69,7 @@ time: 12 expver: "0001" step: 6 + sources: "fdb:" - class: od stream: enfo type: em @@ -74,6 +80,7 @@ time: 12 expver: "0001" step: 0-6 + sources: "fdb:" - class: od stream: enfo type: em @@ -84,6 +91,7 @@ time: 12 expver: "0001" step: 6-12 + sources: "fdb:" - class: od stream: enfo type: es @@ -94,6 +102,7 @@ time: 12 expver: "0001" step: 0-6 + sources: "fdb:" - class: od stream: enfo type: es @@ -104,3 +113,4 @@ time: 12 expver: "0001" step: 6-12 + sources: "fdb:" diff --git a/pproc-core/tests/workflows/templates/extreme.yaml b/pproc-core/tests/ppcore/products/templates/extreme.yaml similarity index 100% rename from pproc-core/tests/workflows/templates/extreme.yaml rename to pproc-core/tests/ppcore/products/templates/extreme.yaml diff --git a/pproc-core/tests/workflows/templates/prob.yaml b/pproc-core/tests/ppcore/products/templates/prob.yaml similarity index 88% rename from pproc-core/tests/workflows/templates/prob.yaml rename to pproc-core/tests/ppcore/products/templates/prob.yaml index d242ab84..ea43d456 100644 --- a/pproc-core/tests/workflows/templates/prob.yaml +++ b/pproc-core/tests/ppcore/products/templates/prob.yaml @@ -8,6 +8,7 @@ time: 12 expver: "0001" step: 0-24 + sources: "fdb:" - class: od stream: enfo type: ep @@ -18,6 +19,7 @@ time: 12 expver: "0001" step: 12-36 + sources: "fdb:" - class: od stream: enfo type: ep @@ -28,6 +30,7 @@ time: 12 expver: "0001" step: 0-24 + sources: "fdb:" - class: od stream: enfo type: ep @@ -38,6 +41,7 @@ time: 12 expver: "0001" step: 12-36 + sources: "fdb:" - class: od stream: enfo type: ep @@ -48,6 +52,7 @@ time: 12 expver: "0001" step: 0-24 + sources: "fdb:" - class: od stream: enfo type: ep @@ -58,6 +63,7 @@ time: 12 expver: "0001" step: 12-36 + sources: "fdb:" - class: od stream: enfo type: ep @@ -68,6 +74,7 @@ time: 12 expver: "0001" step: 12 + sources: "fdb:" - class: od stream: enfo type: ep @@ -78,6 +85,7 @@ time: 12 expver: "0001" step: 24 + sources: "fdb:" - class: od stream: enfo type: ep @@ -88,6 +96,7 @@ time: 12 expver: "0001" step: 12 + sources: "fdb:" - class: od stream: enfo type: ep @@ -98,6 +107,7 @@ time: 12 expver: "0001" step: 24 + sources: "fdb:" - class: od stream: enfo type: ep @@ -108,6 +118,7 @@ time: 12 expver: "0001" step: 120-168 + sources: "fdb:" - class: od stream: enfo type: ep @@ -118,6 +129,7 @@ time: 12 expver: "0001" step: 120-240 + sources: "fdb:" - class: od stream: enfo type: ep @@ -128,6 +140,7 @@ time: 12 expver: "0001" step: 168-240 + sources: "fdb:" - class: od stream: enfo type: ep @@ -138,3 +151,4 @@ time: 12 expver: "0001" step: 126 + sources: "fdb:" diff --git a/pproc-core/tests/workflows/templates/quantiles.yaml b/pproc-core/tests/ppcore/products/templates/quantiles.yaml similarity index 100% rename from pproc-core/tests/workflows/templates/quantiles.yaml rename to pproc-core/tests/ppcore/products/templates/quantiles.yaml diff --git a/pproc-core/tests/workflows/templates/t850.yaml b/pproc-core/tests/ppcore/products/templates/t850.yaml similarity index 100% rename from pproc-core/tests/workflows/templates/t850.yaml rename to pproc-core/tests/ppcore/products/templates/t850.yaml diff --git a/pproc-core/tests/workflows/templates/wind.yaml b/pproc-core/tests/ppcore/products/templates/wind.yaml similarity index 100% rename from pproc-core/tests/workflows/templates/wind.yaml rename to pproc-core/tests/ppcore/products/templates/wind.yaml diff --git a/pproc-core/tests/ppcore/products/test_products.py b/pproc-core/tests/ppcore/products/test_products.py new file mode 100644 index 00000000..e5c8ab65 --- /dev/null +++ b/pproc-core/tests/ppcore/products/test_products.py @@ -0,0 +1,68 @@ +# (C) Copyright 2024- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import os + +import pytest +import yaml + +from earthkit.workflows.graph import Graph + +from earthkit.workflows.plugins.pproc.fluent import from_source +from earthkit.workflows.plugins.pproc.utils.request import Request +from ppcore.products import product_from_output, graph_from_outputs +from conftest import SCHEMA + + +ROOT_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__))) + + +@pytest.mark.parametrize( + "requests", + [ + os.path.join(ROOT_DIR, "templates", "ensms.yaml"), + ], + ids=["ensms"], +) +def test_graph_construction(requests): + with open(requests, "r") as f: + output_requests = yaml.safe_load(f) + graph_from_outputs(output_requests, SCHEMA) + + +@pytest.mark.parametrize( + "requests", + [ + os.path.join(ROOT_DIR, "templates", "ensms.yaml"), + ], + ids=["ensms"], +) +def test_custom_source(requests): + with open(requests, "r") as f: + output_requests = yaml.safe_load(f) + + graph = Graph([]) + for req in output_requests: + product = product_from_output(req, SCHEMA, metadata={"edition": 2}) + requests = [] + for request in product.config.inputs.fc.requests: + req = Request(request) + if "number" not in req: + req.make_dim("number", 0) + requests.append(req) + sources = from_source( + ["fdb"], + requests, + join_key="number", + ) + new_action = product.action( + ensemble_dim="number", + forecast=sources, + ).write([{"name": "null"}]) + graph += new_action.graph() diff --git a/pproc-core/tests/ppcore/schema/test_schema.py b/pproc-core/tests/ppcore/schema/test_schema.py index c33b7360..1e5f31c2 100644 --- a/pproc-core/tests/ppcore/schema/test_schema.py +++ b/pproc-core/tests/ppcore/schema/test_schema.py @@ -172,6 +172,19 @@ "matrix-loader": "file-io", }, "dtype": "float64", + "statistics": { + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 20241001, + "legBaseTime": 0, + "legNumber": 1, + "localDefinitionNumber": 30, + "numberOfForecastsInEnsemble": "{num_fields}:int", + "oceanAtmosphereCoupling": 2, + "perturbationNumber": 0, + }, + "operation": "mean", + }, "inputs": [ { "class": "od", @@ -434,6 +447,19 @@ def test_schema_from_output(req, config, num_generated): "matrix-loader": "file-io", }, "dtype": "float64", + "statistics": { + "metadata": { + "bitsPerValue": 16, + "legBaseDate": 20241001, + "legBaseTime": 0, + "legNumber": 1, + "localDefinitionNumber": 30, + "numberOfForecastsInEnsemble": "{num_fields}:int", + "oceanAtmosphereCoupling": 2, + "perturbationNumber": 0, + }, + "operation": "mean", + }, }, ], ], diff --git a/pproc/tests/common/test_mars.py b/pproc-core/tests/ppcore/utils/test_mars.py similarity index 98% rename from pproc/tests/common/test_mars.py rename to pproc-core/tests/ppcore/utils/test_mars.py index a03cf38d..4b47d183 100644 --- a/pproc/tests/common/test_mars.py +++ b/pproc-core/tests/ppcore/utils/test_mars.py @@ -11,7 +11,7 @@ import pytest -from pproc.common import mars +from ppcore.utils import mars @pytest.mark.parametrize( diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index ca1bfa52..acf07974 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -28,7 +28,6 @@ config: timeRangeIndicator: 2 accumulations: step: - type: legacywindow name: type: default length: "{steplength}:int" @@ -155,61 +154,72 @@ config: hdate: {} "*": {} em/es: - entrypoint: pproc-ensms + entrypoint: "pproc-ensms" + metadata_from_output: ["param", "stream", "date", "type"] + filter:type: + em: + statistics: + operation: mean + es: + statistics: + operation: std filter:stream: enfo/waef/eefo/weef: dtype: float64 - metadata: - localDefinitionNumber: 30 - oceanAtmosphereCoupling: 2 - legBaseDate: "{date}:int" - legBaseTime: "{time}:int" - legNumber: 1 - perturbationNumber: 0 - bitsPerValue: 16 - numberOfForecastsInEnsemble: "{num_fields}:int" + statistics: + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: "{num_fields}:int" filter:param: "10": - metadata: - bitsPerValue: 24 + statistics: + metadata: + bitsPerValue: 24 "*": {} efhs/wehs/eehs: filter:steptype: range: - total_fields: 220 - outputs: - default: - metadata: - localDefinitionNumber: 19 - metadata: - bitsPerValue: 12 - sampleSizeOfModelClimate: "{num_fields}:int" - versionOfModelClimate: 0 - efiOrder: 0 - numberOfReforecastYearsInModelClimate: 20 + statistics: + metadata: + localDefinitionNumber: 19 + bitsPerValue: 12 + sampleSizeOfModelClimate: "{num_fields}:int" + versionOfModelClimate: 0 + efiOrder: 0 + numberOfReforecastYearsInModelClimate: 20 accumulations: date: operation: "aggregation" filter:steplength: "*": - metadata: - numberOfDaysInClimateSamplingWindow: 31 + statistics: + metadata: + numberOfDaysInClimateSamplingWindow: 31 "168": - metadata: - numberOfDaysInClimateSamplingWindow: 7 + statistics: + metadata: + numberOfDaysInClimateSamplingWindow: 7 instantaneous: dtype: float64 - metadata: - perturbationNumber: 0 - numberOfForecastsInEnsemble: "{num_fields}:int" - bitsPerValue: 16 - dataDate: "{date}:int" + statistics: + metadata: + perturbationNumber: 0 + numberOfForecastsInEnsemble: "{num_fields}:int" + bitsPerValue: 16 + dataDate: "{date}:int" accumulations: step: {} filter:param: "129": - metadata: - bitsPerValue: 24 + statistics: + metadata: + bitsPerValue: 24 "*": {} efi/sot/efic: entrypoint: pproc-extreme diff --git a/pproc-core/tests/workflows/test_products.py b/pproc-core/tests/workflows/test_products.py deleted file mode 100644 index 8ab4036d..00000000 --- a/pproc-core/tests/workflows/test_products.py +++ /dev/null @@ -1,36 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -import os -from pathlib import Path - -import pytest -import yaml - -from earthkit.workflows.plugins.pproc import products - -ROOT_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__))) - - -@pytest.mark.parametrize( - "product, requests", - [ - ["ensemble", os.path.join(ROOT_DIR, "templates", "prob.yaml")], - ["anomaly", os.path.join(ROOT_DIR, "templates", "t850.yaml")], - ["ensemble", os.path.join(ROOT_DIR, "templates", "ensms.yaml")], - ["extreme", os.path.join(ROOT_DIR, "templates", "extreme.yaml")], - ["ensemble", os.path.join(ROOT_DIR, "templates", "quantiles.yaml")], - ], - ids=["prob", "t850", "ensms", "extreme", "quantiles"], -) -def test_graph_construction(product, requests): - with open(requests, "r") as f: - output_requests = yaml.safe_load(f) - schema_path = os.path.join(Path(ROOT_DIR).parent, "schema.yaml") - getattr(products, product)(output_requests, schema_path) diff --git a/pproc-core/tests/workflows/test_templates.py b/pproc-core/tests/workflows/test_templates.py deleted file mode 100644 index 47fe02a6..00000000 --- a/pproc-core/tests/workflows/test_templates.py +++ /dev/null @@ -1,91 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -import os -from pathlib import Path - -import pytest -import yaml -from earthkit.workflows.graph import Graph -from earthkit.workflows.graph import deduplicate_nodes - -from earthkit.workflows.plugins.pproc.fluent import from_source -from earthkit.workflows.plugins.pproc.templates import derive_template -from earthkit.workflows.plugins.pproc.templates import from_request -from earthkit.workflows.plugins.pproc.utils.request import Request -from ppcore.utils.requests import expand -from ppcore.utils.requests import squeeze - - -ROOT_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__))) - -sources = from_source( - [ - Request( - { - "param": "130", - "levtype": "pl", - "levelist": [250, 850], - "type": "pf", - "number": list(range(0, 5)), - } - ), - Request( - { - "param": "130", - "levtype": "pl", - "levelist": [250, 850], - "type": "cf", - } - ), - ], - join_key="type", - backend_kwargs={"stream": True}, -) - - -@pytest.mark.parametrize( - "requests", - [ - os.path.join(ROOT_DIR, "templates", "prob.yaml"), - os.path.join(ROOT_DIR, "templates", "ensms.yaml"), - os.path.join(ROOT_DIR, "templates", "quantiles.yaml"), - ], - ids=["prob", "ensms", "quantiles"], -) -def test_from_request(requests): - with open(requests, "r") as f: - output_requests = yaml.safe_load(f) - schema_path = os.path.join(Path(ROOT_DIR).parent, "schema.yaml") - - graph = Graph([]) - for req in output_requests: - config = derive_template(req, schema_path) - source = from_source( - [ - Request(x, no_expand=("number",)) - for x in squeeze( - sum([list(expand(x)) for x in config.inputs], []), - ["step", "number", "param", "levelist"], - ) - ], - join_key="type", - backend_kwargs={"stream": True}, - ) - new_action = from_request( - req, - schema_path, - ensemble_dim="type", - forecast=source, - metadata={"edition": 2}, - ).write({"name": "null"}) - print("GRAPH", new_action.nodes) - graph += new_action.graph() - - graph = deduplicate_nodes(graph) diff --git a/pproc-core/uv.lock b/pproc-core/uv.lock index 55c5ec4c..413578d1 100644 --- a/pproc-core/uv.lock +++ b/pproc-core/uv.lock @@ -352,6 +352,20 @@ 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 = "conflator" +version = "0.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "rich-argparse" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/19/e8143a210b58494025803a684de9eb94998b7b8288f42f15fbee0161019c/conflator-0.1.8.tar.gz", hash = "sha256:9ee8958a3eebbfeb6fafc4b0b7b77c8a97d1752fd725ca8a514046a596f26508", size = 9753 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/aa/0d6a2c96234fb5cc3d55a3f5078268ef6bc4e69d202f86b93f17b3f8d2eb/conflator-0.1.8-py3-none-any.whl", hash = "sha256:7e621da64183bc9207b3857cebaa9cd1aee52ea6cb4aea7492aa9d9a4b4968c5", size = 10806 }, +] + [[package]] name = "dask" version = "2026.3.0" @@ -979,6 +993,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180 }, ] +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687 }, +] + [[package]] name = "markupsafe" version = "3.0.3" @@ -1076,6 +1102,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534 }, ] +[[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 = "msgpack" version = "1.1.2" @@ -1751,6 +1786,7 @@ name = "pproc-core" source = { editable = "." } dependencies = [ { name = "code-meters" }, + { name = "conflator" }, { name = "earthkit-time" }, { name = "earthkit-workflows", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "earthkit-workflows", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, @@ -1771,6 +1807,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "code-meters" }, + { name = "conflator", specifier = ">=0.1.8" }, { name = "earthkit-time" }, { name = "earthkit-workflows" }, { name = "numpy" }, @@ -2368,6 +2405,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075 }, ] +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654 }, +] + +[[package]] +name = "rich-argparse" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/e5/1064c43203a357d668cd42435f7a15fe6af51512d85b2104fecb937aa861/rich_argparse-1.8.0.tar.gz", hash = "sha256:679df3d832fa94ad6e4bdb07ded088cd7ea2dddc58ae9b2b46346a40b06cbc0c", size = 38940 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl", hash = "sha256:d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142", size = 25616 }, +] + [[package]] name = "rpds-py" version = "0.30.0" diff --git a/pproc-runtime/.gitignore b/pproc-runtime/.gitignore index c3f71f77..f9bcbfbd 100644 --- a/pproc-runtime/.gitignore +++ b/pproc-runtime/.gitignore @@ -1,6 +1,7 @@ *.sw[op] .DS_Store .idea/ +.venv/ # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/pproc-runtime/src/ppruntime/io.py b/pproc-runtime/src/ppruntime/io.py index 46598058..182b2a2c 100644 --- a/pproc-runtime/src/ppruntime/io.py +++ b/pproc-runtime/src/ppruntime/io.py @@ -10,6 +10,7 @@ import shutil from io import BytesIO from typing import Optional +import logging import mir from earthkit.data import FieldList, settings @@ -23,6 +24,8 @@ # for wind when executing across multiple workers settings.set("cache-policy", "temporary") +logger = logging.getLogger(__name__) + def mir_job( input: mir.MultiDimensionalGribFileInput, @@ -34,22 +37,24 @@ def mir_job( job.execute(input, stream) stream.seek(0) if cache is None: - return StreamSource(stream, read_all=True).mutate() + return StreamSource(stream, read_all=True).mutate().to_fieldlist() with open(cache, "wb") as o, stream as i: shutil.copyfileobj(i, o) return FileSource(cache).mutate() -def fdb_retrieve(request: dict, *, stream: bool = True) -> FieldList: +def fdb_retrieve(request: dict, stream: bool = False, **kwargs) -> FieldList: mir_options = request.pop("interpolate", None) if mir_options is None: - return from_source("fdb", request, read_all=True, stream=stream) # type: ignore[ty:invalid-return-type] + return from_source("fdb", request, stream=stream, read_all=True, **kwargs) # type: ignore[ty:invalid-return-type] if mir_options.get("vod2uv", "0") == "1": stream = False - reader: FieldList = from_source("fdb", request, stream=stream) # type: ignore[ty:invalid-assignment] + reader: FieldList = from_source( + "fdb", request, stream=stream, read_all=False, **kwargs + ) # type: ignore[ty:invalid-assignment] if stream: return mir_job(reader._source._stream, mir_options) # type: ignore[ty:unresolved-attribute] @@ -62,11 +67,11 @@ def fdb_retrieve(request: dict, *, stream: bool = True) -> FieldList: return mir_job(inp, mir_options) -def mars_retrieve(request: dict) -> FieldList: +def mars_retrieve(request: dict, **kwargs) -> FieldList: mir_options = request.pop("interpolate", None) cache = request.pop("cache", None) cache_path = None if cache is None else cache.format_map(request) - ds: FieldList = from_source("mars", request) # type: ignore[ty:invalid-assignment] + ds: FieldList = from_source("mars", request, **kwargs) # type: ignore[ty:invalid-assignment] if mir_options is None: return ds @@ -102,12 +107,11 @@ def _transform_request(request: dict, step_type: type = str): return request -def file_retrieve(path: str, request: dict) -> FieldList: +def file_retrieve(name: str, request: dict, **kwargs) -> FieldList: mir_options = request.pop("interpolate", None) if mir_options is not None: raise NotImplementedError() - location = path.format_map(request) - file_ds: FieldList = from_source("file", location) # type: ignore[ty:invalid-assignment] + file_ds: FieldList = from_source(name, **kwargs) # type: ignore[ty:invalid-assignment] if len(request) > 0: treq = _transform_request(request) ds = file_ds.sel(treq) @@ -121,49 +125,53 @@ def file_retrieve(path: str, request: dict) -> FieldList: return file_ds -def retrieve_multi_sources(requests: list[dict], **kwargs) -> FieldList: - ret = None - for req in requests: - try: - ret = retrieve_single_source(req, **kwargs) - break - except AssertionError: - continue - assert ret is not None, f"No data retrieved from requests: {requests}" - return ret - - -def retrieve_single_source(request: dict, **kwargs) -> FieldList: - req = request.copy() - source = req.pop("source") - if source == "fdb": - ret_sources = fdb_retrieve(req, **kwargs) - elif source == "mars": - ret_sources = mars_retrieve(req) - elif source == "fileset": - path = req.pop("location") - ret_sources = file_retrieve(path, req).order_by("paramId") - else: - raise NotImplementedError(f"Source {source} not supported.") - assert len(ret_sources) > 0, f"No data retrieved from {source} for request {req}" - return ret_sources - - -def retrieve(request: dict | list[dict], **kwargs): - with ResourceMeter(f"retrieve {request}, {kwargs}"): - if isinstance(request, dict): - res = retrieve_single_source(request, **kwargs) - else: - res = retrieve_multi_sources(request, **kwargs) - ret = FieldList.from_array( - res.values, - [StandAloneGribMetadata(metadata._handle) for metadata in res.metadata()], +def retrieve( + sources: list[dict], + requests: list[dict], + dtype: Optional[str] = None, +) -> FieldList: + ds = from_source("empty") + for request in requests: + with ResourceMeter(f"Retrieve {request}"): + for source in sources: + if isinstance(source, str): + source = {"name": source} + name = source.pop("name") + try: + logger.debug(f"Trying source {name}") + if name == "fdb": + ds = fdb_retrieve(request=request, **source) + elif name == "mars": + ds = mars_retrieve(request=request, **source) + elif name in ["file", "file-pattern"]: + ds = file_retrieve(name, request=request, **source).order_by( + "paramId" + ) + else: + raise NotImplementedError(f"Source {source} not supported.") + assert ( + len(ds) > 0 + ), f"No data retrieved from {source} for request {request}" + break + except AssertionError: + logger.info( + f"No data retrieved from source {source} for request {request}" + ) + continue + if len(ds) == 0: + raise ValueError( + f"No data retrieved from sources {sources} for request {request}" + ) + ds += FieldList.from_array( + ds.to_array(flatten=True, dtype=dtype), + [StandAloneGribMetadata(metadata._handle) for metadata in ds.metadata()], ) - return ret + return ds + +def write(data: FieldList, name: str, **kwargs): + if name == "null": + return -def write(data: FieldList, target: dict) -> dict: - if target["name"] == "null": - return target - data.to_target(**target) - return target + with ResourceMeter(f"Write {data.ls()} to {name}"): + data.to_target(target=name, **kwargs) diff --git a/pproc-runtime/src/ppruntime/metadata.py b/pproc-runtime/src/ppruntime/metadata.py index 35d75772..3ff2c016 100644 --- a/pproc-runtime/src/ppruntime/metadata.py +++ b/pproc-runtime/src/ppruntime/metadata.py @@ -7,7 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Any, Optional +from typing import Optional from earthkit.data import FieldList @@ -17,26 +17,6 @@ def resolve_metadata(metadata: Optional[dict]) -> dict: return metadata if metadata is not None else {} -def window(operation: str, coords: list[Any], include_init: bool) -> dict: - if len(coords) == 1: - return {} - - ret = {} - if operation == "diff": - ret.update({"timeRangeIndicator": 5, "stepType": "diff"}) - if operation == "mean": - ret["timeRangeIndicator"] = 3 - ret["numberIncludedInAverage"] = ( - len(coords) if include_init else len(coords) - 1 - ) - ret["numberMissingFromAveragesOrAccumulations"] = 0 - if operation in ["min", "max"]: - ret["timeRangeIndicator"] = 2 - ret.setdefault("stepType", "max") - ret["stepRange"] = f"{coords[0]}-{coords[-1]}" - return ret - - def extreme(clim: FieldList, ens: FieldList, metadata: dict) -> dict: edition = metadata.get("edition", ens[0].metadata().get("edition", 1)) clim_edition = clim[0].metadata().get("edition", 1) diff --git a/pproc-runtime/tests/conftest.py b/pproc-runtime/tests/conftest.py new file mode 100644 index 00000000..2170cef9 --- /dev/null +++ b/pproc-runtime/tests/conftest.py @@ -0,0 +1,48 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import os +import requests +from typing import List + +TEST_DIR = os.path.dirname(os.path.realpath(__file__)) +DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "data") +NEXUS = "https://sites.ecmwf.int/repository/pproc/test-data/pproc-runtime" +SCHEMA = os.path.join(TEST_DIR, "schema.yaml") + + +def download_test_data( + test_files: List[str], dir_url: str = NEXUS, local_dir: str = DATA_DIR +) -> List[str]: + local_files = [] + for file in test_files: + if not os.path.exists(local_dir): + os.makedirs(local_dir) + nexus_url = f"{dir_url}/{file}" + local_file_path = os.path.join(local_dir, file) + + if not os.path.exists(local_file_path): + session = requests.Session() + response = session.get(nexus_url) + if response.status_code != 200: + raise Exception( + f"Error {response.status_code} downloading data file {file}" + ) + with open(local_file_path, "wb") as f: + f.write(response.content) + local_files.append(local_file_path) + return local_files + +download_test_data( + [ + "test_2t_12.grib", + ], + f"{NEXUS}", + f"{DATA_DIR}", +) \ No newline at end of file diff --git a/pproc-runtime/tests/test_io.py b/pproc-runtime/tests/test_io.py index 97c22d99..0c1fa1e9 100644 --- a/pproc-runtime/tests/test_io.py +++ b/pproc-runtime/tests/test_io.py @@ -14,6 +14,9 @@ from ppruntime.io import retrieve +TEST_DIR = os.path.dirname(os.path.realpath(__file__)) +DATA_DIR = os.path.join(TEST_DIR, "data") + request = { "class": "od", "expver": "0001", @@ -29,8 +32,28 @@ @pytest.mark.parametrize( - "source", - ["mars", "fdb"], + "overrides", + [ + {}, + {"interpolate": {"grid": "O640"}}, + { + "param": [138, 155], + "levtype": "pl", + "levelist": [250, 850], + "interpolate": {"grid": "O640", "vod2uv": "1"}, + }, + ], + ids=["default", "interpolate", "wind"], +) +def test_mars_retrieve(overrides): + test_request = request.copy() + test_request.update(overrides) + retrieve(["mars"], [test_request]) + + +@pytest.mark.parametrize( + "stream", + [True, False], ) @pytest.mark.parametrize( "overrides", @@ -46,9 +69,54 @@ ], ids=["default", "interpolate", "wind"], ) -def test_retrieve(source, overrides): +def test_fdb_retrieve(stream, overrides): os.environ["FDB_HOME"] = "/home/fdbprod" test_request = request.copy() - test_request["source"] = source test_request.update(overrides) - retrieve(test_request) + retrieve([{"name": "fdb", "stream": stream}], [test_request]) + + +@pytest.mark.parametrize( + "source", + [ + {"name": "file", "path": os.path.join(DATA_DIR, "test_2t_12.grib")}, + { + "name": "file-pattern", + "pattern": os.path.join(DATA_DIR, "test_{param}_{step}.grib"), + "hive_partitioning": True, + }, + ], + ids=["file", "file-pattern"], +) +def test_file_retrieve(source): + request = { + "stream": "enfo", + "type": "cf", + "date": "20240507", + "time": "12", + "param": "2t", + "expver": "0001", + "levtype": "sfc", + } + retrieve([source], [request]) + + +def test_multi_source_retrieve(): + request = { + "stream": "enfo", + "type": "cf", + "date": "20240507", + "time": "12", + "param": "2t", + "expver": "0001", + "levtype": "sfc", + } + sources = [ + {"name": "fdb", "stream": True}, + { + "name": "file", + "path": os.path.join(DATA_DIR, "test_2t_12.grib"), + }, + ] + os.environ["FDB_HOME"] = "/home/fdbprod" + retrieve(sources, [request]) diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index 68a8b4e9..9f515c51 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -56,6 +56,8 @@ scripts.pproc-histogram = "pproc.histogram:main" scripts.pproc-interpol = "pproc.interpol:main" scripts.pproc-monthly-stats = "pproc.monthly_stats:main" scripts.pproc-probabilities = "pproc.probabilities:main" +scripts.pproc-product = "ppcore.product:main" + scripts.pproc-pts = "pproc.pts:main" scripts.pproc-quantiles = "pproc.quantiles:main" scripts.pproc-significance = "pproc.significance:main" @@ -91,6 +93,9 @@ scm.git.describe_command = [ 'git', 'describe', '--dirty', '--tags', '--long', ' minversion = "6.0" testpaths = [ "tests" ] +[tool.uv] +package = true + [tool.uv.sources] pproc-core = { workspace = true } pproc-runtime = { workspace = true } diff --git a/pproc/src/pproc/common/accumulation.py b/pproc/src/pproc/common/accumulation.py index 07004acf..e2f5990a 100644 --- a/pproc/src/pproc/common/accumulation.py +++ b/pproc/src/pproc/common/accumulation.py @@ -19,7 +19,7 @@ from earthkit.time.calendar import MonthInYear from earthkit.time.sequence import MonthlySequence -from ppcore.utils.helpers import fill_template_values +from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values NumericCoord = int diff --git a/pproc/src/pproc/common/mars.py b/pproc/src/pproc/common/mars.py index b2612ee4..97b6bf72 100644 --- a/pproc/src/pproc/common/mars.py +++ b/pproc/src/pproc/common/mars.py @@ -10,9 +10,7 @@ from contextlib import ExitStack import copy -from datetime import date, datetime import errno -from math import ceil import os import select import shlex @@ -20,6 +18,8 @@ from tempfile import NamedTemporaryFile, mktemp from typing import List, Union +from ppcore.utils.mars import to_mars + def _mkftemp(dir=None, mode=0o600, num_attempts=1000): for _ in range(num_attempts): @@ -147,42 +147,6 @@ def close(self): self.__exit__(None, None, None) -def _val_to_mars(val): - if isinstance(val, bytes): - return val - elif isinstance(val, (list, tuple)): - return b"/".join(_val_to_mars(v) for v in val) - elif isinstance(val, str): - pass - elif isinstance(val, int): - val = str(val) - elif isinstance(val, (datetime, date)): - val = val.strftime("%Y%m%d") - elif isinstance(val, range): - first = val.start - last = val.start + (ceil((val.stop - val.start) / val.step) - 1) * val.step - step = val.step - val = f"{first}/to/{last}" - if step != 1: - val += f"/by/{step}" - elif isinstance(val, float) and val.is_integer(): - val = str(int(val)) - else: - raise TypeError(f"Cannot convert {type(val)} to MARS request") - return val.encode("utf-8") - - -def to_mars(verb: bytes, req: dict) -> bytes: - def _gen_req(): - yield verb - for key, val in req.items(): - key = key.encode("utf-8") - val = _val_to_mars(val) - yield key + b"=" + val - - return b",".join(_gen_req()) - - def mars_retrieve( req: dict, mars_cmd: Union[str, List[str]] = "mars", tmpdir=None ) -> MARSReader: diff --git a/pproc/src/pproc/config/accumulation.py b/pproc/src/pproc/config/accumulation.py index d7610706..edefbc46 100644 --- a/pproc/src/pproc/config/accumulation.py +++ b/pproc/src/pproc/config/accumulation.py @@ -15,7 +15,7 @@ from earthkit.time.calendar import parse_date from earthkit.time.sequence import Sequence -from ppcore.utils.requests import extract_mars +from ppcore.utils.mars import extract_mars from ppcore.utils.stepseq import stepseq_ranges, stepseq_monthly from pproc.common.accumulation import convert_coords, coords_name diff --git a/pproc/src/pproc/config/base.py b/pproc/src/pproc/config/base.py index ee37d181..3410887a 100644 --- a/pproc/src/pproc/config/base.py +++ b/pproc/src/pproc/config/base.py @@ -20,10 +20,11 @@ from typing_extensions import Self from ppcore.utils.dicts import deep_update from ppcore.utils.helpers import to_list -from ppcore.utils.requests import extract_mars, update_request +from ppcore.utils.requests import update_request +from ppcore.utils.mars import extract_mars +from ppcore.configs.entrypoint.log import LoggingConfig from pproc.config import io -from pproc.config.log import LoggingConfig from pproc.config.param import ParamConfig, partial_equality from pproc.config.utils import ( _get, diff --git a/pproc/src/pproc/config/io.py b/pproc/src/pproc/config/io.py index 7a9bbfe2..d1e2434b 100644 --- a/pproc/src/pproc/config/io.py +++ b/pproc/src/pproc/config/io.py @@ -24,6 +24,7 @@ field_validator, ) from ppcore.utils.dicts import deep_update +from ppcore.utils.entrypoint import validate_overrides from pproc.config import utils from pproc.config.targets import ( @@ -120,7 +121,7 @@ class InputsCollection(ConfigModel): names: ClassVar[list[str]] overrides: Annotated[ dict, - BeforeValidator(utils.validate_overrides), + BeforeValidator(validate_overrides), CLIArg( "--override-input", action="append", @@ -185,7 +186,7 @@ class OutputsCollection(ConfigModel): default: Output = Output() overrides: Annotated[ dict, - BeforeValidator(utils.validate_overrides), + BeforeValidator(validate_overrides), CLIArg( "--override-output", action="append", diff --git a/pproc/src/pproc/config/param.py b/pproc/src/pproc/config/param.py index c24c0653..5c170e9a 100644 --- a/pproc/src/pproc/config/param.py +++ b/pproc/src/pproc/config/param.py @@ -17,7 +17,8 @@ import pandas as pd from pydantic import BaseModel, Field, model_validator from ppcore.utils.dicts import deep_update -from ppcore.utils.requests import expand, extract_mars, update_request +from ppcore.utils.requests import expand, update_request +from ppcore.utils.mars import extract_mars from pproc.config.preprocessing import PreprocessingConfig from pproc.config.accumulation import AccumulationConfig diff --git a/pproc/src/pproc/config/targets.py b/pproc/src/pproc/config/targets.py index fb8d1745..74bac8c8 100644 --- a/pproc/src/pproc/config/targets.py +++ b/pproc/src/pproc/config/targets.py @@ -19,7 +19,7 @@ from filelock import FileLock from pydantic import BaseModel, BeforeValidator, ConfigDict, Field, model_validator -from pproc.config import utils +from ppcore.utils.entrypoint import validate_overrides _manager = None @@ -168,7 +168,7 @@ class OverrideTargetWrapper(ConfigModel, Target): ] overrides: Annotated[ dict, - BeforeValidator(utils.validate_overrides), + BeforeValidator(validate_overrides), ] @model_validator(mode="before") diff --git a/pproc/src/pproc/config/types.py b/pproc/src/pproc/config/types.py index 2694cbf9..6ffbac1b 100644 --- a/pproc/src/pproc/config/types.py +++ b/pproc/src/pproc/config/types.py @@ -27,7 +27,8 @@ from conflator import CLIArg, ConfigModel from earthkit.time import DailySequence from ppcore.utils.dicts import deep_update -from ppcore.utils.requests import expand, extract_mars, update_request, squeeze +from ppcore.utils.requests import expand, update_request, squeeze +from ppcore.utils.mars import extract_mars from pproc.clustereps.season import MONTH_DAYS, Season from pproc.config.base import BaseConfig, Parallelisation diff --git a/pproc/src/pproc/config/utils.py b/pproc/src/pproc/config/utils.py index b5e9e7ed..99278335 100644 --- a/pproc/src/pproc/config/utils.py +++ b/pproc/src/pproc/config/utils.py @@ -10,20 +10,6 @@ from typing import Any -def parse_vars(items): - """ - Parse a series of key-value pairs and return a dictionary - """ - return dict(map(lambda s: s.split("="), items)) - - -def parse_var_strs(items): - """ - Parse a list of comma-separated lists of key-value pairs and return a dictionary - """ - return parse_vars(sum((s.split(",") for s in items if s), start=[])) - - def _get(obj, attr, default=None): if isinstance(obj, dict): return obj.get(attr, default) @@ -45,9 +31,3 @@ def model_update(original: dict, update: Any) -> dict: else: _set(original, key, value) return original - - -def validate_overrides(data: Any) -> Any: - if isinstance(data, list): - return parse_var_strs(data) - return data diff --git a/pproc/src/pproc/ensms.py b/pproc/src/pproc/ensms.py index 119f2d51..acdd83e5 100755 --- a/pproc/src/pproc/ensms.py +++ b/pproc/src/pproc/ensms.py @@ -25,7 +25,7 @@ import numpy as np from conflator import Conflator from meters import ResourceMeter -from ppcore.utils.helpers import fill_template_values +from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values from pproc.common.io import write_grib from pproc.common.accumulation import Accumulator diff --git a/pproc/src/pproc/quantiles.py b/pproc/src/pproc/quantiles.py index 8056fd04..3b4af8ab 100644 --- a/pproc/src/pproc/quantiles.py +++ b/pproc/src/pproc/quantiles.py @@ -18,7 +18,7 @@ from earthkit.meteo.stats import iter_quantiles from meters import ResourceMeter from conflator import Conflator -from ppcore.utils.helpers import fill_template_values +from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values from pproc.common.accumulation import Accumulator from pproc.common.accumulation_manager import AccumulationManager diff --git a/pproc/tests/config/test_factory.py b/pproc/tests/config/test_factory.py index 1c793153..5604f141 100644 --- a/pproc/tests/config/test_factory.py +++ b/pproc/tests/config/test_factory.py @@ -10,7 +10,7 @@ import pytest from ppcore.utils.dicts import deep_update -from ppcore.utils.requests import extract_mars +from ppcore.utils.mars import extract_mars from ppcore.schema.schema import Schema from pproc.config import types diff --git a/pproc/tests/config/types/test_flightlevels.py b/pproc/tests/config/types/test_flightlevels.py index f15e5741..3d8fe114 100644 --- a/pproc/tests/config/types/test_flightlevels.py +++ b/pproc/tests/config/types/test_flightlevels.py @@ -47,14 +47,14 @@ { "stream": "oper", "type": "fc", - "param": 260290, + "param": "260290", "levtype": "ml", "levelist": list(range(1, 138)), }, { "stream": "enfo", "type": "pf", - "param": 260290, + "param": "260290", "levtype": "ml", "levelist": list(range(1, 138)), "number": [1, 2, 3], @@ -66,14 +66,14 @@ { "stream": "oper", "type": "fc", - "param": 152, + "param": "152", "levtype": "ml", "levelist": 1, }, { "stream": "enfo", "type": "pf", - "param": 152, + "param": "152", "levtype": "ml", "levelist": 1, "number": [1, 2, 3], @@ -92,7 +92,7 @@ "parameters": { "cat": { "inputs": { - "fc": {"request": {"param": 130}}, + "fc": {"request": {"param": "130"}}, } } } @@ -107,14 +107,14 @@ { "stream": "oper", "type": "fc", - "param": 260290, + "param": "260290", "levtype": "ml", "levelist": list(range(1, 138)), }, { "stream": "oper", "type": "fc", - "param": 130, + "param": "130", "levtype": "ml", "levelist": list(range(1, 138)), }, @@ -125,7 +125,7 @@ { "stream": "oper", "type": "fc", - "param": 152, + "param": "152", "levtype": "ml", "levelist": 1, }, @@ -164,7 +164,7 @@ def test_merge(configs, merged_or_error): "request": { "stream": "oper", "type": "fc", - "param": 260290, + "param": "260290", "levtype": "ml", "levelist": list(range(1, 138)), }, @@ -173,7 +173,7 @@ def test_merge(configs, merged_or_error): "request": { "stream": "oper", "type": "fc", - "param": 152, + "param": "152", "levtype": "ml", "levelist": 1, }, @@ -213,7 +213,7 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": [260290], + "param": ["260290"], "levtype": "ml", "levelist": list(range(1, 138)), }, @@ -222,7 +222,7 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": [260290], + "param": ["260290"], "levtype": "fl", "levelist": [110, 200, 300, 340, 380], "target": "fdb", @@ -234,14 +234,14 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": [260290], + "param": ["260290"], "levtype": "ml", "levelist": list(range(1, 138)), }, { "stream": "enfo", "type": "pf", - "param": [260290], + "param": ["260290"], "levtype": "ml", "levelist": list(range(1, 138)), "number": [1, 2, 3], @@ -251,7 +251,7 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": [260290], + "param": ["260290"], "levtype": "fl", "levelist": [110, 200, 300, 340, 380], "target": "fdb", @@ -259,7 +259,7 @@ def test_merge(configs, merged_or_error): { "stream": "enfo", "type": "pf", - "param": [260290], + "param": ["260290"], "levtype": "fl", "levelist": [110, 200, 300, 340, 380], "number": [1, 2, 3], @@ -272,14 +272,14 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": [130, 260290], + "param": ["130", "260290"], "levtype": "ml", "levelist": list(range(1, 138)), }, { "stream": "enfo", "type": "pf", - "param": [130, 260290], + "param": ["130", "260290"], "levtype": "ml", "levelist": list(range(1, 138)), "number": [1, 2, 3], @@ -289,7 +289,7 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": [130, 260290], + "param": ["130", "260290"], "levtype": "fl", "levelist": [110, 200, 300, 340, 380], "target": "fdb", @@ -297,7 +297,7 @@ def test_merge(configs, merged_or_error): { "stream": "enfo", "type": "pf", - "param": [130, 260290], + "param": ["130", "260290"], "levtype": "fl", "levelist": [110, 200, 300, 340, 380], "number": [1, 2, 3], @@ -316,7 +316,9 @@ def test_outputs(inputs, expected): "inputs": { "fc": {"request": inputs}, "lnsp": { - "request": [{**x, "param": 152, "levelist": 1} for x in inputs] + "request": [ + {**x, "param": "152", "levelist": 1} for x in inputs + ] }, }, "num_inputs": 1, @@ -334,7 +336,7 @@ def test_outputs(inputs, expected): for param in inputs[0]["param"] ], [], - ) + [{**x, "param": 152, "levelist": 1, "source": "fdb"} for x in inputs] == list( + ) + [{**x, "param": "152", "levelist": 1, "source": "fdb"} for x in inputs] == list( config.in_mars(sources=["fdb"]) ) outputs = list(config.out_mars(targets=["fdb"])) @@ -348,14 +350,14 @@ def test_from_schema(): { "stream": "oper", "type": "fc", - "param": 260290, + "param": "260290", "levtype": "ml", "levelist": list(range(1, 138)), }, { "stream": "oper", "type": "fc", - "param": 152, + "param": "152", "levtype": "ml", "levelist": 1, }, @@ -372,7 +374,7 @@ def test_from_schema(): "request": { "stream": "oper", "type": "fc", - "param": 260290, + "param": "260290", "levtype": "ml", "levelist": list(range(1, 138)), }, @@ -381,7 +383,7 @@ def test_from_schema(): "request": { "stream": "oper", "type": "fc", - "param": 152, + "param": "152", "levtype": "ml", "levelist": 1, }, diff --git a/pproc/tests/templates/clustereps.yaml b/pproc/tests/templates/v2/clustereps.yaml similarity index 100% rename from pproc/tests/templates/clustereps.yaml rename to pproc/tests/templates/v2/clustereps.yaml diff --git a/pproc/tests/templates/ensms.yaml b/pproc/tests/templates/v2/ensms.yaml similarity index 100% rename from pproc/tests/templates/ensms.yaml rename to pproc/tests/templates/v2/ensms.yaml diff --git a/pproc/tests/templates/extreme.yaml b/pproc/tests/templates/v2/extreme.yaml similarity index 100% rename from pproc/tests/templates/extreme.yaml rename to pproc/tests/templates/v2/extreme.yaml diff --git a/pproc/tests/templates/prob.yaml b/pproc/tests/templates/v2/prob.yaml similarity index 100% rename from pproc/tests/templates/prob.yaml rename to pproc/tests/templates/v2/prob.yaml diff --git a/pproc/tests/templates/quantiles.yaml b/pproc/tests/templates/v2/quantiles.yaml similarity index 100% rename from pproc/tests/templates/quantiles.yaml rename to pproc/tests/templates/v2/quantiles.yaml diff --git a/pproc/tests/templates/t850.yaml b/pproc/tests/templates/v2/t850.yaml similarity index 100% rename from pproc/tests/templates/t850.yaml rename to pproc/tests/templates/v2/t850.yaml diff --git a/pproc/tests/templates/thermo.yaml b/pproc/tests/templates/v2/thermo.yaml similarity index 100% rename from pproc/tests/templates/thermo.yaml rename to pproc/tests/templates/v2/thermo.yaml diff --git a/pproc/tests/templates/wind.yaml b/pproc/tests/templates/v2/wind.yaml similarity index 100% rename from pproc/tests/templates/wind.yaml rename to pproc/tests/templates/v2/wind.yaml diff --git a/pproc/tests/templates/v3/ensms.yaml b/pproc/tests/templates/v3/ensms.yaml new file mode 100644 index 00000000..3d8893ba --- /dev/null +++ b/pproc/tests/templates/v3/ensms.yaml @@ -0,0 +1,223 @@ +log: + level: INFO + format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' +execution: + hosts: 1 + workers: 1 +products: +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: 20240507 + legBaseTime: 1200 + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: '{num_fields}:int' + stream: enfo + type: em + operation: mean + output: + targets: + - name: fdb + request: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: cf + param: 167 + step: 12 + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pf + param: 167 + step: 12 + number: + - 1 + - 2 + - 3 + - 4 + - 5 + dtype: float64 +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: 20240507 + legBaseTime: 1200 + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: '{num_fields}:int' + stream: enfo + type: es + operation: std + output: + targets: + - name: fdb + request: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: cf + param: 167 + step: 12 + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pf + param: 167 + step: 12 + number: + - 1 + - 2 + - 3 + - 4 + - 5 + dtype: float64 +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: 20240507 + legBaseTime: 1200 + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: '{num_fields}:int' + stream: enfo + type: em + operation: mean + output: + targets: + - name: fdb + request: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: cf + param: 167 + step: 36 + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pf + param: 167 + step: 36 + number: + - 1 + - 2 + - 3 + - 4 + - 5 + dtype: float64 +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: 20240507 + legBaseTime: 1200 + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: '{num_fields}:int' + stream: enfo + type: es + operation: std + output: + targets: + - name: fdb + request: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: cf + param: 167 + step: 36 + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pf + param: 167 + step: 36 + number: + - 1 + - 2 + - 3 + - 4 + - 5 + dtype: float64 diff --git a/pproc/tests/test_products.py b/pproc/tests/test_products.py index 247bed03..5a129335 100644 --- a/pproc/tests/test_products.py +++ b/pproc/tests/test_products.py @@ -19,6 +19,7 @@ from pproc.quantiles import main as quantiles_main from pproc.thermal_indices import main as thermo_main from pproc.clustereps.__main__ import main as clustereps_main +from ppcore.product import main as ppcore_main from conftest import DATA_DIR TEST_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -154,9 +155,9 @@ "clustereps", ], ) -def test_products(tmpdir, monkeypatch, fdb, product, main, custom_args, req, length): +def test_products_v2(tmpdir, monkeypatch, fdb, product, main, custom_args, req, length): monkeypatch.chdir(tmpdir) # To avoid polluting cwd with grib templates - args = [product, "--config", f"{TEST_DIR}/templates/{product}.yaml"] + [ + args = [product, "--config", f"{TEST_DIR}/templates/v2/{product}.yaml"] + [ x.format_map( { "test_dir": str(tmpdir), @@ -181,3 +182,36 @@ def test_products(tmpdir, monkeypatch, fdb, product, main, custom_args, req, len request.update(req) messages = list(eccodes.StreamReader(test_fdb.retrieve(request))) assert len(messages) == length + + +@pytest.mark.parametrize( + "product, req, length", + [ + [ + "ensms", + {"type": "em", "param": 167, "step": [12, 36]}, + 2, + ], + ], + ids=[ + "ensms", + ], +) +def test_products_v3(tmpdir, monkeypatch, fdb, product, req, length): + monkeypatch.chdir(tmpdir) # To avoid polluting cwd with grib templates + args = [product, "--config", f"{TEST_DIR}/templates/v3/{product}.yaml"] + monkeypatch.setattr("sys.argv", args) + ppcore_main() + test_fdb = pyfdb.FDB() + request = { + "class": "od", + "expver": "0001", + "stream": "enfo", + "date": 20240507, + "time": 12, + "levtype": "sfc", + "domain": "g", + } + request.update(req) + messages = list(eccodes.StreamReader(test_fdb.retrieve(request))) + assert len(messages) == length diff --git a/pproc/uv.lock b/pproc/uv.lock index 6b71cbd1..634503dd 100644 --- a/pproc/uv.lock +++ b/pproc/uv.lock @@ -2181,6 +2181,7 @@ name = "pproc-core" source = { editable = "../pproc-core" } dependencies = [ { name = "code-meters" }, + { name = "conflator" }, { name = "earthkit-time" }, { name = "earthkit-workflows", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "earthkit-workflows", version = "0.14.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, @@ -2201,6 +2202,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "code-meters" }, + { name = "conflator", specifier = ">=0.1.8" }, { name = "earthkit-time" }, { name = "earthkit-workflows" }, { name = "numpy" }, From 27cf0c7075dc57d64e49a0f6b707d915b7f5e7cb Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 22 Jun 2026 12:43:13 +0000 Subject: [PATCH 12/95] Expand requests --- pproc-core/src/ppcore/configs/__init__.py | 5 +- pproc-core/src/ppcore/products/__init__.py | 18 +++-- .../ppcore/products/templates/ensms.yaml | 78 +------------------ .../tests/ppcore/products/test_products.py | 4 +- 4 files changed, 22 insertions(+), 83 deletions(-) diff --git a/pproc-core/src/ppcore/configs/__init__.py b/pproc-core/src/ppcore/configs/__init__.py index c2bc7c4b..61669e2d 100644 --- a/pproc-core/src/ppcore/configs/__init__.py +++ b/pproc-core/src/ppcore/configs/__init__.py @@ -2,6 +2,7 @@ from ppcore.schema.schema import Schema from ppcore.configs.product import from_schema, ProductConfig +from ppcore.utils.requests import expand def config_from_output( @@ -27,7 +28,9 @@ def from_outputs( Returns product configuration from output request and PProc schema """ schema = Schema.from_file(pproc_schema) - for request in requests: + for request in expand( + requests, exclude=["levelist", "number", "quantile", "hdate"] + ): schema_config = schema.config_from_output(request, inputs=inputs) yield from_schema(schema_config, request, metadata, **overrides) diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index 215b6acf..60535f69 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -2,6 +2,7 @@ from earthkit.workflows.graph import Graph, deduplicate_nodes +from ppcore.utils.requests import expand from ppcore.configs import from_outputs as config_from_outputs from ppcore.configs.product import ProductConfig from ppcore.products.base import Product @@ -23,8 +24,8 @@ def product_from_config( ) -def product_from_output( - request: dict, +def product_from_outputs( + requests: list[dict], pproc_schema: str, metadata: Optional[dict] = None, ) -> Product: @@ -32,7 +33,10 @@ def product_from_output( Returns fluent.Action for computing the product specified by the output request and PProc schema """ - config = list(config_from_outputs([request], pproc_schema, metadata=metadata))[0] + requests = list( + expand(requests, exclude=["levelist", "number", "quantile", "hdate"]) + ) + config = list(config_from_outputs(requests, pproc_schema, metadata=metadata))[0] return product_from_config(config) @@ -45,9 +49,11 @@ def graph_from_outputs( Returns fluent.Action for computing the product specified by the output request and PProc schema """ - graph = Graph([]) - for request in requests: - graph += product_from_output(request, pproc_schema, metadata).action().graph() + graph = ( + product_from_outputs(requests, pproc_schema=pproc_schema, metadata=metadata) + .action() + .graph() + ) return deduplicate_nodes(graph) diff --git a/pproc-core/tests/ppcore/products/templates/ensms.yaml b/pproc-core/tests/ppcore/products/templates/ensms.yaml index 07d8e448..8f530dbe 100644 --- a/pproc-core/tests/ppcore/products/templates/ensms.yaml +++ b/pproc-core/tests/ppcore/products/templates/ensms.yaml @@ -8,55 +8,7 @@ date: "20230914" time: 12 expver: "0001" - step: 0 - sources: "fdb:" -- class: od - stream: enfo - type: em - levtype: pl - levelist: [250, 500, 850] - domain: g - param: "130" - date: "20230914" - time: 12 - expver: "0001" - step: 3 - sources: "fdb:" -- class: od - stream: enfo - type: em - levtype: pl - levelist: [250, 500, 850] - domain: g - param: "130" - date: "20230914" - time: 12 - expver: "0001" - step: 6 - sources: "fdb:" -- class: od - stream: enfo - type: es - levtype: pl - levelist: [250, 500, 850] - domain: g - param: "130" - date: "20230914" - time: 12 - expver: "0001" - step: 0 - sources: "fdb:" -- class: od - stream: enfo - type: es - levtype: pl - levelist: [250, 500, 850] - domain: g - param: "130" - date: "20230914" - time: 12 - expver: "0001" - step: 3 + step: [0, 3, 6] sources: "fdb:" - class: od stream: enfo @@ -68,18 +20,7 @@ date: "20230914" time: 12 expver: "0001" - step: 6 - sources: "fdb:" -- class: od - stream: enfo - type: em - levtype: sfc - domain: g - param: "200228" - date: "20230914" - time: 12 - expver: "0001" - step: 0-6 + step: [0, 3, 6] sources: "fdb:" - class: od stream: enfo @@ -90,18 +31,7 @@ date: "20230914" time: 12 expver: "0001" - step: 6-12 - sources: "fdb:" -- class: od - stream: enfo - type: es - levtype: sfc - domain: g - param: "200228" - date: "20230914" - time: 12 - expver: "0001" - step: 0-6 + step: [0-6, 6-12] sources: "fdb:" - class: od stream: enfo @@ -112,5 +42,5 @@ date: "20230914" time: 12 expver: "0001" - step: 6-12 + step: [0-6, 6-12] sources: "fdb:" diff --git a/pproc-core/tests/ppcore/products/test_products.py b/pproc-core/tests/ppcore/products/test_products.py index e5c8ab65..8df36a55 100644 --- a/pproc-core/tests/ppcore/products/test_products.py +++ b/pproc-core/tests/ppcore/products/test_products.py @@ -16,7 +16,7 @@ from earthkit.workflows.plugins.pproc.fluent import from_source from earthkit.workflows.plugins.pproc.utils.request import Request -from ppcore.products import product_from_output, graph_from_outputs +from ppcore.products import product_from_outputs, graph_from_outputs from conftest import SCHEMA @@ -49,7 +49,7 @@ def test_custom_source(requests): graph = Graph([]) for req in output_requests: - product = product_from_output(req, SCHEMA, metadata={"edition": 2}) + product = product_from_outputs([req], SCHEMA, metadata={"edition": 2}) requests = [] for request in product.config.inputs.fc.requests: req = Request(request) From 9fd9c90de20c418867a7a6953d245315f9d03689 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 22 Jun 2026 13:02:38 +0000 Subject: [PATCH 13/95] Set overrides correctly --- pproc-core/src/ppcore/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py index 55a5a971..c82c25af 100644 --- a/pproc-core/src/ppcore/config.py +++ b/pproc-core/src/ppcore/config.py @@ -38,7 +38,7 @@ def from_outputs(args): output_requests = yaml.safe_load(f) entrypoint_config = EntrypointConfig( - products=config_from_outputs(output_requests, args.schema, **overrides) + products=config_from_outputs(output_requests, args.schema), **overrides ) with open(args.config, "w") as f: yaml.dump( From 8e921aa838b34c4686140816b964dba8d90a08f2 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 22 Jun 2026 13:15:16 +0000 Subject: [PATCH 14/95] Fix logging --- pproc-core/src/ppcore/config.py | 2 +- pproc-core/src/ppcore/configs/product/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py index c82c25af..ac32319b 100644 --- a/pproc-core/src/ppcore/config.py +++ b/pproc-core/src/ppcore/config.py @@ -38,7 +38,7 @@ def from_outputs(args): output_requests = yaml.safe_load(f) entrypoint_config = EntrypointConfig( - products=config_from_outputs(output_requests, args.schema), **overrides + products=list(config_from_outputs(output_requests, args.schema)), **overrides ) with open(args.config, "w") as f: yaml.dump( diff --git a/pproc-core/src/ppcore/configs/product/__init__.py b/pproc-core/src/ppcore/configs/product/__init__.py index 1bb24c6f..4806d179 100644 --- a/pproc-core/src/ppcore/configs/product/__init__.py +++ b/pproc-core/src/ppcore/configs/product/__init__.py @@ -57,6 +57,6 @@ def from_schema( accum["coords"] = inputs[0][dim] config["accumulations"] = accums - logger.info("Schema config", config) + logger.info(f"Schema config: {config}") base = ProductConfig(**config) return ProductConfig(**{**base.model_dump(), **overrides}) From 9e28ae5cddea0764e66e36fb6af96be288515ef2 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 22 Jun 2026 13:52:49 +0000 Subject: [PATCH 15/95] Extract datacubes from input/output requests --- pproc-core/src/ppcore/config.py | 4 ++++ pproc-core/src/ppcore/products/ensemble.py | 3 +++ pproc-core/src/ppcore/utils/requests.py | 13 +++++++++++++ 3 files changed, 20 insertions(+) diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py index ac32319b..54c12598 100644 --- a/pproc-core/src/ppcore/config.py +++ b/pproc-core/src/ppcore/config.py @@ -21,6 +21,7 @@ from ppcore.configs.entrypoint.base import EntrypointConfig from ppcore.products import product_from_config from ppcore.utils import mars +from ppcore.utils.requests import datacubes logging.basicConfig( format="%(asctime)s; %(name)s; %(levelname)s - %(message)s", @@ -94,6 +95,9 @@ def requests(args): inputs.extend(product.in_mars(args.source)) outputs.extend(product.out_mars(args.target)) + inputs = datacubes(inputs) + outputs = datacubes(outputs) + # TODO: Add method to simplify requests if args.inputs: _, extension = os.path.splitext(args.inputs) diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index 53d52c62..0f67e3ab 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -19,6 +19,7 @@ squeeze, validate_request, ) +from ppcore.utils.mars import extract_mars from ppcore.configs.product.ensemble import Config from ppcore.products.base import Product @@ -95,6 +96,7 @@ def in_mars(self, sources: Optional[list[str]] = None) -> Iterator[dict]: source = inputs.sources[0] for input in inputs.requests: overridden = input.copy() + overridden = extract_mars(overridden) if source.name == "file": overridden["source"] = source.path elif source.name == "file-pattern": @@ -113,6 +115,7 @@ def out_mars(self, targets: Optional[list[str]] = None) -> Iterator[dict]: ): target = output.targets[0] overridden = output.request.copy() + overridden = extract_mars(overridden) if target.name == "file": overridden["target"] = target.file elif target.name == "file-pattern": diff --git a/pproc-core/src/ppcore/utils/requests.py b/pproc-core/src/ppcore/utils/requests.py index 68ae4df3..24ba77fc 100644 --- a/pproc-core/src/ppcore/utils/requests.py +++ b/pproc-core/src/ppcore/utils/requests.py @@ -5,6 +5,7 @@ import numpy as np import pandas as pd +from qubed import Qube from ppcore.utils.dicts import deep_update from ppcore.utils.dicts import dict_product @@ -98,6 +99,18 @@ def squeeze(reqs: list[dict], dims: list[str]) -> Iterator[dict]: yield req +def datacubes(reqs: list[dict]) -> list[dict]: + qube = Qube.empty() + for req in reqs: + qube = qube | Qube.from_datacube(req) + result = [] + for dataqube in qube.datacubes(): + result.append( + {key: val if len(val) > 1 else val[0] for key, val in dataqube.items()} + ) + return result + + def update_request( base: dict | list[dict], update: dict | list[dict], method: str = "map", **kwargs ): From 987c96a208fbcca470d8dd99dcdc669caf9cee4d Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 22 Jun 2026 14:34:38 +0000 Subject: [PATCH 16/95] Fix input/output request generation --- pproc-core/src/ppcore/config.py | 6 +++--- pproc-core/src/ppcore/configs/product/__init__.py | 7 +++++-- pproc-core/src/ppcore/configs/product/ensemble.py | 11 ++++++++--- pproc-core/src/ppcore/utils/requests.py | 8 ++------ 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py index 54c12598..2ee64077 100644 --- a/pproc-core/src/ppcore/config.py +++ b/pproc-core/src/ppcore/config.py @@ -21,7 +21,7 @@ from ppcore.configs.entrypoint.base import EntrypointConfig from ppcore.products import product_from_config from ppcore.utils import mars -from ppcore.utils.requests import datacubes +from ppcore.utils.requests import datacubes, expand logging.basicConfig( format="%(asctime)s; %(name)s; %(levelname)s - %(message)s", @@ -95,8 +95,8 @@ def requests(args): inputs.extend(product.in_mars(args.source)) outputs.extend(product.out_mars(args.target)) - inputs = datacubes(inputs) - outputs = datacubes(outputs) + inputs = expand(datacubes(inputs), dim="type") + outputs = expand(datacubes(outputs), dim="type") # TODO: Add method to simplify requests if args.inputs: diff --git a/pproc-core/src/ppcore/configs/product/__init__.py b/pproc-core/src/ppcore/configs/product/__init__.py index 4806d179..fd98fe02 100644 --- a/pproc-core/src/ppcore/configs/product/__init__.py +++ b/pproc-core/src/ppcore/configs/product/__init__.py @@ -43,10 +43,13 @@ def from_schema( config = { "name": name, - "requests": inputs, + "requests": { + "original": request, + "inputs": inputs, + }, "dtype": dtype, "sources": request.pop("sources", None), - "outputs": request.pop("outputs", None), + "targets": request.pop("targets", None), "metadata": metadata, **schema, } diff --git a/pproc-core/src/ppcore/configs/product/ensemble.py b/pproc-core/src/ppcore/configs/product/ensemble.py index 5d30c135..72dddc90 100644 --- a/pproc-core/src/ppcore/configs/product/ensemble.py +++ b/pproc-core/src/ppcore/configs/product/ensemble.py @@ -36,7 +36,9 @@ class Ensemble(BaseModel): @model_validator(mode="before") def validate_config(cls, data: Any) -> Any: if isinstance(data, dict): + print("Validating ensemble config...", data) if "requests" in data: + requests = data.pop("requests") if sources := data.pop("sources", None): if isinstance(sources, dict): sources = sources["fc"] @@ -44,13 +46,16 @@ def validate_config(cls, data: Any) -> Any: sources = [sources] data["inputs"] = { "fc": { - "requests": data.pop("requests"), + "requests": requests.pop("inputs"), "sources": sources, "dtype": data.pop("dtype"), } } - if output := data.pop("outputs", None): - data["output"] = output + if targets := data.pop("targets", None): + data["output"] = { + "targets": targets if isinstance(targets, list) else [targets], + "request": requests.pop("original"), + } if metadata := data.pop("metadata", None): stat_metadata = data["statistics"].setdefault("metadata", {}) stat_metadata.update(metadata) diff --git a/pproc-core/src/ppcore/utils/requests.py b/pproc-core/src/ppcore/utils/requests.py index 24ba77fc..e1c15c88 100644 --- a/pproc-core/src/ppcore/utils/requests.py +++ b/pproc-core/src/ppcore/utils/requests.py @@ -99,16 +99,12 @@ def squeeze(reqs: list[dict], dims: list[str]) -> Iterator[dict]: yield req -def datacubes(reqs: list[dict]) -> list[dict]: +def datacubes(reqs: list[dict]) -> Iterator[dict]: qube = Qube.empty() for req in reqs: qube = qube | Qube.from_datacube(req) - result = [] for dataqube in qube.datacubes(): - result.append( - {key: val if len(val) > 1 else val[0] for key, val in dataqube.items()} - ) - return result + yield {key: val if len(val) > 1 else val[0] for key, val in dataqube.items()} def update_request( From c2cd4a71b0d8890c0b7c21f63291fde3f6cd1fd8 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 22 Jun 2026 14:47:36 +0000 Subject: [PATCH 17/95] Bug fix --- pproc-core/src/ppcore/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py index 2ee64077..7342b200 100644 --- a/pproc-core/src/ppcore/config.py +++ b/pproc-core/src/ppcore/config.py @@ -95,8 +95,8 @@ def requests(args): inputs.extend(product.in_mars(args.source)) outputs.extend(product.out_mars(args.target)) - inputs = expand(datacubes(inputs), dim="type") - outputs = expand(datacubes(outputs), dim="type") + inputs = list(expand(datacubes(inputs), dim="type")) + outputs = list(expand(datacubes(outputs), dim="type")) # TODO: Add method to simplify requests if args.inputs: From 4314eeae38b3a141dc614a0f3372a9171dd2c524 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 22 Jun 2026 15:03:50 +0000 Subject: [PATCH 18/95] Remove print statement --- pproc-core/src/ppcore/configs/product/ensemble.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pproc-core/src/ppcore/configs/product/ensemble.py b/pproc-core/src/ppcore/configs/product/ensemble.py index 72dddc90..387034b9 100644 --- a/pproc-core/src/ppcore/configs/product/ensemble.py +++ b/pproc-core/src/ppcore/configs/product/ensemble.py @@ -36,7 +36,6 @@ class Ensemble(BaseModel): @model_validator(mode="before") def validate_config(cls, data: Any) -> Any: if isinstance(data, dict): - print("Validating ensemble config...", data) if "requests" in data: requests = data.pop("requests") if sources := data.pop("sources", None): From 13dd6c387d1cbe97bb3b8ceee4b8d8a6d74bc825 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 22 Jun 2026 15:15:06 +0000 Subject: [PATCH 19/95] Remove expand and squeeze --- pproc-core/src/ppcore/products/ensemble.py | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index 0f67e3ab..20aee0b3 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -14,11 +14,7 @@ from earthkit.workflows.plugins.pproc.fluent import from_source from earthkit.workflows.plugins.pproc.utils.request import Request -from ppcore.utils.requests import ( - expand, - squeeze, - validate_request, -) +from ppcore.utils.requests import validate_request from ppcore.utils.mars import extract_mars from ppcore.configs.product.ensemble import Config from ppcore.products.base import Product @@ -36,16 +32,7 @@ def source(self, ensemble_dim: Optional[str] = None) -> Action: input_config = self.config.inputs.fc ensemble_dim = ensemble_dim or self.ensemble_dim requests = [] - for x in squeeze( - sum( - [ - list(expand(dict(x, **self.input_overrides))) - for x in input_config.requests - ], - [], - ), - ["step", "number", "param", "levelist"], - ): + for x in [dict(x, **self.input_overrides) for x in input_config.requests]: req = Request(validate_request(x), no_expand=("levelist")) if "number" not in req and ensemble_dim == "number": req.make_dim("number", 0) From 150934b506e6c5563f86ff9fdd3a17e0a5a84c21 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 23 Jun 2026 08:20:05 +0000 Subject: [PATCH 20/95] Don't split ensemble members --- pproc-core/src/ppcore/products/ensemble.py | 27 ++++++++++++++-------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index 20aee0b3..dcd2ff23 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -31,18 +31,27 @@ def source(self, ensemble_dim: Optional[str] = None) -> Action: raise ValueError("No inputs provided for ensemble config") input_config = self.config.inputs.fc ensemble_dim = ensemble_dim or self.ensemble_dim - requests = [] + action = None for x in [dict(x, **self.input_overrides) for x in input_config.requests]: - req = Request(validate_request(x), no_expand=("levelist")) + req = Request(validate_request(x), no_expand=("number",)) if "number" not in req and ensemble_dim == "number": req.make_dim("number", 0) - requests.append(req) - return from_source( - input_config.sources, - requests, - input_config.dtype, - join_key=ensemble_dim, - ) + new_action = from_source( + input_config.sources, + [req], + input_config.dtype, + ) + if "number" in req: + new_action = new_action.expand( + "number", + ("number", req["number"]), + backend_kwargs={"method": "sel"}, + ) + if action is None: + action = new_action + else: + action = action.join(new_action, dim=ensemble_dim) + return action def action( self, From a0420db4a62051962010348faeda68d95a96fe46 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 23 Jun 2026 14:21:11 +0000 Subject: [PATCH 21/95] Enable prob and quantiles --- .../plugins/pproc/config/accumulation.py | 12 +- .../workflows/plugins/pproc/config/mask.py | 6 +- .../plugins/pproc/config/threshold.py | 10 +- .../workflows/plugins/pproc/fluent.py | 32 +- .../plugins/pproc/metadata/threshold.py | 4 +- .../plugins/pproc/utils/pydantic_utils.py} | 2 +- pproc-core/src/ppcore/config.py | 25 +- pproc-core/src/ppcore/configs/__init__.py | 4 +- .../src/ppcore/configs/common/accumulation.py | 12 +- pproc-core/src/ppcore/configs/common/input.py | 6 +- .../src/ppcore/configs/common/output.py | 6 +- .../ppcore/configs/common/preprocessing.py | 6 +- .../src/ppcore/configs/common/source.py | 10 +- pproc-core/src/ppcore/configs/common/stats.py | 13 +- .../src/ppcore/configs/common/target.py | 12 +- .../src/ppcore/configs/product/__init__.py | 8 - .../src/ppcore/configs/product/ensemble.py | 14 +- pproc-core/src/ppcore/products/__init__.py | 24 +- pproc-core/src/ppcore/products/ensemble.py | 8 +- pproc-core/src/ppcore/schema/deriver.py | 19 +- pproc-core/src/ppcore/schema/input.py | 8 +- pproc-core/src/ppcore/schema/step.py | 8 +- .../tests/ppcore/products/templates/prob.yaml | 74 +- .../ppcore/products/templates/quantiles.yaml | 28 +- .../tests/ppcore/products/test_products.py | 15 +- .../tests/ppcore/schema/test_deriver.py | 40 +- pproc-core/tests/schema.yaml | 339 +++-- pproc-runtime/src/ppruntime/io.py | 23 +- pproc-runtime/tests/conftest.py | 3 +- pproc/src/pproc/config_generation.py | 2 +- pproc/tests/templates/v3/prob.yaml | 159 +++ pproc/tests/templates/v3/quantiles.yaml | 1209 +++++++++++++++++ pproc/tests/test_products.py | 19 +- 33 files changed, 1792 insertions(+), 368 deletions(-) rename pproc-core/src/{ppcore/configs/utils.py => earthkit/workflows/plugins/pproc/utils/pydantic_utils.py} (71%) create mode 100644 pproc/tests/templates/v3/prob.yaml create mode 100644 pproc/tests/templates/v3/quantiles.yaml diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py index 39f3cdad..a7e34513 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py @@ -4,7 +4,9 @@ from earthkit.time.calendar import MonthInYear from earthkit.time.sequence import MonthlySequence -from pydantic import BaseModel, Field +from pydantic import Field, ConfigDict + +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel NumericCoord = int NumericCoords = Union[list[int], range] @@ -13,7 +15,9 @@ Coords = Union[list[str], NumericCoords] -class Default(BaseModel): +class Default(PProcBaseModel): + model_config = ConfigDict(validate_by_name=True) + type_: Literal["default"] = Field("default", alias="type") length: Optional[int] = None @@ -27,7 +31,9 @@ def name(self, coords: Coords) -> str: return f"{start}-{end}" -class Monthly(BaseModel): +class Monthly(PProcBaseModel): + model_config = ConfigDict(validate_by_name=True) + type_: Literal["monthly"] = Field("monthly", alias="type") date: str diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py index 358aa8de..5d83cb70 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py @@ -1,9 +1,11 @@ from typing import Any, Literal -from pydantic import BaseModel, model_validator +from pydantic import model_validator +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel -class MaskExpression(BaseModel): + +class MaskExpression(PProcBaseModel): select: dict comparison: Literal["<", ">", ">=", "<=", "==", "!="] value: float diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py index bcb9e47f..f1e8be05 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py @@ -1,10 +1,12 @@ -from pydantic import BaseModel, model_validator +from pydantic import model_validator from typing import Any, Optional, Literal +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel + Comparisons = Literal["<", ">", "<=", ">="] -class Threshold(BaseModel): +class Threshold(PProcBaseModel): select: Optional[dict] = None lower_scale_factor: int = 0 lower_comparison: Comparisons @@ -15,10 +17,10 @@ class Threshold(BaseModel): @model_validator(mode="before") def validate_threshold(cls, data: Any) -> Any: - if "comparison" in data and "value" in data: + if "comparison" in data: data["lower_comparison"] = data.pop("comparison") data["lower_value"] = data.pop("value") - data["lower_scale_factor"] = data.get("scale_factor", 0) + data["lower_scale_factor"] = data.pop("scale_factor", 0) if any(k in data for k in ["upper_comparison", "upper_value"]) and not all( k in data for k in ["upper_comparison", "upper_value"] ): diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 70f413f8..069683d5 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -15,7 +15,7 @@ from earthkit.workflows.nodetree import nodetree_size from earthkit.workflows import fluent -from earthkit.workflows.nodetree import nodetree_arrays +from earthkit.workflows.nodetree import nodetree_arrays, nodetree_dimensions from earthkit.workflows.plugins.pproc.utils.request import MultiSourceRequest from earthkit.workflows.plugins.pproc.utils.request import Request from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values @@ -355,7 +355,7 @@ def sot( ).transform(_sot_window_transform, params, dim) return ret - def threshold_prob( + def threshold_probability( self, thresholds: list[Union[Threshold, dict]], dim: str = "number", @@ -368,7 +368,7 @@ def threshold_prob( if isinstance(threshold, dict): threshold = Threshold(**threshold) selected = self.sel(threshold.select) if threshold.select else self - selected.map( + selected = selected.map( fluent.Payload( "ppruntime.stats.mask", (fluent.Node.input_name(0),), @@ -384,8 +384,13 @@ def threshold_prob( "ppruntime.stats.logical_and", dim="param" ) + base_threshold = ( + thresholds[0] + if isinstance(thresholds[0], Threshold) + else Threshold(**thresholds[0]) + ) thr_metadata = threshold_metadata( - threshold=thresholds[0], metadata=metadata, clim_metadata=clim_metadata + threshold=base_threshold, metadata=metadata, clim_metadata=clim_metadata ) return combined.multiply(100).mean( dim=dim, batch_size=batch_size, metadata=thr_metadata @@ -405,14 +410,29 @@ def anomaly( def quantiles( self, - quantiles: int | list[float], + quantiles: int | list[float] | str, dim: str = "number", new_dim: str = "quantile", metadata: dict | None = None, ) -> "Action": + """ + Compute quantiles over the specified dimension. If quantiles is an integer, it will compute that many evenly spaced quantiles. + If quantiles is a string, it should be in the format "q_number:total_number". + If quantiles is a list of floats, it will compute the quantiles at the specified values. + + Parameters + ---------- + quantiles: int | list[float] | str, quantiles to compute + dim: str, dimension to compute quantiles over + new_dim: str, name of the new dimension for quantiles + metadata: dict, optional metadata to set on the output + """ if isinstance(quantiles, int): total_number = quantiles q_numbers = range(0, quantiles + 1) + elif isinstance(quantiles, str): + q_number, total_number = map(int, quantiles.split(":")) + q_numbers = [q_number] else: even_spacing = np.all(np.diff(quantiles) == quantiles[1] - quantiles[0]) total_number = len(quantiles) - 1 if even_spacing else 100 @@ -727,6 +747,8 @@ def _accum_transform( ) -> fluent.Action: if len(coords) == 1: # Nothing to reduce and no metadata to set + if dim not in nodetree_dimensions(action.nodes): + return action return action.select({dim: coords}) if deaccumulate: diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py index cc11c765..141bbbbc 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py @@ -16,7 +16,7 @@ def threshold_metadata( if threshold.upper_comparison is None: threshold_value = round( - threshold.lower_value * 10**threshold.lower_scale_factor, 0 + threshold.lower_value * 10**threshold.lower_scale_factor ) comparison = threshold.lower_comparison.strip("=") if edition == 1 and comparison == "<": @@ -64,6 +64,7 @@ def threshold_metadata( raise ValueError( f"Unsupported threshold comparison {comparison} for grib edition {edition}" ) + thr_metadata.update(metadata) return thr_metadata if edition != 2: raise ValueError("Threshold ranges are only supported for GRIB edition 2") @@ -81,4 +82,5 @@ def threshold_metadata( } ) thr_metadata.update(clim_metadata or {}) + thr_metadata.update(metadata) return thr_metadata diff --git a/pproc-core/src/ppcore/configs/utils.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/pydantic_utils.py similarity index 71% rename from pproc-core/src/ppcore/configs/utils.py rename to pproc-core/src/earthkit/workflows/plugins/pproc/utils/pydantic_utils.py index dabcdec7..e2f6095e 100644 --- a/pproc-core/src/ppcore/configs/utils.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/pydantic_utils.py @@ -1,5 +1,5 @@ from pydantic import BaseModel, ConfigDict -class PProcCoreBaseModel(BaseModel): +class PProcBaseModel(BaseModel): model_config = ConfigDict(extra="forbid") diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py index 7342b200..ca6a07b8 100644 --- a/pproc-core/src/ppcore/config.py +++ b/pproc-core/src/ppcore/config.py @@ -16,10 +16,12 @@ import yaml import json +from earthkit.workflows.visualise import visualise + from ppcore.configs import from_outputs as config_from_outputs from ppcore.configs import from_inputs as config_from_inputs from ppcore.configs.entrypoint.base import EntrypointConfig -from ppcore.products import product_from_config +from ppcore.products import product_from_config, graph_from_configs from ppcore.utils import mars from ppcore.utils.requests import datacubes, expand @@ -120,6 +122,19 @@ def requests(args): yaml.dump(outputs, f, sort_keys=False) +def plot(args): + with open(args.config, "r") as f: + config = yaml.safe_load(f) + entrypoint_config = EntrypointConfig(**config) + + graph = graph_from_configs( + entrypoint_config.products, + entrypoint_config.input_overrides, + entrypoint_config.output_overrides, + ) + visualise(graph, args.file) + + def main(args: List[str] = sys.argv[1:]): parser = argparse.ArgumentParser("Generate configuration file for PProc") parser.add_argument( @@ -202,6 +217,14 @@ def main(args: List[str] = sys.argv[1:]): ) request_parser.set_defaults(func=requests) + plot_parser = subparsers.add_parser( + "plot", help="Generate plot of earthkit-workflows graph from PProc config file" + ) + plot_parser.add_argument( + "--file", type=str, required=False, help="Path to graph html file" + ) + plot_parser.set_defaults(func=plot) + args = parser.parse_args(args) args.func(args) diff --git a/pproc-core/src/ppcore/configs/__init__.py b/pproc-core/src/ppcore/configs/__init__.py index 61669e2d..7df948a2 100644 --- a/pproc-core/src/ppcore/configs/__init__.py +++ b/pproc-core/src/ppcore/configs/__init__.py @@ -28,9 +28,7 @@ def from_outputs( Returns product configuration from output request and PProc schema """ schema = Schema.from_file(pproc_schema) - for request in expand( - requests, exclude=["levelist", "number", "quantile", "hdate"] - ): + for request in expand(requests): schema_config = schema.config_from_output(request, inputs=inputs) yield from_schema(schema_config, request, metadata, **overrides) diff --git a/pproc-core/src/ppcore/configs/common/accumulation.py b/pproc-core/src/ppcore/configs/common/accumulation.py index e2eb8611..ad2eabfe 100644 --- a/pproc-core/src/ppcore/configs/common/accumulation.py +++ b/pproc-core/src/ppcore/configs/common/accumulation.py @@ -1,14 +1,15 @@ from typing import Optional, Union, Literal, Annotated, Any -from pydantic import BaseModel, Field, field_validator +from pydantic import Field, field_validator, model_validator from earthkit.workflows.plugins.pproc.config.accumulation import ( Default, Monthly, ) +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel -class Accumulation(BaseModel): +class Accumulation(PProcBaseModel): operation: Optional[Literal["min", "max", "mean", "std", "add", "diff"]] = None coords: list[Union[list[int], list[str]]] metadata: Optional[dict] = None @@ -20,6 +21,13 @@ class Accumulation(BaseModel): ] ] = None + @model_validator(mode="before") + def validate_config(cls, data: Any) -> Any: + if isinstance(data, dict): + # TODO Update schema to remove these keys + data.pop("type", None) + return data + @field_validator("operation", mode="before") @classmethod def validate_operation(cls, operation: str) -> Optional[str]: diff --git a/pproc-core/src/ppcore/configs/common/input.py b/pproc-core/src/ppcore/configs/common/input.py index 533f01f1..97a773b0 100644 --- a/pproc-core/src/ppcore/configs/common/input.py +++ b/pproc-core/src/ppcore/configs/common/input.py @@ -11,11 +11,11 @@ from annotated_types import Annotated from pydantic import ( - BaseModel, Field, create_model, field_validator, ) +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.configs.common.source import ( FDBSource, FilePatternSource, @@ -25,7 +25,7 @@ from ppcore.utils.io import split_location -class Input(BaseModel): +class Input(PProcBaseModel): sources: list[ Annotated[ Union[FileSource, FilePatternSource, FDBSource, MARSSource], @@ -67,7 +67,7 @@ def base_request(self) -> dict: } -class InputsCollection(BaseModel): +class InputsCollection(PProcBaseModel): names: ClassVar[list[str]] diff --git a/pproc-core/src/ppcore/configs/common/output.py b/pproc-core/src/ppcore/configs/common/output.py index dcc28792..4b473fb0 100644 --- a/pproc-core/src/ppcore/configs/common/output.py +++ b/pproc-core/src/ppcore/configs/common/output.py @@ -11,11 +11,11 @@ from annotated_types import Annotated from pydantic import ( - BaseModel, Field, create_model, field_validator, ) +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.utils.io import split_location from ppcore.configs.common.target import ( NullTarget, @@ -26,7 +26,7 @@ ) -class Output(BaseModel): +class Output(PProcBaseModel): targets: list[ Annotated[ Union[FileTarget, FilePatternTarget, FDBTarget, NullTarget, ZarrTarget], @@ -58,7 +58,7 @@ def validate_targets(cls, data: Any) -> Any: return data -class OutputsCollection(BaseModel): +class OutputsCollection(PProcBaseModel): names: ClassVar[list[str]] diff --git a/pproc-core/src/ppcore/configs/common/preprocessing.py b/pproc-core/src/ppcore/configs/common/preprocessing.py index c58c8e73..72641050 100644 --- a/pproc-core/src/ppcore/configs/common/preprocessing.py +++ b/pproc-core/src/ppcore/configs/common/preprocessing.py @@ -15,14 +15,14 @@ from typing import Optional from typing import Union -from pydantic import BaseModel from pydantic import Field from pydantic import model_validator +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from earthkit.workflows.plugins.pproc.config.mask import MaskExpression -class Preprocessing(BaseModel, ABC): +class Preprocessing(PProcBaseModel, ABC): metadata: Optional[dict] = None @@ -61,7 +61,7 @@ class Masking(Preprocessing): replacement: float = 0.0 -class PreprocessingConfig(BaseModel): +class PreprocessingConfig(PProcBaseModel): # preprocessing: # - operation: norm # - operation: mask diff --git a/pproc-core/src/ppcore/configs/common/source.py b/pproc-core/src/ppcore/configs/common/source.py index eab1d574..f98fce83 100644 --- a/pproc-core/src/ppcore/configs/common/source.py +++ b/pproc-core/src/ppcore/configs/common/source.py @@ -1,24 +1,24 @@ from typing import Optional, Literal -from pydantic import BaseModel +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel -class FDBSource(BaseModel): +class FDBSource(PProcBaseModel): name: Literal["fdb"] = "fdb" config: Optional[str] = None stream: bool = True -class MARSSource(BaseModel): +class MARSSource(PProcBaseModel): name: Literal["mars"] = "mars" -class FileSource(BaseModel): +class FileSource(PProcBaseModel): name: Literal["file"] = "file" path: str -class FilePatternSource(BaseModel): +class FilePatternSource(PProcBaseModel): name: Literal["file-pattern"] = "file-pattern" pattern: str hive_partitioning: bool = True diff --git a/pproc-core/src/ppcore/configs/common/stats.py b/pproc-core/src/ppcore/configs/common/stats.py index 691dd9de..21775ec5 100644 --- a/pproc-core/src/ppcore/configs/common/stats.py +++ b/pproc-core/src/ppcore/configs/common/stats.py @@ -1,16 +1,17 @@ from typing import Literal, Any -from pydantic import BaseModel, Field, model_validator +from pydantic import Field, model_validator +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from earthkit.workflows.plugins.pproc.config.threshold import Threshold -class Statistics(BaseModel): +class Statistics(PProcBaseModel): metadata: dict = Field(default_factory=dict) class Quantiles(Statistics): operation: Literal["quantiles"] = "quantiles" - quantiles: int | list[float] = 100 + quantiles: int | list[float] | str = 100 class EFI(Statistics): @@ -38,8 +39,6 @@ class ThresholdProbability(Statistics): @model_validator(mode="before") def validate_thresholds(cls, data: Any) -> Any: - if isinstance(data, dict) and "thresholds" not in data: - data["thresholds"] = [ - {k: data[k] for k in data if k not in cls.model_fields} - ] + if isinstance(data, dict) and "threshold" in data: + data.setdefault("thresholds", []).append(data.pop("threshold")) return data diff --git a/pproc-core/src/ppcore/configs/common/target.py b/pproc-core/src/ppcore/configs/common/target.py index 18255e2b..08a8d28a 100644 --- a/pproc-core/src/ppcore/configs/common/target.py +++ b/pproc-core/src/ppcore/configs/common/target.py @@ -10,31 +10,31 @@ from typing import Literal, Optional -from pydantic import BaseModel +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel -class NullTarget(BaseModel): +class NullTarget(PProcBaseModel): name: Literal["null"] = "null" -class FileTarget(BaseModel): +class FileTarget(PProcBaseModel): name: Literal["file"] = "file" file: str append: bool = False -class FilePatternTarget(BaseModel): +class FilePatternTarget(PProcBaseModel): name: Literal["file-pattern"] = "file-pattern" file: str append: bool = False -class FDBTarget(BaseModel): +class FDBTarget(PProcBaseModel): name: Literal["fdb"] = "fdb" config: Optional[str] = None -class ZarrTarget(BaseModel): +class ZarrTarget(PProcBaseModel): name: Literal["zarr"] = "zarr" earthkit_to_xarray_kwargs: Optional[dict] = None xarray_to_zarr_kwargs: Optional[dict] = None diff --git a/pproc-core/src/ppcore/configs/product/__init__.py b/pproc-core/src/ppcore/configs/product/__init__.py index fd98fe02..1089cbf2 100644 --- a/pproc-core/src/ppcore/configs/product/__init__.py +++ b/pproc-core/src/ppcore/configs/product/__init__.py @@ -8,14 +8,6 @@ logger = logging.getLogger(__name__) -ENTRYPOINT_TO_CONFIG = { - "pproc-ensms": "ensemble", - "pproc-quantiles": "ensemble", - "pproc-probabilities": "ensemble", - "pproc-accumulate": "ensemble", - "pproc-extreme": "extreme", -} - ProductConfig = Annotated[ Union[Ensemble], diff --git a/pproc-core/src/ppcore/configs/product/ensemble.py b/pproc-core/src/ppcore/configs/product/ensemble.py index 387034b9..496f3f64 100644 --- a/pproc-core/src/ppcore/configs/product/ensemble.py +++ b/pproc-core/src/ppcore/configs/product/ensemble.py @@ -8,8 +8,9 @@ # nor does it submit to any jurisdiction. from typing import Any, Optional, Union, Literal -from pydantic import BaseModel, Field, model_validator +from pydantic import Field, model_validator +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.configs.common.preprocessing import PreprocessingConfig from ppcore.configs.common.input import create_input_model from ppcore.configs.common.output import Output @@ -20,12 +21,13 @@ Quantiles, ThresholdProbability, ) +from ppcore.utils.mars import extract_mars EnsembleInputModel = create_input_model("EnsembleInputsModel", inputs=["fc"]) -class Ensemble(BaseModel): +class Ensemble(PProcBaseModel): name: Literal["ensemble"] = Field("ensemble") preprocessing: PreprocessingConfig = Field(default_factory=PreprocessingConfig) accumulations: dict[str, Accumulation] = Field(default_factory=dict) @@ -38,6 +40,8 @@ def validate_config(cls, data: Any) -> Any: if isinstance(data, dict): if "requests" in data: requests = data.pop("requests") + original = requests.pop("original") + dtype = data.pop("dtype", "float32") if sources := data.pop("sources", None): if isinstance(sources, dict): sources = sources["fc"] @@ -47,17 +51,19 @@ def validate_config(cls, data: Any) -> Any: "fc": { "requests": requests.pop("inputs"), "sources": sources, - "dtype": data.pop("dtype"), + "dtype": dtype, } } if targets := data.pop("targets", None): data["output"] = { "targets": targets if isinstance(targets, list) else [targets], - "request": requests.pop("original"), + "request": extract_mars(original), } if metadata := data.pop("metadata", None): stat_metadata = data["statistics"].setdefault("metadata", {}) stat_metadata.update(metadata) + if data.pop("quantiles", None) is not None: + data["statistics"]["quantiles"] = original["quantile"] return data diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index 60535f69..ed659e73 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -24,8 +24,8 @@ def product_from_config( ) -def product_from_outputs( - requests: list[dict], +def product_from_output( + request: dict, pproc_schema: str, metadata: Optional[dict] = None, ) -> Product: @@ -33,9 +33,11 @@ def product_from_outputs( Returns fluent.Action for computing the product specified by the output request and PProc schema """ - requests = list( - expand(requests, exclude=["levelist", "number", "quantile", "hdate"]) - ) + requests = list(expand(request)) + if len(requests) != 1: + raise ValueError( + f"Expected a single request after expansion, got {len(requests)}" + ) config = list(config_from_outputs(requests, pproc_schema, metadata=metadata))[0] return product_from_config(config) @@ -49,11 +51,13 @@ def graph_from_outputs( Returns fluent.Action for computing the product specified by the output request and PProc schema """ - graph = ( - product_from_outputs(requests, pproc_schema=pproc_schema, metadata=metadata) - .action() - .graph() - ) + graph = Graph([]) + for request in expand(requests): + graph += ( + product_from_output(request, pproc_schema=pproc_schema, metadata=metadata) + .action() + .graph() + ) return deduplicate_nodes(graph) diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index dcd2ff23..657c26a2 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -34,19 +34,19 @@ def source(self, ensemble_dim: Optional[str] = None) -> Action: action = None for x in [dict(x, **self.input_overrides) for x in input_config.requests]: req = Request(validate_request(x), no_expand=("number",)) - if "number" not in req and ensemble_dim == "number": - req.make_dim("number", 0) new_action = from_source( input_config.sources, [req], input_config.dtype, ) - if "number" in req: + if "number" in x: new_action = new_action.expand( "number", ("number", req["number"]), backend_kwargs={"method": "sel"}, ) + else: + new_action._add_dimension("number", 0) if action is None: action = new_action else: @@ -62,7 +62,7 @@ def action( ret = forecast or self.source(ensemble_dim=ensemble_dim) for preprocessing in self.config.preprocessing.actions: ret = ret.preprocessing( - preprocessing_dim or self.preprocessing_dim, + dim=preprocessing_dim or self.preprocessing_dim, **preprocessing.model_dump(), ) for dim, accumulation in self.config.accumulations.items(): diff --git a/pproc-core/src/ppcore/schema/deriver.py b/pproc-core/src/ppcore/schema/deriver.py index 92925f54..448978d0 100644 --- a/pproc-core/src/ppcore/schema/deriver.py +++ b/pproc-core/src/ppcore/schema/deriver.py @@ -24,10 +24,15 @@ from pydantic import Field from pydantic import model_validator +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.utils.stepseq import fcmonth_to_steprange -class DefaultStepDeriver(BaseModel): +class BaseDeriver(BaseModel): + model_config = ConfigDict(validate_by_name=True) + + +class DefaultStepDeriver(BaseDeriver): type_: Literal["default"] = Field("default", alias="type") by: Optional[int] = None include_start: bool = False @@ -67,7 +72,7 @@ def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: return self._range(*steps, fc_steps) -class DeaccumulateStepDeriver(BaseModel): +class DeaccumulateStepDeriver(BaseDeriver): type_: Literal["deaccumulate"] = Field("deaccumulate", alias="type") by: int = 0 allow_missing_zero: bool = False @@ -98,7 +103,7 @@ def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: return self._range(*steps, fc_steps) -class PrecomputedStepDeriver(BaseModel): +class PrecomputedStepDeriver(BaseDeriver): type_: Literal["precomputed"] = Field("precomputed", alias="type") def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: @@ -136,7 +141,7 @@ def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: return [selection_range[self.index]] -class StaticStepDeriver(BaseModel): +class StaticStepDeriver(BaseDeriver): type_: Literal["static"] = Field("static", alias="type") values: Union[int, list[int]] @@ -160,7 +165,7 @@ def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: ] -class ClimStepDeriver(BaseModel): +class ClimStepDeriver(BaseDeriver): type_: Literal["range", "instantaneous"] = Field("range", alias="type") @model_validator(mode="before") @@ -235,7 +240,7 @@ def derive(self, request: dict, clim_steps: list[str]) -> int | str: return getattr(ClimStepDeriver, f"_{self.type_}")(request, clim_steps) -class ClimDateDeriver(BaseModel): +class ClimDateDeriver(PProcBaseModel): model_config = ConfigDict(extra="allow") option: str @@ -254,7 +259,7 @@ def derive(self, fc_request: dict, scheme: str) -> str | list[str]: return [datetime.datetime.strftime(x, "%Y%m%d") for x in clim_date] -class HindcastDatesDeriver(BaseModel): +class HindcastDatesDeriver(PProcBaseModel): rstart: int rend: int recurrence: str = "yearly" diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index 2209ca22..71b5c9e0 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -16,11 +16,11 @@ import numpy as np import pandas as pd -from pydantic import BaseModel from pydantic import field_validator from pydantic import model_validator from typing_extensions import Self +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.schema.base import BaseSchema from ppcore.schema.step import StepSchema from ppcore.utils.dicts import deep_update @@ -49,7 +49,7 @@ logger = logging.getLogger(__name__) -class ForecastInput(BaseModel): +class ForecastInput(PProcBaseModel): members: Optional[dict] = None request: dict derive_step: ForecastStepDeriver @@ -120,7 +120,7 @@ def populate_derived(self, base_request: dict, steps: list[int | str], scheme: s super().populate_derived(base_request, steps, scheme) -class ForecastConfig(BaseModel): +class ForecastConfig(PProcBaseModel): inputs: list[ForecastInput] scheme: Optional[str] = None @@ -215,7 +215,7 @@ def match(self, input_requests: list[dict]) -> Iterator[Self]: yield from super().match(input_requests) -class InputConfig(BaseModel): +class InputConfig(PProcBaseModel): forecast: ForecastConfig climatology: ClimatologyConfig from_inputs: bool = True diff --git a/pproc-core/src/ppcore/schema/step.py b/pproc-core/src/ppcore/schema/step.py index 1bf9d5fa..fbefd572 100644 --- a/pproc-core/src/ppcore/schema/step.py +++ b/pproc-core/src/ppcore/schema/step.py @@ -14,16 +14,16 @@ from typing import Union import numpy as np -from pydantic import BaseModel from pydantic import Field from pydantic import RootModel +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.schema.base import BaseSchema from ppcore.utils.stepseq import steprange_to_fcmonth from ppcore.utils.stepseq import stepseq_monthly -class Instantaneous(BaseModel): +class Instantaneous(PProcBaseModel): type_: Literal["instantaneous"] = Field("instantaneous", alias="type") deaccumulate: bool = False start: Optional[int] = None @@ -44,7 +44,7 @@ def generate_steps(self, steps: list[int]) -> list[int]: return selected_steps[1:] if self.deaccumulate else selected_steps -class Range(BaseModel): +class Range(PProcBaseModel): type_: Literal["range"] = Field("range", alias="type") start: Optional[int] = None end: Optional[int] = None @@ -65,7 +65,7 @@ def generate_steps(self, steps: list[int] | list[str]) -> list[str]: return [f"{rstart}-{rstart + self.width}" for rstart in sorted(rstarts)] -class Monthly(BaseModel): +class Monthly(PProcBaseModel): type_: Literal["monthly"] = Field("monthly", alias="type") date: str dim: Literal["fcmonth"] = "fcmonth" diff --git a/pproc-core/tests/ppcore/products/templates/prob.yaml b/pproc-core/tests/ppcore/products/templates/prob.yaml index ea43d456..21863d26 100644 --- a/pproc-core/tests/ppcore/products/templates/prob.yaml +++ b/pproc-core/tests/ppcore/products/templates/prob.yaml @@ -7,18 +7,7 @@ date: "20230914" time: 12 expver: "0001" - step: 0-24 - sources: "fdb:" -- class: od - stream: enfo - type: ep - levtype: sfc - domain: g - param: "131060" - date: "20230914" - time: 12 - expver: "0001" - step: 12-36 + step: [0-24, 12-36] sources: "fdb:" - class: od stream: enfo @@ -51,29 +40,7 @@ date: "20230914" time: 12 expver: "0001" - step: 0-24 - sources: "fdb:" -- class: od - stream: enfo - type: ep - levtype: sfc - domain: g - param: "131098" - date: "20230914" - time: 12 - expver: "0001" - step: 12-36 - sources: "fdb:" -- class: od - stream: enfo - type: ep - levtype: sfc - domain: g - param: "131068" - date: 20230914 - time: 12 - expver: "0001" - step: 12 + step: [0-24, 12-36] sources: "fdb:" - class: od stream: enfo @@ -84,7 +51,7 @@ date: 20230914 time: 12 expver: "0001" - step: 24 + step: [12, 24] sources: "fdb:" - class: od stream: enfo @@ -117,38 +84,5 @@ date: 20230914 time: 12 expver: "0001" - step: 120-168 - sources: "fdb:" -- class: od - stream: enfo - type: ep - levtype: sfc - domain: g - param: "131073" - date: 20230914 - time: 12 - expver: "0001" - step: 120-240 - sources: "fdb:" -- class: od - stream: enfo - type: ep - levtype: sfc - domain: g - param: "131073" - date: 20230914 - time: 12 - expver: "0001" - step: 168-240 - sources: "fdb:" -- class: od - stream: enfo - type: ep - levtype: sfc - domain: g - param: "131073" - date: 20230914 - time: 12 - expver: "0001" - step: 126 + step: [120-168, 120-240, 168-240, 126] sources: "fdb:" diff --git a/pproc-core/tests/ppcore/products/templates/quantiles.yaml b/pproc-core/tests/ppcore/products/templates/quantiles.yaml index 91499bb9..f13408c6 100644 --- a/pproc-core/tests/ppcore/products/templates/quantiles.yaml +++ b/pproc-core/tests/ppcore/products/templates/quantiles.yaml @@ -7,30 +7,10 @@ date: "20230914" time: 12 expver: "0001" - step: 0 - quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] -- class: od - stream: enfo - type: pb - levtype: sfc - domain: g - param: "167" - date: "20230914" - time: 12 - expver: "0001" - step: 3 - quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] -- class: od - stream: enfo - type: pb - levtype: sfc - domain: g - param: "167" - date: "20230914" - time: 12 - expver: "0001" - step: 6 + step: [0, 3, 6] quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] + sources: "fdb:" + sources: "fdb:" - class: od stream: enfo type: pb @@ -42,6 +22,7 @@ expver: "0001" step: 0-6 quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] + sources: "fdb:" - class: od stream: enfo type: pb @@ -53,3 +34,4 @@ expver: "0001" step: 3-9 quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] + sources: "fdb:" diff --git a/pproc-core/tests/ppcore/products/test_products.py b/pproc-core/tests/ppcore/products/test_products.py index 8df36a55..26fc5a2c 100644 --- a/pproc-core/tests/ppcore/products/test_products.py +++ b/pproc-core/tests/ppcore/products/test_products.py @@ -16,7 +16,8 @@ from earthkit.workflows.plugins.pproc.fluent import from_source from earthkit.workflows.plugins.pproc.utils.request import Request -from ppcore.products import product_from_outputs, graph_from_outputs +from ppcore.products import product_from_output, graph_from_outputs +from ppcore.utils.requests import expand from conftest import SCHEMA @@ -27,8 +28,10 @@ "requests", [ os.path.join(ROOT_DIR, "templates", "ensms.yaml"), + os.path.join(ROOT_DIR, "templates", "prob.yaml"), + os.path.join(ROOT_DIR, "templates", "quantiles.yaml"), ], - ids=["ensms"], + ids=["ensms", "prob", "quantiles"], ) def test_graph_construction(requests): with open(requests, "r") as f: @@ -40,16 +43,18 @@ def test_graph_construction(requests): "requests", [ os.path.join(ROOT_DIR, "templates", "ensms.yaml"), + os.path.join(ROOT_DIR, "templates", "prob.yaml"), + os.path.join(ROOT_DIR, "templates", "quantiles.yaml"), ], - ids=["ensms"], + ids=["ensms", "prob", "quantiles"], ) def test_custom_source(requests): with open(requests, "r") as f: output_requests = yaml.safe_load(f) graph = Graph([]) - for req in output_requests: - product = product_from_outputs([req], SCHEMA, metadata={"edition": 2}) + for req in expand(output_requests): + product = product_from_output(req, SCHEMA, metadata={"edition": 2}) requests = [] for request in product.config.inputs.fc.requests: req = Request(request) diff --git a/pproc-core/tests/ppcore/schema/test_deriver.py b/pproc-core/tests/ppcore/schema/test_deriver.py index dab0098c..f654fda5 100644 --- a/pproc-core/tests/ppcore/schema/test_deriver.py +++ b/pproc-core/tests/ppcore/schema/test_deriver.py @@ -11,96 +11,96 @@ @pytest.mark.parametrize( "config, output_request, fc_steps, expected", [ - pytest.param({"type_": "default"}, {"step": 6}, [0, 6, 12], [6], id="inst"), + pytest.param({"type": "default"}, {"step": 6}, [0, 6, 12], [6], id="inst"), pytest.param( - {"type_": "default"}, {"step": "0-6"}, [0, 3, 6, 12], [3, 6], id="range" + {"type": "default"}, {"step": "0-6"}, [0, 3, 6, 12], [3, 6], id="range" ), pytest.param( - {"type_": "default", "include_start": True}, + {"type": "default", "include_start": True}, {"step": "0-6"}, [0, 3, 6, 12], [0, 3, 6], id="range-with-start", ), pytest.param( - {"type_": "default", "include_start": True, "allow_missing_zero": True}, + {"type": "default", "include_start": True, "allow_missing_zero": True}, {"step": "0-6"}, [0, 3, 6, 12], [0, 3, 6], id="range-allow-missing", ), pytest.param( - {"type_": "default", "include_start": True, "allow_missing_zero": True}, + {"type": "default", "include_start": True, "allow_missing_zero": True}, {"step": "0-6"}, [3, 6, 12], [3, 6], id="range-missing-zero", ), pytest.param( - {"type_": "default", "by": 6}, + {"type": "default", "by": 6}, {"step": "0-6"}, [0, 3, 6, 12], [6], id="range-with-by", ), pytest.param( - {"type_": "deaccumulate"}, + {"type": "deaccumulate"}, {"step": "0-6"}, [0, 6, 9, 12], [0, 6], id="deacc-range", ), pytest.param( - {"type_": "deaccumulate", "allow_missing_zero": True}, + {"type": "deaccumulate", "allow_missing_zero": True}, {"step": "0-6"}, [6, 9, 12], [6], id="deacc-missing-zero", ), pytest.param( - {"type_": "deaccumulate"}, + {"type": "deaccumulate"}, {"step": 6}, [0, 6, 9, 12], [0, 6], id="deacc-inst", ), pytest.param( - {"type_": "deaccumulate", "allow_missing_zero": True}, + {"type": "deaccumulate", "allow_missing_zero": True}, {"step": 6}, [6, 9, 12], [6], id="deacc-inst-missing-zero", ), pytest.param( - {"type_": "deaccumulate", "by": 12}, + {"type": "deaccumulate", "by": 12}, {"step": 12}, [0, 6, 9, 12], [0, 12], id="deacc-inst-by", ), pytest.param( - {"type_": "deaccumulate", "by": 24, "allow_missing_zero": True}, + {"type": "deaccumulate", "by": 24, "allow_missing_zero": True}, {"step": "0-12"}, [12, 18, 24], [24], id="deacc-range-by", ), pytest.param( - {"type_": "precomputed"}, + {"type": "precomputed"}, {"step": "0-12"}, [6, 9, 12], ["0-12"], id="precomputed", ), pytest.param( - {"type_": "monthly"}, + {"type": "monthly"}, {"fcmonth": 1, "date": "20250601"}, list(range(0, 745, 6)), list(range(6, 721, 6)), id="monthly", ), pytest.param( - {"type_": "monthly", "include_start": True}, + {"type": "monthly", "include_start": True}, {"fcmonth": 1, "date": "20250601"}, list(range(0, 745, 6)), list(range(0, 721, 6)), @@ -108,7 +108,7 @@ ), pytest.param( { - "type_": "monthly", + "type": "monthly", "include_start": True, "allow_missing_zero": True, "by": 24, @@ -119,14 +119,14 @@ id="monthly-missing-zero", ), pytest.param( - {"type_": "select", "index": 1}, + {"type": "select", "index": 1}, {"step": "0-24"}, [0, 12, 24], [24], id="select", ), pytest.param( - {"type_": "select", "index": 0, "include_start": True}, + {"type": "select", "index": 0, "include_start": True}, {"step": "0-24"}, [0, 12, 24], [0], @@ -134,7 +134,7 @@ ), pytest.param( { - "type_": "select", + "type": "select", "index": 0, "include_start": True, "allow_missing_zero": True, @@ -145,7 +145,7 @@ id="select-missing-zero", ), pytest.param( - {"type_": "static", "values": [0, 12]}, + {"type": "static", "values": [0, 12]}, {"step": "0-24"}, [0, 12, 24], [0, 12], diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index acf07974..f50966c4 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -24,8 +24,9 @@ config: "121/122/123/228026/228027": filter:type: em/es/pb: - metadata: - timeRangeIndicator: 2 + statistics: + metadata: + timeRangeIndicator: 2 accumulations: step: name: @@ -346,6 +347,9 @@ config: value: 604800000 ep: entrypoint: pproc-probabilities + metadata_from_output: ["param", "stream", "date", "type"] + statistics: + operation: threshold_probability dtype: float64 filter:steptype: instantaneous: @@ -495,201 +499,242 @@ config: packingType: "grid_ccsds" bitsPerValue: 24 "260290": - metadata: - edition: 2 - productDefinitionTemplateNumber: 5 - typeOfGeneratingProcess: 5 + statistics: + metadata: + edition: 2 + productDefinitionTemplateNumber: 5 + typeOfGeneratingProcess: 5 filter:selection: "default": filter:param: "131060": - threshold: - comparison: ">=" - value: 0.001 - scale_factor: 3 + statistics: + threshold: + comparison: ">=" + value: 0.001 + scale_factor: 3 "131061": - threshold: - comparison: ">=" - value: 0.005 - scale_factor: 3 + statistics: + threshold: + comparison: ">=" + value: 0.005 + scale_factor: 3 "131062": - threshold: - comparison: ">=" - value: 0.01 - scale_factor: 3 + statistics: + threshold: + comparison: ">=" + value: 0.01 + scale_factor: 3 "131063": - threshold: - comparison: ">=" - value: 0.02 - scale_factor: 3 + statistics: + threshold: + comparison: ">=" + value: 0.02 + scale_factor: 3 "131098": - threshold: - comparison: ">=" - value: 0.025 - scale_factor: 3 + statistics: + threshold: + comparison: ">=" + value: 0.025 + scale_factor: 3 metadata: scaleFactorOfLowerLimit: 0 "131099": - threshold: - comparison: ">=" - value: 0.05 - scale_factor: 3 + statistics: + threshold: + comparison: ">=" + value: 0.05 + scale_factor: 3 metadata: scaleFactorOfLowerLimit: 0 "131085": - threshold: - comparison: ">=" - value: 0.1 - scale_factor: 3 + statistics: + threshold: + comparison: ">=" + value: 0.1 + scale_factor: 3 metadata: scaleFactorOfLowerLimit: 0 "131064": - threshold: - comparison: '<' - value: 0.0001 - scale_factor: 4 + statistics: + threshold: + comparison: '<' + value: 0.0001 + scale_factor: 4 "131065": - threshold: - comparison: '<' - value: 0.001 - scale_factor: 4 + statistics: + threshold: + comparison: '<' + value: 0.001 + scale_factor: 4 "131066": - threshold: - comparison: '>=' - value: 0.003 - scale_factor: 4 + statistics: + threshold: + comparison: '>=' + value: 0.003 + scale_factor: 4 "131067": - threshold: - comparison: '>=' - value: 0.005 - scale_factor: 4 + statistics: + threshold: + comparison: '>=' + value: 0.005 + scale_factor: 4 "131068": - threshold: - comparison: ">=" - value: 10 + statistics: + threshold: + comparison: ">=" + value: 10 "131069": - threshold: - comparison: ">=" - value: 15 + statistics: + threshold: + comparison: ">=" + value: 15 "131070": - threshold: - comparison: ">=" - value: 15 + statistics: + threshold: + comparison: ">=" + value: 15 "131071": - threshold: - comparison: ">=" - value: 20 + statistics: + threshold: + comparison: ">=" + value: 20 "131072": - threshold: - comparison: ">=" - value: 25 + statistics: + threshold: + comparison: ">=" + value: 25 "131100": - threshold: - comparison: ">=" - value: 10 + statistics: + threshold: + comparison: ">=" + value: 10 "131074": - threshold: - comparison: ">=" - value: 2 + statistics: + threshold: + comparison: ">=" + value: 2 "131075": - threshold: - comparison: ">=" - value: 4 + statistics: + threshold: + comparison: ">=" + value: 4 "131076": - threshold: - comparison: ">=" - value: 6 + statistics: + threshold: + comparison: ">=" + value: 6 "131077": - threshold: - comparison: ">=" - value: 8 + statistics: + threshold: + comparison: ">=" + value: 8 "131078": - threshold: - comparison: ">=" - value: 8 + statistics: + threshold: + comparison: ">=" + value: 8 "131079": - threshold: - comparison: ">=" - value: 10 + statistics: + threshold: + comparison: ">=" + value: 10 "131080": - threshold: - comparison: ">=" - value: 12 + statistics: + threshold: + comparison: ">=" + value: 12 "131081": - threshold: - comparison: ">=" - value: 15 + statistics: + threshold: + comparison: ">=" + value: 15 "131073": - threshold: - comparison: "<=" - value: 273.15 - scale_factor: 2 + statistics: + threshold: + comparison: "<=" + value: 273.15 + scale_factor: 2 "131020": - threshold: - comparison: "<" - value: -2 + statistics: + threshold: + comparison: "<" + value: -2 "131021": - threshold: - comparison: ">=" - value: 2 + statistics: + threshold: + comparison: ">=" + value: 2 "131022": - threshold: - comparison: "<" - value: -8 + statistics: + threshold: + comparison: "<" + value: -8 "131023": - threshold: - comparison: "<" - value: -4 + statistics: + threshold: + comparison: "<" + value: -4 "131024": - threshold: - comparison: ">" - value: 4 + statistics: + threshold: + comparison: ">" + value: 4 "131025": - threshold: - comparison: ">" - value: 8 + statistics: + threshold: + comparison: ">" + value: 8 "133093": - threshold: - comparison: '>' - value: 1 + statistics: + threshold: + comparison: '>' + value: 1 "133094": - threshold: - comparison: '>' - value: 1.5 - scale_factor: 1 + statistics: + threshold: + comparison: '>' + value: 1.5 + scale_factor: 1 metadata: scaleFactorOfLowerLimit: 1 "133095": - threshold: - comparison: '>' - value: 2 + statistics: + threshold: + comparison: '>' + value: 2 "133096": - threshold: - comparison: '<' - value: -1 - limit_type: lower + statistics: + threshold: + comparison: '<' + value: -1 + limit_type: lower "133097": - threshold: - comparison: '<' - value: -1.5 - scale_factor: 1 - limit_type: lower + statistics: + threshold: + comparison: '<' + value: -1.5 + scale_factor: 1 + limit_type: lower metadata: scaleFactorOfLowerLimit: 1 "133098": - threshold: - comparison: '<' - value: -2 - limit_type: lower + statistics: + threshold: + comparison: '<' + value: -2 + limit_type: lower "eccharts": filter:param: - "131060": - threshold: - comparison: ">=" - value: "{threshold}:float" - scale_factor: 3 + statistics: + "131060": + threshold: + comparison: ">=" + value: "{threshold}:float" + scale_factor: 3 "260290": - threshold: "{threshold}" + statistics: + threshold: "{threshold}" fcmean: filter:param: 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: @@ -1247,10 +1292,14 @@ config: bitsPerValue: 16 pb: entrypoint: pproc-quantiles + metadata_from_output: ["param", "stream", "date", "type"] + statistics: + operation: quantiles filter:stream: enfo/waef: - metadata: - localDefinitionNumber: 30 + statistics: + metadata: + localDefinitionNumber: 30 "*": {} taem/taes: filter:stream: diff --git a/pproc-runtime/src/ppruntime/io.py b/pproc-runtime/src/ppruntime/io.py index 182b2a2c..24af7806 100644 --- a/pproc-runtime/src/ppruntime/io.py +++ b/pproc-runtime/src/ppruntime/io.py @@ -140,17 +140,17 @@ def retrieve( try: logger.debug(f"Trying source {name}") if name == "fdb": - ds = fdb_retrieve(request=request, **source) + source_ds = fdb_retrieve(request=request, **source) elif name == "mars": - ds = mars_retrieve(request=request, **source) + source_ds = mars_retrieve(request=request, **source) elif name in ["file", "file-pattern"]: - ds = file_retrieve(name, request=request, **source).order_by( - "paramId" - ) + source_ds = file_retrieve( + name, request=request, **source + ).order_by("paramId") else: raise NotImplementedError(f"Source {source} not supported.") assert ( - len(ds) > 0 + len(source_ds) > 0 ), f"No data retrieved from {source} for request {request}" break except AssertionError: @@ -158,13 +158,16 @@ def retrieve( f"No data retrieved from source {source} for request {request}" ) continue - if len(ds) == 0: + if len(source_ds) == 0: raise ValueError( f"No data retrieved from sources {sources} for request {request}" ) ds += FieldList.from_array( - ds.to_array(flatten=True, dtype=dtype), - [StandAloneGribMetadata(metadata._handle) for metadata in ds.metadata()], + source_ds.to_array(flatten=True, dtype=dtype), + [ + StandAloneGribMetadata(metadata._handle) + for metadata in source_ds.metadata() + ], ) return ds @@ -173,5 +176,5 @@ def write(data: FieldList, name: str, **kwargs): if name == "null": return - with ResourceMeter(f"Write {data.ls()} to {name}"): + with ResourceMeter(f"Write {data.ls(namespace="mars")} to {name}"): data.to_target(target=name, **kwargs) diff --git a/pproc-runtime/tests/conftest.py b/pproc-runtime/tests/conftest.py index 2170cef9..a218e933 100644 --- a/pproc-runtime/tests/conftest.py +++ b/pproc-runtime/tests/conftest.py @@ -39,10 +39,11 @@ def download_test_data( local_files.append(local_file_path) return local_files + download_test_data( [ "test_2t_12.grib", ], f"{NEXUS}", f"{DATA_DIR}", -) \ No newline at end of file +) diff --git a/pproc/src/pproc/config_generation.py b/pproc/src/pproc/config_generation.py index b5b64ece..d4751ae4 100644 --- a/pproc/src/pproc/config_generation.py +++ b/pproc/src/pproc/config_generation.py @@ -16,7 +16,7 @@ import yaml import json -from ppcore.schema import Schema +from ppcore.schema.schema import Schema from pproc.config.factory import ConfigFactory from pproc.common import mars diff --git a/pproc/tests/templates/v3/prob.yaml b/pproc/tests/templates/v3/prob.yaml new file mode 100644 index 00000000..066a1b33 --- /dev/null +++ b/pproc/tests/templates/v3/prob.yaml @@ -0,0 +1,159 @@ +log: + level: INFO + format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' +execution: + hosts: 1 + workers: 1 +products: +- name: ensemble + preprocessing: + actions: [] + accumulations: + step: + operation: min + coords: + - - 12 + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + deaccumulate: false + statistics: + metadata: + paramId: 131073 + stream: enfo + type: ep + operation: threshold_probability + thresholds: + - lower_scale_factor: 2 + lower_comparison: <= + lower_value: 273.15 + upper_scale_factor: 0 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: cf + date: '20240507' + time: '1200' + param: '167' + step: 12 + - class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: pf + date: '20240507' + time: '1200' + param: '167' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 12 + dtype: float64 + output: + targets: + - name: fdb + request: + class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: ep + date: 20240507 + time: 12 + param: 131073 + step: 12 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: + step: + operation: min + coords: + - 24 + - 36 + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + deaccumulate: false + name: + type: default + length: 24 + statistics: + metadata: + paramId: 131073 + stream: enfo + type: ep + operation: threshold_probability + thresholds: + - lower_scale_factor: 2 + lower_comparison: <= + lower_value: 273.15 + upper_scale_factor: 0 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: cf + date: '20240507' + time: '1200' + param: '167' + step: + - 24 + - 36 + - class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: pf + date: '20240507' + time: '1200' + param: '167' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: + - 24 + - 36 + dtype: float64 + output: + targets: + - name: fdb + request: + class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: ep + date: 20240507 + time: 12 + param: 131073 + step: 12-36 + metadata: {} +input_overrides: {} +output_overrides: {} diff --git a/pproc/tests/templates/v3/quantiles.yaml b/pproc/tests/templates/v3/quantiles.yaml new file mode 100644 index 00000000..6a337172 --- /dev/null +++ b/pproc/tests/templates/v3/quantiles.yaml @@ -0,0 +1,1209 @@ +log: + level: INFO + format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' +execution: + hosts: 1 + workers: 1 +products: +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: 0:3 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 12 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 12 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 12 + quantile: 0:3 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '1:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 12 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 12 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 12 + quantile: '1:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '2:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 12 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 12 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 12 + quantile: '2:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '3:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 12 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 12 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 12 + quantile: '3:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: 0:3 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 18 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 18 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 18 + quantile: 0:3 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '1:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 18 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 18 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 18 + quantile: '1:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '2:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 18 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 18 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 18 + quantile: '2:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '3:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 18 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 18 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 18 + quantile: '3:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: 0:3 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 24 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 24 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 24 + quantile: 0:3 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '1:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 24 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 24 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 24 + quantile: '1:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '2:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 24 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 24 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 24 + quantile: '2:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '3:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 24 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 24 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 24 + quantile: '3:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: 0:3 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 30 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 30 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 30 + quantile: 0:3 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '1:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 30 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 30 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 30 + quantile: '1:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '2:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 30 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 30 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 30 + quantile: '2:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '3:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 30 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 30 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 30 + quantile: '3:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: 0:3 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 36 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 36 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 36 + quantile: 0:3 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '1:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 36 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 36 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 36 + quantile: '1:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '2:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 36 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 36 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 36 + quantile: '2:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '3:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 36 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 36 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 36 + quantile: '3:3' + metadata: {} +input_overrides: {} +output_overrides: {} diff --git a/pproc/tests/test_products.py b/pproc/tests/test_products.py index 5a129335..7b355abd 100644 --- a/pproc/tests/test_products.py +++ b/pproc/tests/test_products.py @@ -192,10 +192,23 @@ def test_products_v2(tmpdir, monkeypatch, fdb, product, main, custom_args, req, {"type": "em", "param": 167, "step": [12, 36]}, 2, ], + [ + "prob", + {"type": "ep", "param": 131073, "step": ["12", "12-36"]}, + 2, + ], + [ + "quantiles", + { + "type": "pb", + "param": 167, + "step": [12, 18, 24, 30, 36], + "quantile": ["{}:3".format(x) for x in range(4)], + }, + 20, + ], ], - ids=[ - "ensms", - ], + ids=["ensms", "prob", "quantiles"], ) def test_products_v3(tmpdir, monkeypatch, fdb, product, req, length): monkeypatch.chdir(tmpdir) # To avoid polluting cwd with grib templates From b99a7760deb794e4a43b2afe50d9359b6146274f Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 23 Jun 2026 15:47:21 +0000 Subject: [PATCH 22/95] Bug fix --- pproc-runtime/src/ppruntime/io.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pproc-runtime/src/ppruntime/io.py b/pproc-runtime/src/ppruntime/io.py index 24af7806..d17e00b6 100644 --- a/pproc-runtime/src/ppruntime/io.py +++ b/pproc-runtime/src/ppruntime/io.py @@ -176,5 +176,5 @@ def write(data: FieldList, name: str, **kwargs): if name == "null": return - with ResourceMeter(f"Write {data.ls(namespace="mars")} to {name}"): + with ResourceMeter(f"Write {data.ls(namespace='mars')} to {name}"): data.to_target(target=name, **kwargs) From 2773af768d12b6253039f4edb28d8f9197ac4c6e Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 24 Jun 2026 09:50:33 +0000 Subject: [PATCH 23/95] Support difference_rate accumulation --- .../workflows/plugins/pproc/fluent.py | 31 +- .../src/ppcore/configs/common/accumulation.py | 114 ++++-- pproc-core/src/ppcore/configs/common/input.py | 18 +- .../src/ppcore/configs/common/output.py | 17 +- .../ppcore/configs/common/preprocessing.py | 11 +- .../src/ppcore/configs/common/source.py | 9 +- .../src/ppcore/configs/common/target.py | 9 +- .../src/ppcore/configs/product/ensemble.py | 7 +- pproc-core/src/ppcore/products/ensemble.py | 3 +- pproc-core/tests/schema.yaml | 363 +++++++++++------- pproc-runtime/src/ppruntime/accumulation.py | 11 + pproc-runtime/src/ppruntime/stats.py | 31 +- pproc-runtime/src/ppruntime/utils.py | 31 ++ pproc/tests/templates/v3/prob.yaml | 14 +- 14 files changed, 430 insertions(+), 239 deletions(-) create mode 100644 pproc-runtime/src/ppruntime/accumulation.py create mode 100644 pproc-runtime/src/ppruntime/utils.py diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 069683d5..205afda4 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -245,8 +245,7 @@ def multiply( ) -> "Action": return super().multiply(other, backend_kwargs={"metadata": metadata}) - def scale(self, value: float, metadata: dict | None = None) -> "Action": - return super().multiply(value, backend_kwargs={"metadata": metadata}) + scale = multiply def power(self, other: "Action | float", metadata: dict | None = None) -> "Action": return super().power(other, backend_kwargs={"metadata": metadata}) @@ -453,7 +452,13 @@ def _wrapped_reduction( **kwargs, ) -> "Action": if operation is None: - return self + if metadata is None: + return self + return self.map( + fluent.Payload( + FieldListBackend.set_metadata, [fluent.Node.input_name(0), metadata] + ) + ) if isinstance(operation, str): if hasattr(self, operation): op = getattr(self, operation) @@ -604,7 +609,7 @@ def ensemble_statistics( def accumulation( self, - operation: str | fluent.Payload, + operation: Optional[str | fluent.Payload], coords: list[Coords], dim: str = "step", batch_size: int = 0, @@ -638,7 +643,13 @@ def accumulation( """ if operation is None: self._squeeze_dimension(dim) - return self + if metadata is None: + return self + return self.map( + fluent.Payload( + FieldListBackend.set_metadata, [fluent.Node.input_name(0), metadata] + ) + ) params = [ ( @@ -745,17 +756,15 @@ def _accum_transform( name: Union[Default, Monthly, dict] = Default(), kwargs: dict = {}, ) -> fluent.Action: - if len(coords) == 1: - # Nothing to reduce and no metadata to set - if dim not in nodetree_dimensions(action.nodes): - return action - return action.select({dim: coords}) if deaccumulate: accum_action = action.select({dim: coords[:-1]}) accum_action = accum_action.subtract(action.select({dim: coords[1:]})) else: - accum_action = action.select({dim: coords}) + if len(coords) == 1 and dim not in nodetree_dimensions(action.nodes): + accum_action = action + else: + accum_action = action.select({dim: coords}) if isinstance(name, dict): name = Default(**name) if name.get("type_") == "default" else Monthly(**name) diff --git a/pproc-core/src/ppcore/configs/common/accumulation.py b/pproc-core/src/ppcore/configs/common/accumulation.py index ad2eabfe..7cfcd467 100644 --- a/pproc-core/src/ppcore/configs/common/accumulation.py +++ b/pproc-core/src/ppcore/configs/common/accumulation.py @@ -1,6 +1,6 @@ from typing import Optional, Union, Literal, Annotated, Any -from pydantic import Field, field_validator, model_validator +from pydantic import Discriminator, Field, Tag, field_validator, model_validator from earthkit.workflows.plugins.pproc.config.accumulation import ( Default, @@ -8,18 +8,17 @@ ) from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel +Coords = Union[list[str], list[int]] -class Accumulation(PProcBaseModel): - operation: Optional[Literal["min", "max", "mean", "std", "add", "diff"]] = None - coords: list[Union[list[int], list[str]]] + +class BaseAccumulation(PProcBaseModel): + coords: list[Coords] metadata: Optional[dict] = None deaccumulate: bool = False - name: Optional[ - Annotated[ - Union[Default, Monthly], - Field(discriminator="type_"), - ] - ] = None + name: Annotated[ + Union[Default, Monthly], + Field(discriminator="type_", default_factory=Default), + ] @model_validator(mode="before") def validate_config(cls, data: Any) -> Any: @@ -28,20 +27,6 @@ def validate_config(cls, data: Any) -> Any: data.pop("type", None) return data - @field_validator("operation", mode="before") - @classmethod - def validate_operation(cls, operation: str) -> Optional[str]: - OPS = { - "aggregation": None, - "difference": "diff", - "maximum": "max", - "minimum": "min", - "mean": "mean", - "standard_deviation": "std", - "sum": "add", - } - return OPS.get(operation, operation) - @field_validator("coords", mode="before") @classmethod def validate_coords(cls, values: Any) -> list[Union[list[int], list[str]]]: @@ -50,3 +35,84 @@ def validate_coords(cls, values: Any) -> list[Union[list[int], list[str]]]: if isinstance(values, list) and all(isinstance(v, (str, int)) for v in values): return [values] return values + + +class NullAccumulation(BaseAccumulation): + operation: Literal["aggregation"] = "aggregation" + payload: None = None + + +class MinAccumulation(BaseAccumulation): + operation: Literal["minimum"] = "minimum" + payload: Literal["min"] = "min" + + +class MaxAccumulation(BaseAccumulation): + operation: Literal["maximum"] = "minimum" + payload: Literal["max"] = "max" + + +class MeanAccumulation(BaseAccumulation): + operation: Literal["mean"] = "mean" + payload: Literal["mean"] = "mean" + + +class StdAccumulation(BaseAccumulation): + operation: Literal["standard_deviation"] = "standard_deviation" + payload: Literal["std"] = "std" + + +class SumAccumulation(BaseAccumulation): + operation: Literal["sum"] = "sum" + payload: Literal["sum"] = "sum" + + +class DifferenceAccumulation(BaseAccumulation): + operation: Literal["difference"] = "difference" + payload: None = None + deaccumulate: bool = Field(True, frozen=True) + + @field_validator("coords", mode="after") + @classmethod + def validate_num_coords(cls, coords: Coords) -> Coords: + if any([len(coord) > 2 for coord in coords]): + raise ValueError("difference accumulation accepts only 1 or 2 coordinates") + return coords + + +class DifferenceRateAccumulation(BaseAccumulation): + operation: Literal["difference_rate"] = "difference_rate" + payload: Literal["ppruntime.accumulation.difference_rate"] = ( + "ppruntime.accumulation.difference_rate" + ) + factor: float = 1.0 + + @field_validator("coords", mode="after") + @classmethod + def validate_num_coords(cls, coords: Coords) -> Coords: + if any([len(coord) > 2 for coord in coords]): + raise ValueError( + "difference_rate accumulation accepts only 1 or 2 coordinates" + ) + return coords + + +def accum_discriminator(data: Any) -> str: + if isinstance(data, dict): + return data.get("operation", "aggregation") + return data.operation + + +Accumulation = Annotated[ + Union[ + Annotated[NullAccumulation, Tag("aggregation")], + Annotated[MinAccumulation, Tag("minimum")], + Annotated[MaxAccumulation, Tag("maximum")], + Annotated[MeanAccumulation, Tag("mean")], + Annotated[StdAccumulation, Tag("standard_deviation")], + Annotated[SumAccumulation, Tag("sum")], + Annotated[DifferenceAccumulation, Tag("difference")], + Annotated[DifferenceRateAccumulation, Tag("difference_rate")], + ], + Discriminator(accum_discriminator), +] diff --git a/pproc-core/src/ppcore/configs/common/input.py b/pproc-core/src/ppcore/configs/common/input.py index 97a773b0..5c3bf06d 100644 --- a/pproc-core/src/ppcore/configs/common/input.py +++ b/pproc-core/src/ppcore/configs/common/input.py @@ -7,31 +7,19 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Any, ClassVar, Union +from typing import Any, ClassVar -from annotated_types import Annotated from pydantic import ( - Field, create_model, field_validator, ) from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel -from ppcore.configs.common.source import ( - FDBSource, - FilePatternSource, - FileSource, - MARSSource, -) +from ppcore.configs.common.source import Source, FDBSource from ppcore.utils.io import split_location class Input(PProcBaseModel): - sources: list[ - Annotated[ - Union[FileSource, FilePatternSource, FDBSource, MARSSource], - Field(discriminator="name"), - ] - ] = [FDBSource()] + sources: list[Source] = [FDBSource()] requests: list[dict] = [] dtype: str = "float32" diff --git a/pproc-core/src/ppcore/configs/common/output.py b/pproc-core/src/ppcore/configs/common/output.py index 4b473fb0..8a614b06 100644 --- a/pproc-core/src/ppcore/configs/common/output.py +++ b/pproc-core/src/ppcore/configs/common/output.py @@ -9,30 +9,17 @@ from typing import Any, ClassVar, Union -from annotated_types import Annotated from pydantic import ( - Field, create_model, field_validator, ) from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.utils.io import split_location -from ppcore.configs.common.target import ( - NullTarget, - FileTarget, - FilePatternTarget, - FDBTarget, - ZarrTarget, -) +from ppcore.configs.common.target import Target class Output(PProcBaseModel): - targets: list[ - Annotated[ - Union[FileTarget, FilePatternTarget, FDBTarget, NullTarget, ZarrTarget], - Field(discriminator="name"), - ] - ] = [] + targets: list[Target] = [] request: dict metadata: dict = {} diff --git a/pproc-core/src/ppcore/configs/common/preprocessing.py b/pproc-core/src/ppcore/configs/common/preprocessing.py index 72641050..57785040 100644 --- a/pproc-core/src/ppcore/configs/common/preprocessing.py +++ b/pproc-core/src/ppcore/configs/common/preprocessing.py @@ -26,13 +26,20 @@ class Preprocessing(PProcBaseModel, ABC): metadata: Optional[dict] = None -class Scaling(Preprocessing): +class Scale(Preprocessing): # - operation: scale # value: 3600 operation: Literal["scale"] = "scale" value: Union[float, int] +class Divide(Preprocessing): + # - operation: divide + # value: 3600 + operation: Literal["divide"] = "divide" + value: Union[float, int] + + class Combination(Preprocessing): # - operation: norm operation: Literal["direction", "norm", "sum"] @@ -71,7 +78,7 @@ class PreprocessingConfig(PProcBaseModel): # value: 3600 actions: List[ Annotated[ - Union[Scaling, Combination, Masking], + Union[Scale, Divide, Combination, Masking], Field(discriminator="operation"), ] ] = Field(default_factory=list) diff --git a/pproc-core/src/ppcore/configs/common/source.py b/pproc-core/src/ppcore/configs/common/source.py index f98fce83..a5c14ba1 100644 --- a/pproc-core/src/ppcore/configs/common/source.py +++ b/pproc-core/src/ppcore/configs/common/source.py @@ -1,4 +1,5 @@ -from typing import Optional, Literal +from typing import Optional, Literal, Annotated, Union +from pydantic import Field from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel @@ -22,3 +23,9 @@ class FilePatternSource(PProcBaseModel): name: Literal["file-pattern"] = "file-pattern" pattern: str hive_partitioning: bool = True + + +Source = Annotated[ + Union[FileSource, FilePatternSource, FDBSource, MARSSource], + Field(discriminator="name"), +] diff --git a/pproc-core/src/ppcore/configs/common/target.py b/pproc-core/src/ppcore/configs/common/target.py index 08a8d28a..ac1bda54 100644 --- a/pproc-core/src/ppcore/configs/common/target.py +++ b/pproc-core/src/ppcore/configs/common/target.py @@ -8,7 +8,8 @@ # nor does it submit to any jurisdiction. -from typing import Literal, Optional +from typing import Literal, Optional, Annotated, Union +from pydantic import Field from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel @@ -38,3 +39,9 @@ class ZarrTarget(PProcBaseModel): name: Literal["zarr"] = "zarr" earthkit_to_xarray_kwargs: Optional[dict] = None xarray_to_zarr_kwargs: Optional[dict] = None + + +Target = Annotated[ + Union[FileTarget, FilePatternTarget, FDBTarget, NullTarget, ZarrTarget], + Field(discriminator="name"), +] diff --git a/pproc-core/src/ppcore/configs/product/ensemble.py b/pproc-core/src/ppcore/configs/product/ensemble.py index 496f3f64..8aef38dc 100644 --- a/pproc-core/src/ppcore/configs/product/ensemble.py +++ b/pproc-core/src/ppcore/configs/product/ensemble.py @@ -7,7 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Any, Optional, Union, Literal +from typing import Any, Optional, Union, Literal, Annotated from pydantic import Field, model_validator from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel @@ -31,7 +31,10 @@ class Ensemble(PProcBaseModel): name: Literal["ensemble"] = Field("ensemble") preprocessing: PreprocessingConfig = Field(default_factory=PreprocessingConfig) accumulations: dict[str, Accumulation] = Field(default_factory=dict) - statistics: Union[Mean, StandardDeviation, Quantiles, ThresholdProbability] + statistics: Annotated[ + Union[Mean, StandardDeviation, Quantiles, ThresholdProbability], + Field(discriminator="operation"), + ] inputs: Optional[EnsembleInputModel] = None output: Optional[Output] = None diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index 657c26a2..a8730e72 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -68,7 +68,8 @@ def action( for dim, accumulation in self.config.accumulations.items(): ret = ret.accumulation( dim=dim, - **accumulation.model_dump(), + operation=accumulation.payload, + **accumulation.model_dump(exclude={"operation", "payload"}), ) ret = ret.ensemble_statistics( dim=ensemble_dim or self.ensemble_dim, diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index f50966c4..57fda5a4 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -355,11 +355,9 @@ config: instantaneous: accumulations: step: - type: legacywindow range: accumulations: step: - type: legacywindow name: type: default length: "{steplength}:int" @@ -369,8 +367,6 @@ config: step: operation: difference metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 timeRangeIndicator: 5 stepType: diff "131098/131099/131085": @@ -378,23 +374,14 @@ config: step: operation: difference metadata: - localDefinitionNumber: 5 stepType: "accum" stepRange: "0-0" - edition: 2 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 12 - packingType: "grid_ccsds" - bitsPerValue: 8 "131065/131066/131067": accumulations: step: operation: difference_rate factor: 0.041666666666666664 metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 timeRangeIndicator: 5 stepType: diff "131068/131069": @@ -403,37 +390,18 @@ config: accumulations: step: operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 "131070/131071/131072/131074/131075/131076/131077/131078/131079/131080/131081": accumulations: step: operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 "131073": accumulations: step: operation: minimum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 "131100": accumulations: step: operation: maximum - metadata: - localDefinitionNumber: 5 - edition: 2 - productDefinitionTemplateNumber: 9 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 12 - typeOfTimeIncrement: 2 - packingType: "grid_ccsds" - bitsPerValue: 8 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: config: anomaly filter:param: @@ -441,255 +409,313 @@ config: accumulations: step: operation: "mean" - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 "131022/131023": accumulations: step: operation: minimum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 "131024/131025": accumulations: step: operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 "133093/133094/133095": accumulations: step: operation: maximum std_anomaly: true - metadata: - localDefinitionNumber: 30 - edition: 2 - productDefinitionTemplateNumber: 9 - oceanAtmosphereCoupling: 2 - legBaseDate: "{date}:int" - legBaseTime: "{time}:int" - legNumber: 1 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: "grid_ccsds" - bitsPerValue: 24 "133096/133097/133098": accumulations: step: operation: minimum std_anomaly: true - metadata: - localDefinitionNumber: 30 - edition: 2 - productDefinitionTemplateNumber: 9 - oceanAtmosphereCoupling: 2 - legBaseDate: "{date}:int" - legBaseTime: "{time}:int" - legNumber: 1 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: "grid_ccsds" - bitsPerValue: 24 - "260290": - statistics: - metadata: - edition: 2 - productDefinitionTemplateNumber: 5 - typeOfGeneratingProcess: 5 + "260290": {} filter:selection: "default": filter:param: - "131060": + "131020": statistics: threshold: - comparison: ">=" - value: 0.001 - scale_factor: 3 - "131061": + comparison: "<" + value: -2 + metadata: + bitsPerValue: 24 + "131021": statistics: threshold: comparison: ">=" - value: 0.005 - scale_factor: 3 - "131062": + value: 2 + metadata: + bitsPerValue: 24 + "131022": statistics: threshold: - comparison: ">=" - value: 0.01 - scale_factor: 3 - "131063": + comparison: "<" + value: -8 + metadata: + bitsPerValue: 24 + "131023": + statistics: + threshold: + comparison: "<" + value: -4 + metadata: + bitsPerValue: 24 + "131024": + statistics: + threshold: + comparison: ">" + value: 4 + metadata: + bitsPerValue: 24 + "131025": + statistics: + threshold: + comparison: ">" + value: 8 + metadata: + bitsPerValue: 24 + "131060": statistics: threshold: comparison: ">=" - value: 0.02 + value: 0.001 scale_factor: 3 - "131098": + metadata: + bitsPerValue: 8 + "131061": statistics: threshold: comparison: ">=" - value: 0.025 + value: 0.005 scale_factor: 3 metadata: - scaleFactorOfLowerLimit: 0 - "131099": + bitsPerValue: 8 + "131062": statistics: threshold: comparison: ">=" - value: 0.05 + value: 0.01 scale_factor: 3 metadata: - scaleFactorOfLowerLimit: 0 - "131085": + bitsPerValue: 8 + "131063": statistics: threshold: comparison: ">=" - value: 0.1 + value: 0.02 scale_factor: 3 metadata: - scaleFactorOfLowerLimit: 0 + bitsPerValue: 8 "131064": statistics: threshold: comparison: '<' value: 0.0001 scale_factor: 4 + metadata: + bitsPerValue: 8 "131065": statistics: threshold: comparison: '<' value: 0.001 scale_factor: 4 + metadata: + bitsPerValue: 8 "131066": statistics: threshold: comparison: '>=' value: 0.003 scale_factor: 4 + metadata: + bitsPerValue: 8 "131067": statistics: threshold: comparison: '>=' value: 0.005 scale_factor: 4 + metadata: + bitsPerValue: 8 "131068": statistics: threshold: comparison: ">=" value: 10 + metadata: + bitsPerValue: 8 "131069": statistics: threshold: comparison: ">=" value: 15 + metadata: + bitsPerValue: 8 "131070": statistics: threshold: comparison: ">=" value: 15 + metadata: + bitsPerValue: 8 "131071": statistics: threshold: comparison: ">=" value: 20 + metadata: + bitsPerValue: 8 "131072": statistics: threshold: comparison: ">=" value: 25 - "131100": + metadata: + bitsPerValue: 8 + "131073": statistics: threshold: - comparison: ">=" - value: 10 + comparison: "<=" + value: 273.15 + scale_factor: 2 + metadata: + bitsPerValue: 8 "131074": statistics: threshold: comparison: ">=" value: 2 + metadata: + bitsPerValue: 8 "131075": statistics: threshold: comparison: ">=" value: 4 + metadata: + bitsPerValue: 8 "131076": statistics: threshold: comparison: ">=" value: 6 + metadata: + bitsPerValue: 8 "131077": statistics: threshold: comparison: ">=" value: 8 + metadata: + bitsPerValue: 8 "131078": statistics: threshold: comparison: ">=" value: 8 + metadata: + bitsPerValue: 8 "131079": statistics: threshold: comparison: ">=" value: 10 + metadata: + bitsPerValue: 8 "131080": statistics: threshold: comparison: ">=" value: 12 + metadata: + bitsPerValue: 8 "131081": statistics: threshold: comparison: ">=" value: 15 - "131073": - statistics: - threshold: - comparison: "<=" - value: 273.15 - scale_factor: 2 - "131020": - statistics: - threshold: - comparison: "<" - value: -2 - "131021": + metadata: + bitsPerValue: 8 + "131085": statistics: threshold: comparison: ">=" - value: 2 - "131022": - statistics: - threshold: - comparison: "<" - value: -8 - "131023": + value: 0.1 + scale_factor: 3 + metadata: + localDefinitionNumber: 5 + edition: 2 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 12 + packingType: "grid_ccsds" + bitsPerValue: 8 + scaleFactorOfLowerLimit: 0 + "131098": statistics: threshold: - comparison: "<" - value: -4 - "131024": + comparison: ">=" + value: 0.025 + scale_factor: 3 + metadata: + localDefinitionNumber: 5 + edition: 2 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 12 + packingType: "grid_ccsds" + bitsPerValue: 8 + scaleFactorOfLowerLimit: 0 + "131099": statistics: threshold: - comparison: ">" - value: 4 - "131025": + comparison: ">=" + value: 0.05 + scale_factor: 3 + metadata: + localDefinitionNumber: 5 + edition: 2 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 12 + packingType: "grid_ccsds" + bitsPerValue: 8 + scaleFactorOfLowerLimit: 0 + "131100": statistics: threshold: - comparison: ">" - value: 8 + comparison: ">=" + value: 10 + metadata: + localDefinitionNumber: 5 + edition: 2 + productDefinitionTemplateNumber: 9 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 12 + typeOfTimeIncrement: 2 + packingType: "grid_ccsds" + bitsPerValue: 8 "133093": statistics: threshold: comparison: '>' value: 1 + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 "133094": statistics: threshold: @@ -697,18 +723,62 @@ config: value: 1.5 scale_factor: 1 metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 scaleFactorOfLowerLimit: 1 "133095": statistics: threshold: comparison: '>' value: 2 + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 "133096": statistics: threshold: comparison: '<' value: -1 limit_type: lower + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 "133097": statistics: threshold: @@ -717,6 +787,20 @@ config: scale_factor: 1 limit_type: lower metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 scaleFactorOfLowerLimit: 1 "133098": statistics: @@ -724,6 +808,21 @@ config: comparison: '<' value: -2 limit_type: lower + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + oceanAtmosphereCoupling: 2 + legBaseDate: "{date}:int" + legBaseTime: "{time}:int" + legNumber: 1 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 "eccharts": filter:param: statistics: @@ -732,9 +831,15 @@ config: comparison: ">=" value: "{threshold}:float" scale_factor: 3 + metadata: + bitsPerValue: 8 "260290": statistics: threshold: "{threshold}" + metadata: + edition: 2 + productDefinitionTemplateNumber: 5 + typeOfGeneratingProcess: 5 fcmean: filter:param: 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: diff --git a/pproc-runtime/src/ppruntime/accumulation.py b/pproc-runtime/src/ppruntime/accumulation.py new file mode 100644 index 00000000..11d65c18 --- /dev/null +++ b/pproc-runtime/src/ppruntime/accumulation.py @@ -0,0 +1,11 @@ +from earthkit.data import FieldList + +from ppruntime.utils import new_fieldlist + +def difference_rate(*fields, factor: float = 1.0) -> FieldList: + values = fields[-1].values + length = fields[-1].metadata()["step"] + if len(fields) != 1: + values = values - fields[0].values + length = length - fields[0].metadata()["step"] + return new_fieldlist(values / (factor * length), [fields[-1].metadata()]) \ No newline at end of file diff --git a/pproc-runtime/src/ppruntime/stats.py b/pproc-runtime/src/ppruntime/stats.py index bf69fad5..e5e716f9 100644 --- a/pproc-runtime/src/ppruntime/stats.py +++ b/pproc-runtime/src/ppruntime/stats.py @@ -11,13 +11,13 @@ from typing import Optional, Literal import array_api_compat from earthkit.data import FieldList -from earthkit.data.core.metadata import Metadata as ekdMetadata from earthkit.meteo.extreme import array as extreme from earthkit.meteo.stats import array as stats from meters import metered from ppruntime.metadata import resolve_metadata from ppruntime import metadata as ppmetadata +from ppruntime.utils import new_fieldlist logger = logging.getLogger(__name__) @@ -26,14 +26,6 @@ Comparisons = Literal["<", ">", "<=", ">=", "==", "!="] -def standardise_output(data): - # Also, nest the data to avoid problems with not finding geography attribute - if len(data.shape) == 1: - data = data.reshape((1, *data.shape)) - assert len(data.shape) == 2 - return data - - def comp_str2func(array_module, comparison: str): if comparison == "<=": return array_module.less_equal @@ -44,27 +36,6 @@ def comp_str2func(array_module, comparison: str): return array_module.greater -def new_fieldlist(data, metadata: list[ekdMetadata], overrides: dict = {}): - if len(overrides) > 0: - try: - new_metadata = [ - metadata[x].override(overrides) for x in range(len(metadata)) - ] - return FieldList.from_array( - standardise_output(data), - new_metadata, - ) - except Exception as e: - print( - "Error setting metadata", - overrides, - "On data with:", - list(map(lambda x: x.dump(), metadata)), - ) - print(e) - return FieldList.from_array(standardise_output(data), metadata) - - @metered("mask", out=logger.debug) def mask( arr: FieldList, diff --git a/pproc-runtime/src/ppruntime/utils.py b/pproc-runtime/src/ppruntime/utils.py new file mode 100644 index 00000000..6448ff98 --- /dev/null +++ b/pproc-runtime/src/ppruntime/utils.py @@ -0,0 +1,31 @@ +from earthkit.data import FieldList +from earthkit.data.core.metadata import Metadata as ekdMetadata + + +def standardise_output(data): + # Also, nest the data to avoid problems with not finding geography attribute + if len(data.shape) == 1: + data = data.reshape((1, *data.shape)) + assert len(data.shape) == 2 + return data + + +def new_fieldlist(data, metadata: list[ekdMetadata], overrides: dict = {}): + if len(overrides) > 0: + try: + new_metadata = [ + metadata[x].override(overrides) for x in range(len(metadata)) + ] + return FieldList.from_array( + standardise_output(data), + new_metadata, + ) + except Exception as e: + print( + "Error setting metadata", + overrides, + "On data with:", + list(map(lambda x: x.dump(), metadata)), + ) + print(e) + return FieldList.from_array(standardise_output(data), metadata) \ No newline at end of file diff --git a/pproc/tests/templates/v3/prob.yaml b/pproc/tests/templates/v3/prob.yaml index 066a1b33..77ffd86b 100644 --- a/pproc/tests/templates/v3/prob.yaml +++ b/pproc/tests/templates/v3/prob.yaml @@ -10,15 +10,14 @@ products: actions: [] accumulations: step: - operation: min + operation: minimum coords: - - 12 - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 deaccumulate: false statistics: metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 paramId: 131073 stream: enfo type: ep @@ -81,19 +80,18 @@ products: actions: [] accumulations: step: - operation: min + operation: minimum coords: - 24 - 36 - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 deaccumulate: false name: type: default length: 24 statistics: metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 paramId: 131073 stream: enfo type: ep From de0358ba34ae671cf2637776b0348e7c4afd6bfd Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 24 Jun 2026 12:24:13 +0000 Subject: [PATCH 24/95] Add metadata argument to difference_rate --- pproc-runtime/src/ppruntime/accumulation.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pproc-runtime/src/ppruntime/accumulation.py b/pproc-runtime/src/ppruntime/accumulation.py index 11d65c18..1b3afb95 100644 --- a/pproc-runtime/src/ppruntime/accumulation.py +++ b/pproc-runtime/src/ppruntime/accumulation.py @@ -2,10 +2,11 @@ from ppruntime.utils import new_fieldlist -def difference_rate(*fields, factor: float = 1.0) -> FieldList: + +def difference_rate(*fields, factor: float = 1.0, metadata: dict) -> FieldList: values = fields[-1].values length = fields[-1].metadata()["step"] if len(fields) != 1: - values = values - fields[0].values + values = values - fields[0].values length = length - fields[0].metadata()["step"] - return new_fieldlist(values / (factor * length), [fields[-1].metadata()]) \ No newline at end of file + return new_fieldlist(values / (factor * length), [fields[-1].metadata()], metadata) \ No newline at end of file From 326ca5d9e8dc4a6dce5a5b84da61e6ef929a152f Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 24 Jun 2026 13:24:09 +0000 Subject: [PATCH 25/95] Add test for difference_rate --- pproc-runtime/src/ppruntime/accumulation.py | 12 +++++++---- pproc-runtime/src/ppruntime/utils.py | 2 +- pproc-runtime/tests/test_accumulation.py | 22 +++++++++++++++++++++ 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 pproc-runtime/tests/test_accumulation.py diff --git a/pproc-runtime/src/ppruntime/accumulation.py b/pproc-runtime/src/ppruntime/accumulation.py index 1b3afb95..095a3e0c 100644 --- a/pproc-runtime/src/ppruntime/accumulation.py +++ b/pproc-runtime/src/ppruntime/accumulation.py @@ -1,12 +1,16 @@ +import array_api_compat from earthkit.data import FieldList from ppruntime.utils import new_fieldlist -def difference_rate(*fields, factor: float = 1.0, metadata: dict) -> FieldList: +def difference_rate(*fields, factor: float = 1.0, metadata: dict = {}) -> FieldList: + if len(fields) not in [1, 2]: + raise ValueError("difference_rate expects 1 or 2 FieldList arguments") + xp = array_api_compat.array_namespace(fields[-1].values) values = fields[-1].values - length = fields[-1].metadata()["step"] + length = xp.asarray(fields[-1].metadata("step")) if len(fields) != 1: values = values - fields[0].values - length = length - fields[0].metadata()["step"] - return new_fieldlist(values / (factor * length), [fields[-1].metadata()], metadata) \ No newline at end of file + length = length - xp.asarray(fields[0].metadata("step")) + return new_fieldlist(values / (factor * length), fields[-1].metadata(), metadata) diff --git a/pproc-runtime/src/ppruntime/utils.py b/pproc-runtime/src/ppruntime/utils.py index 6448ff98..a9c7b303 100644 --- a/pproc-runtime/src/ppruntime/utils.py +++ b/pproc-runtime/src/ppruntime/utils.py @@ -28,4 +28,4 @@ def new_fieldlist(data, metadata: list[ekdMetadata], overrides: dict = {}): list(map(lambda x: x.dump(), metadata)), ) print(e) - return FieldList.from_array(standardise_output(data), metadata) \ No newline at end of file + return FieldList.from_array(standardise_output(data), metadata) diff --git a/pproc-runtime/tests/test_accumulation.py b/pproc-runtime/tests/test_accumulation.py new file mode 100644 index 00000000..a078a21b --- /dev/null +++ b/pproc-runtime/tests/test_accumulation.py @@ -0,0 +1,22 @@ +import os +import numpy as np + +import earthkit.data +from ppruntime.accumulation import difference_rate + +TEST_DIR = os.path.dirname(os.path.realpath(__file__)) +DATA_DIR = os.path.join(TEST_DIR, "data") + + +def test_difference_rate(): + fl = earthkit.data.from_source("file", os.path.join(DATA_DIR, "test_2t_12.grib")) + fl2 = earthkit.data.FieldList.from_array( + fl.values * 2, [x.override({"step": 24}) for x in fl.metadata()] + ) + single = difference_rate(fl, factor=0.5) + assert np.all(single.values == fl.values / 6) + double = difference_rate( + fl, fl2, factor=0.5, metadata={"stepType": "diff", "stepRange": "12-24"} + ) + assert np.all(double.values == fl.values / 6) + assert double.metadata("stepRange") == ["12-24"] From 286880c794021791f9d5bbb85f4f0ec1cb420abb Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 24 Jun 2026 16:02:26 +0000 Subject: [PATCH 26/95] Fix accumulation --- .../src/earthkit/workflows/plugins/pproc/fluent.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 205afda4..3874e5e0 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -452,6 +452,7 @@ def _wrapped_reduction( **kwargs, ) -> "Action": if operation is None: + self._squeeze_dimension(dim) if metadata is None: return self return self.map( @@ -641,16 +642,6 @@ def accumulation( ------ ValueError if payload function is not batchable and batch_size is not 0 """ - if operation is None: - self._squeeze_dimension(dim) - if metadata is None: - return self - return self.map( - fluent.Payload( - FieldListBackend.set_metadata, [fluent.Node.input_name(0), metadata] - ) - ) - params = [ ( dim, @@ -756,7 +747,6 @@ def _accum_transform( name: Union[Default, Monthly, dict] = Default(), kwargs: dict = {}, ) -> fluent.Action: - if deaccumulate: accum_action = action.select({dim: coords[:-1]}) accum_action = accum_action.subtract(action.select({dim: coords[1:]})) From 9de8853e53f3b567dd6d25239904a883429bf033 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 30 Jun 2026 15:45:41 +0000 Subject: [PATCH 27/95] Add runtime dependencies and fiab requirements --- .../workflows/plugins/pproc/fluent.py | 97 +++++++------- .../src/ppcore/configs/common/accumulation.py | 24 ++++ pproc-core/src/ppcore/configs/common/input.py | 7 +- .../ppcore/configs/common/preprocessing.py | 27 ++-- .../src/ppcore/configs/product/__init__.py | 2 - .../src/ppcore/configs/product/anomaly.py | 120 ------------------ .../src/ppcore/configs/product/ensemble.py | 26 ++-- .../src/ppcore/configs/product/extreme.py | 101 --------------- pproc-core/src/ppcore/products/__init__.py | 26 +++- pproc-core/src/ppcore/products/ensemble.py | 24 +++- pproc-core/src/ppcore/schema/schema.py | 7 + .../tests/ppcore/schema/test_input_schema.py | 8 +- pproc-core/tests/ppcore/schema/test_schema.py | 8 +- pproc-core/tests/schema.yaml | 34 +++-- 14 files changed, 190 insertions(+), 321 deletions(-) delete mode 100644 pproc-core/src/ppcore/configs/product/anomaly.py delete mode 100644 pproc-core/src/ppcore/configs/product/extreme.py diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 3874e5e0..c0f5c451 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -293,7 +293,8 @@ def efi( payload = fluent.Payload( "ppruntime.stats.efi", (fluent.Node.input_name(1), fluent.Node.input_name(0), eps), - {"metadata": metadata}, + kwargs={"metadata": metadata}, + metadata={"environment": ["ppruntime"]}, ) return self.join(climatology, "**datatype**").reduce(payload) @@ -374,13 +375,18 @@ def threshold_probability( threshold.model_dump( exclude=("select", "lower_scale_factor", "upper_scale_factor") ), + metadata={"environment": ["ppruntime"]}, ) ) if combined is None: combined = selected else: combined = combined.join(dim="param").reduce( - "ppruntime.stats.logical_and", dim="param" + fluent.Payload( + "ppruntime.stats.logical_and", + metadata={"environment": ["ppruntime"]}, + ), + dim="param", ) base_threshold = ( @@ -447,20 +453,13 @@ def _wrapped_reduction( self, operation: str | fluent.Payload | None, dim: str, - batch_size: int = 0, - metadata: dict | None = None, **kwargs, ) -> "Action": if operation is None: - self._squeeze_dimension(dim) - if metadata is None: - return self - return self.map( - fluent.Payload( - FieldListBackend.set_metadata, [fluent.Node.input_name(0), metadata] - ) - ) + return self + if isinstance(operation, str): + # operation is fluent method if hasattr(self, operation): op = getattr(self, operation) sig = inspect.signature(op) @@ -469,30 +468,25 @@ def _wrapped_reduction( for p in sig.parameters.values() if p.kind == p.POSITIONAL_OR_KEYWORD ] - if "batch_size" in args: - kwargs["batch_size"] = batch_size if "dim" in args: kwargs["dim"] = dim - return op(metadata=metadata, **kwargs) - if metadata is not None: - kwargs.setdefault("metadata", {}).update(metadata) + return op(**kwargs) + # operation is payload op_function = getattr(FieldListBackend, operation, None) or operation operation = fluent.Payload( op_function, - kwargs=kwargs, ) - return self.reduce(operation, dim=dim, batch_size=batch_size) + # Fallback on applying reduction operation during payload + return self.reduce(operation, dim=dim, **kwargs) def preprocessing( self, operation: str | fluent.Payload | None, dim: str = "param", - batch_size: int = 0, - metadata: dict | None = None, **kwargs, ) -> "Action": """ - Reduction operation across different parameters + Pre-processing operation across different parameters Params ------ @@ -503,7 +497,7 @@ def preprocessing( ------ Action """ - return self._wrapped_reduction(operation, dim, batch_size, metadata, **kwargs) + return self._wrapped_reduction(operation, dim, **kwargs) # TODO: turn this into more general param operation that scans schema to look for # computation method of missing parameters. Or should it be that in the creation of the @@ -531,7 +525,8 @@ def thermal_index( config_metadata if not metadata else {**metadata, **config_metadata} ) ret = selection._wrapped_reduction( - config["operation"], dim=dim, metadata=new_metadata + fluent.Payload(config["operation"], kwargs={"metadata": new_metadata}), + dim=dim, ) return ret @@ -551,16 +546,18 @@ def mask( "ppruntime.stats.mask", (fluent.Node.input_name(0),), {"lower_comparison": mask.comparison, "lower_value": mask.value}, + metadata={"environment": ["ppruntime"]}, ) ) return ( self.sel(select, drop=True) .join(mask_action, dim=dim) ._wrapped_reduction( - FieldListBackend.filter, + fluent.Payload( + FieldListBackend.filter, kwargs={"replacement": replacement} + ), dim=dim, metadata=metadata, - replacement=replacement, ) ) @@ -568,7 +565,6 @@ def ensemble_statistics( self, operation: str | fluent.Payload | None, dim: str = "number", - batch_size: int = 0, metadata: dict | None = None, **kwargs, ) -> "Action": @@ -581,7 +577,6 @@ def ensemble_statistics( ------ operation: str or Payload, operation to perform on ensemble members dim: str, dimension to perform operation along - batch_size: int, size of batches to split reduction into. If 0, computation is not batched Return @@ -604,16 +599,14 @@ def ensemble_statistics( ) break - return self._wrapped_reduction( - operation, dim, batch_size, stat_metadata, **kwargs - ) + kwargs.setdefault("metadata", {}).update(stat_metadata) + return self._wrapped_reduction(operation, dim, **kwargs) def accumulation( self, operation: Optional[str | fluent.Payload], coords: list[Coords], dim: str = "step", - batch_size: int = 0, metadata: dict | None = None, deaccumulate: bool = False, name: Union[Default, Monthly, dict] = Default(), @@ -629,8 +622,6 @@ def accumulation( operation: str or Payload, operation to perform on steps coords: list of values to accumulate over dim: str, dimension to perform operation along - batch_size: int, size of batches to split reduction into. If 0, - computation is not batched metadata: optional dict, metadata to set on the output deaccumulate: bool, whether to deaccumulate consecutive values before accumulation @@ -647,7 +638,6 @@ def accumulation( dim, coord, operation, - batch_size, metadata, deaccumulate, name, @@ -678,6 +668,7 @@ def _write_transform( "ppruntime.io.write", (fluent.Node.input_name(0),), kwargs, + metadata={"environment": ["ppruntime"]}, ) ) @@ -689,7 +680,8 @@ def _sot_transform( fluent.Payload( "ppruntime.stats.sot", (fluent.Node.input_name(1), fluent.Node.input_name(0), number, eps), - {"metadata": metadata}, + kwargs={"metadata": metadata}, + metadata={"environment": ["ppruntime"]}, ) ) new_sot._add_dimension(new_dim, number) @@ -716,7 +708,8 @@ def _efi_window_transform( fluent.Payload( "ppruntime.stats.efi", (fluent.Node.input_name(1), fluent.Node.input_name(0), eps), - {"metadata": metadata}, + kwargs={"metadata": metadata}, + metadata={"environment": ["ppruntime"]}, ), dim="**datatype**", ) @@ -729,7 +722,8 @@ def _quantiles_transform( payload = fluent.Payload( "ppruntime.stats.quantiles", (fluent.Node.input_name(0), q_number, total_number), - {"metadata": metadata}, + kwargs={"metadata": metadata}, + metadata={"environment": ["ppruntime"]}, ) new_quantile = action.map(payload) new_quantile._add_dimension(new_dim, q_number / total_number) @@ -741,7 +735,6 @@ def _accum_transform( dim: str, coords: Coords, operation: str | fluent.Payload, - batch_size: int, metadata: Optional[dict] = None, deaccumulate: bool = False, name: Union[Default, Monthly, dict] = Default(), @@ -761,13 +754,21 @@ def _accum_transform( accum_name = name.name(coords) accum_metadata = accumulation_metadata(dim, coords, accum_name, metadata) - accum_action = accum_action._wrapped_reduction( - operation, - dim=dim, - batch_size=batch_size, - metadata=accum_metadata, - **kwargs, - ) + if operation is None: + accum_action._squeeze_dimension(dim) + if metadata is not None: + accum_action = accum_action.map( + fluent.Payload( + FieldListBackend.set_metadata, [fluent.Node.input_name(0), metadata] + ) + ) + else: + accum_action = accum_action._wrapped_reduction( + operation, + dim=dim, + metadata=accum_metadata, + **kwargs, + ) accum_action._add_dimension(dim, accum_name) @@ -787,7 +788,9 @@ def from_source( payloads = np.empty(tuple(request.dims.values()), dtype=object) for indices, new_request in request.expand(): payloads[indices] = fluent.Payload( - "ppruntime.io.retrieve", [sources, [new_request], dtype] + "ppruntime.io.retrieve", + [sources, [new_request], dtype], + metadata={"environment": ["ppruntime"]}, ) new_action = fluent.from_source( payloads, diff --git a/pproc-core/src/ppcore/configs/common/accumulation.py b/pproc-core/src/ppcore/configs/common/accumulation.py index 7cfcd467..8cf8a687 100644 --- a/pproc-core/src/ppcore/configs/common/accumulation.py +++ b/pproc-core/src/ppcore/configs/common/accumulation.py @@ -2,6 +2,7 @@ from pydantic import Discriminator, Field, Tag, field_validator, model_validator +from earthkit.workflows.fluent import Payload from earthkit.workflows.plugins.pproc.config.accumulation import ( Default, Monthly, @@ -13,6 +14,7 @@ class BaseAccumulation(PProcBaseModel): coords: list[Coords] + payload: Optional[str] = None metadata: Optional[dict] = None deaccumulate: bool = False name: Annotated[ @@ -36,6 +38,15 @@ def validate_coords(cls, values: Any) -> list[Union[list[int], list[str]]]: return [values] return values + def create_action(self) -> dict: + return { + "operation": self.payload, + "coords": self.coords, + "metadata": self.metadata, + "deaccumulate": self.deaccumulate, + "name": self.name, + } + class NullAccumulation(BaseAccumulation): operation: Literal["aggregation"] = "aggregation" @@ -96,6 +107,19 @@ def validate_num_coords(cls, coords: Coords) -> Coords: ) return coords + def create_action(self) -> dict: + return { + "operation": Payload( + self.payload, + kwargs={"factor": self.factor}, + metadata={"environment": ["ppruntime"]}, + ), + "coords": self.coords, + "metadata": self.metadata, + "deaccumulate": self.deaccumulate, + "name": self.name, + } + def accum_discriminator(data: Any) -> str: if isinstance(data, dict): diff --git a/pproc-core/src/ppcore/configs/common/input.py b/pproc-core/src/ppcore/configs/common/input.py index 5c3bf06d..b3ba791b 100644 --- a/pproc-core/src/ppcore/configs/common/input.py +++ b/pproc-core/src/ppcore/configs/common/input.py @@ -14,13 +14,14 @@ field_validator, ) from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel -from ppcore.configs.common.source import Source, FDBSource +from ppcore.configs.common.source import Source from ppcore.utils.io import split_location class Input(PProcBaseModel): - sources: list[Source] = [FDBSource()] - requests: list[dict] = [] + sources: list[Source] = [] + requests: list[dict] + expand_exclude: list[str] = [] dtype: str = "float32" @field_validator("sources", mode="before") diff --git a/pproc-core/src/ppcore/configs/common/preprocessing.py b/pproc-core/src/ppcore/configs/common/preprocessing.py index 57785040..ee791e16 100644 --- a/pproc-core/src/ppcore/configs/common/preprocessing.py +++ b/pproc-core/src/ppcore/configs/common/preprocessing.py @@ -7,7 +7,6 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from abc import ABC from typing import Annotated from typing import Any from typing import List @@ -22,33 +21,32 @@ from earthkit.workflows.plugins.pproc.config.mask import MaskExpression -class Preprocessing(PProcBaseModel, ABC): - metadata: Optional[dict] = None - - -class Scale(Preprocessing): +class Scale(PProcBaseModel): # - operation: scale # value: 3600 operation: Literal["scale"] = "scale" value: Union[float, int] + metadata: Optional[dict] = None -class Divide(Preprocessing): +class Divide(PProcBaseModel): # - operation: divide # value: 3600 operation: Literal["divide"] = "divide" value: Union[float, int] + metadata: Optional[dict] = None -class Combination(Preprocessing): +class Combination(PProcBaseModel): # - operation: norm operation: Literal["direction", "norm", "sum"] + metadata: Optional[dict] = None -# class Reshape(Preprocessing): -# operation: Literal["reshape"] = "reshape" -# shape: Union[int, tuple[int, int]] -# order: Literal["F", "C"] = "F" +class Expand(PProcBaseModel): + operation: Literal["expand"] = "expand" + internal_dim: list[Union[str, list[str], list[int]]] + backend_kwargs: Optional[dict] = None # class Expression(Preprocessing): @@ -58,7 +56,7 @@ class Combination(Preprocessing): # dtype: Optional[str] = None -class Masking(Preprocessing): +class Masking(PProcBaseModel): # - operation: mask # select: {param: 228036} # mask: [{param: 228035, level: 250}, ">=", 10] @@ -66,6 +64,7 @@ class Masking(Preprocessing): mask: MaskExpression select: dict replacement: float = 0.0 + metadata: Optional[dict] = None class PreprocessingConfig(PProcBaseModel): @@ -78,7 +77,7 @@ class PreprocessingConfig(PProcBaseModel): # value: 3600 actions: List[ Annotated[ - Union[Scale, Divide, Combination, Masking], + Union[Scale, Divide, Combination, Masking, Expand], Field(discriminator="operation"), ] ] = Field(default_factory=list) diff --git a/pproc-core/src/ppcore/configs/product/__init__.py b/pproc-core/src/ppcore/configs/product/__init__.py index 1089cbf2..a80acf50 100644 --- a/pproc-core/src/ppcore/configs/product/__init__.py +++ b/pproc-core/src/ppcore/configs/product/__init__.py @@ -22,7 +22,6 @@ def from_schema( schema.pop("name") schema.pop("entrypoint", None) interp_keys = schema.pop("interp_keys", {}) - dtype = schema.pop("dtype", "float32") inputs = copy.deepcopy(schema.pop("inputs")) accums = schema.pop("accumulations", None) @@ -39,7 +38,6 @@ def from_schema( "original": request, "inputs": inputs, }, - "dtype": dtype, "sources": request.pop("sources", None), "targets": request.pop("targets", None), "metadata": metadata, diff --git a/pproc-core/src/ppcore/configs/product/anomaly.py b/pproc-core/src/ppcore/configs/product/anomaly.py deleted file mode 100644 index d2503c8d..00000000 --- a/pproc-core/src/ppcore/configs/product/anomaly.py +++ /dev/null @@ -1,120 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - - -from earthkit.workflows.backends.earthkit import FieldListBackend -from earthkit.workflows.fluent import Payload - -from earthkit.workflows.plugins.pproc.fluent import Action - - -from .ensemble import Ensemble - - -class Anomaly(Ensemble): - @property - def climatology(self) -> list[dict]: - return [x for x in self.inputs if x["type"] in ["em", "es"]] - - @property - def forecast(self) -> list[dict]: - return [x for x in self.inputs if x["type"] not in ["em", "es"]] - - def action( - self, - forecast: Action, - climatology: Action, - preprocessing_dim="param", - ensemble_dim="number", - ) -> Action: - clim_headers = climatology.iselect({"type": 0, "step": 0}, drop=True).map( - Payload( - "ppruntime.metadata.extract", - {"keys": ["climateDateFrom", "climateDateTo", "referenceDate"]}, - ) - ) - action = forecast - for preprocessing in self.preprocessing.actions: - action = action.param_operation( - dim=preprocessing_dim, **preprocessing.model_dump() - ) - action = action.anomaly( - climatology.select({"type": "em"}, drop=True), - climatology.select({"type": "es"}, drop=True), - self.accumulations["step"].get("std_anomaly", False), - ) - for dim, accumulation in self.accumulations.items(): - action = action.accum_operation( - accumulation["operation"], - dim=dim, - coords=[accumulation["coords"]], - metadata=accumulation.get("metadata", None), - include_start=accumulation.get("include_start", False), - deaccumulate=accumulation.get("deaccumulate", False), - ) - stats = action.ensemble_operation( - dim=ensemble_dim, - **self.stats, - ) - if self.stats["metadata"].get("edition", 1) == 1: - return stats - return stats.join(clim_headers, "**datatype**", match_coord_values=True).reduce( - FieldListBackend.set_metadata, dim="**datatype**" - ) - - -# def anomaly( -# output_requests: list[dict], pproc_schema: str, target: str = "null:" -# ) -> Graph: -# """ -# Generate graph for ensemble member anomaly products e.g. threshold probabilities -# for t850. -# Parameters -# ---------- -# output_requests: list[dict], list of dictionaries containing output requests -# pproc_schema: str, path to schema file -# target: str, target and location to write output - -# Returns -# ------- -# Graph -# """ -# total_graph = Graph([]) -# ensemble_dim = "type" -# for req in output_requests: -# config = derive_template(req, pproc_schema) -# forecast = from_source( -# [ -# Request(x, no_expand=("number",)) -# for x in squeeze( -# sum([list(expand(x)) for x in config.forecast], []), -# ["step", "number", "param", "levelist"], -# ) -# ], -# join_key=ensemble_dim, -# backend_kwargs={"stream": True}, -# ) -# climatology = from_source( -# [ -# Request(x) -# for x in squeeze( -# sum([list(expand(x)) for x in config.climatology], []), -# ["type", "step"], -# ) -# ], -# join_key="step", -# ) -# total_graph += ( -# config.action( -# forecast=forecast, climatology=climatology, ensemble_dim=ensemble_dim -# ) -# .write(target) -# .graph() -# ) -# return deduplicate_nodes(total_graph) diff --git a/pproc-core/src/ppcore/configs/product/ensemble.py b/pproc-core/src/ppcore/configs/product/ensemble.py index 8aef38dc..e4ecfd6e 100644 --- a/pproc-core/src/ppcore/configs/product/ensemble.py +++ b/pproc-core/src/ppcore/configs/product/ensemble.py @@ -35,7 +35,7 @@ class Ensemble(PProcBaseModel): Union[Mean, StandardDeviation, Quantiles, ThresholdProbability], Field(discriminator="operation"), ] - inputs: Optional[EnsembleInputModel] = None + inputs: EnsembleInputModel output: Optional[Output] = None @model_validator(mode="before") @@ -43,20 +43,20 @@ def validate_config(cls, data: Any) -> Any: if isinstance(data, dict): if "requests" in data: requests = data.pop("requests") + input_config = data.pop("input", {}) original = requests.pop("original") - dtype = data.pop("dtype", "float32") - if sources := data.pop("sources", None): - if isinstance(sources, dict): - sources = sources["fc"] - if isinstance(sources, str): - sources = [sources] - data["inputs"] = { - "fc": { - "requests": requests.pop("inputs"), - "sources": sources, - "dtype": dtype, - } + sources = data.pop("sources", []) + if isinstance(sources, dict): + sources = sources["fc"] + if isinstance(sources, str): + sources = [sources] + data["inputs"] = { + "fc": { + "requests": requests.pop("inputs"), + "sources": sources, + **input_config, } + } if targets := data.pop("targets", None): data["output"] = { "targets": targets if isinstance(targets, list) else [targets], diff --git a/pproc-core/src/ppcore/configs/product/extreme.py b/pproc-core/src/ppcore/configs/product/extreme.py deleted file mode 100644 index e28834ff..00000000 --- a/pproc-core/src/ppcore/configs/product/extreme.py +++ /dev/null @@ -1,101 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - - -from earthkit.workflows.plugins.pproc.fluent import Action - -from .ensemble import Ensemble - - -class Extreme(Ensemble): - @property - def climatology(self) -> list[dict]: - return [x for x in self.inputs if x["type"] == "cd"] - - @property - def forecast(self) -> list[dict]: - return [x for x in self.inputs if x["type"] != "cd"] - - @property - def step_range(self) -> str: - step_accum = self.accumulations["step"] - if len(step_accum["coords"]) == 1: - return f"{step_accum['coords'][0]}" - return f"{step_accum['coords'][0]}-{step_accum['coords'][-1]}" - - def action( - self, - forecast: Action, - climatology: Action, - preprocessing_dim="param", - ensemble_dim="number", - ) -> Action: - action = forecast - for preprocessing in self.preprocessing.actions: - action = action.param_operation( - dim=preprocessing_dim, **preprocessing.model_dump() - ) - for dim, accumulation in self.accumulations.items(): - action = action.accum_operation( - accumulation["operation"], - dim=dim, - coords=[accumulation["coords"]], - metadata=accumulation.get("metadata", None), - include_start=accumulation.get("include_start", False), - deaccumulate=accumulation.get("deaccumulate", False), - ) - return action.ensemble_extreme( - climatology=climatology, - ensemble_dim=ensemble_dim, - step_ranges=[self.step_range], - **self.stats, - ) - - -# def extreme( -# output_requests: list[dict], pproc_schema: str, target: str = "null:" -# ) -> Graph: -# """ -# Generate graph for EFI/SOT products. -# Parameters -# ---------- -# output_requests: list[dict], list of dictionaries containing output requests -# pproc_schema: str, path to schema file -# target: str, target and location to write output - -# Returns -# ------- -# Graph -# """ -# total_graph = Graph([]) -# ensemble_dim = "type" -# for req in output_requests: -# config = derive_template(req, pproc_schema) -# forecast = from_source( -# [ -# Request(x, no_expand=("number")) -# for x in squeeze( -# sum([list(expand(x)) for x in config.forecast], []), -# ["step", "number", "param", "levelist"], -# ) -# ], -# join_key=ensemble_dim, -# backend_kwargs={"stream": True}, -# ) -# climatology = from_source( -# [Request(x, no_expand=("quantile")) for x in config.climatology] -# ) -# total_graph += ( -# config.action( -# forecast=forecast, climatology=climatology, ensemble_dim=ensemble_dim -# ) -# .write(target) -# .graph() -# ) -# return deduplicate_nodes(total_graph) diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index ed659e73..b8ba8f9d 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -1,6 +1,8 @@ from typing import Optional from earthkit.workflows.graph import Graph, deduplicate_nodes +# from earthkit.workflows.fluent import Action +# from earthkit.workflows.nodetree import combine_by_coords, datacubes from ppcore.utils.requests import expand from ppcore.configs import from_outputs as config_from_outputs @@ -27,6 +29,7 @@ def product_from_config( def product_from_output( request: dict, pproc_schema: str, + inputs: Optional[list[dict]] = None, metadata: Optional[dict] = None, ) -> Product: """ @@ -38,10 +41,31 @@ def product_from_output( raise ValueError( f"Expected a single request after expansion, got {len(requests)}" ) - config = list(config_from_outputs(requests, pproc_schema, metadata=metadata))[0] + config = list( + config_from_outputs(requests, pproc_schema, inputs, metadata=metadata) + )[0] return product_from_config(config) +# def action_from_outputs( +# requests: list[dict], +# pproc_schema: str, +# sources: Optional[Action] = None, +# metadata: Optional[dict] = None, +# ) -> Action: +# inputs = None if sources is None else datacubes(sources) +# nodes = [] +# for request in expand(requests): +# nodes.append( +# product_from_output( +# request, pproc_schema=pproc_schema, inputs=inputs, metadata=metadata +# ) +# .action(forecast=sources) +# .nodes +# ) +# return Action(combine_by_coords(nodes)) + + def graph_from_outputs( requests: list[dict], pproc_schema: str, diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index a8730e72..b34ae498 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -10,6 +10,7 @@ from typing import Optional, Iterator from dataclasses import dataclass +from earthkit.workflows.nodetree import nodetree_dimensions from earthkit.workflows.plugins.pproc.fluent import Action from earthkit.workflows.plugins.pproc.fluent import from_source from earthkit.workflows.plugins.pproc.utils.request import Request @@ -27,13 +28,16 @@ class Ensemble(Product): ensemble_dim: str = "number" def source(self, ensemble_dim: Optional[str] = None) -> Action: - if self.config.inputs is None: - raise ValueError("No inputs provided for ensemble config") input_config = self.config.inputs.fc ensemble_dim = ensemble_dim or self.ensemble_dim + + if len(input_config.sources) == 0: + raise ValueError("No sources provided for ensemble config") action = None for x in [dict(x, **self.input_overrides) for x in input_config.requests]: - req = Request(validate_request(x), no_expand=("number",)) + req = Request( + validate_request(x), no_expand=("number", *input_config.expand_exclude) + ) new_action = from_source( input_config.sources, [req], @@ -59,7 +63,16 @@ def action( preprocessing_dim: Optional[str] = None, ensemble_dim: Optional[str] = None, ) -> Action: - ret = forecast or self.source(ensemble_dim=ensemble_dim) + if forecast: + ret = forecast.sel( + { + key: value + for key, value in self.config.inputs.fc.requests[0].items() + if key in nodetree_dimensions(forecast.nodes) + } + ) + else: + ret = self.source(ensemble_dim=ensemble_dim) for preprocessing in self.config.preprocessing.actions: ret = ret.preprocessing( dim=preprocessing_dim or self.preprocessing_dim, @@ -68,8 +81,7 @@ def action( for dim, accumulation in self.config.accumulations.items(): ret = ret.accumulation( dim=dim, - operation=accumulation.payload, - **accumulation.model_dump(exclude={"operation", "payload"}), + **accumulation.create_action(), ) ret = ret.ensemble_statistics( dim=ensemble_dim or self.ensemble_dim, diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index 464de46d..003f1bbe 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -86,3 +86,10 @@ def config_from_input( input_requests, self.step_schema, output_template=template ): yield self.config_from_output(output, inputs) + + def outputs_from_inputs( + self, + inputs: list[dict], + output_template: Optional[dict] = None, + ) -> Iterator[tuple[dict, list[dict]]]: + return self.param_schema.outputs(inputs, self.step_schema, output_template) diff --git a/pproc-core/tests/ppcore/schema/test_input_schema.py b/pproc-core/tests/ppcore/schema/test_input_schema.py index 2bb73837..c98967da 100644 --- a/pproc-core/tests/ppcore/schema/test_input_schema.py +++ b/pproc-core/tests/ppcore/schema/test_input_schema.py @@ -14,6 +14,7 @@ from ppcore.schema.input import ForecastInput from ppcore.schema.input import InputSchema from ppcore.schema.step import StepSchema +from ppcore.schema.schema import Schema from ppcore.utils.requests import expand from ppcore.utils.requests import update_request @@ -419,11 +420,10 @@ def test_outputs(request, out_type, num_outputs): expanded_inputs = sum( [list(expand(x)) for x in INPUTS[request.node.callspec.id]], [] ) - input_schema = InputSchema(schema("inputs")) - step_schema = StepSchema(schema("windows")) + test_schema = Schema(**schema()) generated = list( - input_schema.outputs( - expanded_inputs, step_schema, output_template={"type": out_type} + test_schema.outputs_from_inputs( + expanded_inputs, output_template={"type": out_type} ) ) assert len(generated) == num_outputs diff --git a/pproc-core/tests/ppcore/schema/test_schema.py b/pproc-core/tests/ppcore/schema/test_schema.py index 1e5f31c2..144906ae 100644 --- a/pproc-core/tests/ppcore/schema/test_schema.py +++ b/pproc-core/tests/ppcore/schema/test_schema.py @@ -171,7 +171,9 @@ "legendre-loader": "shmem", "matrix-loader": "file-io", }, - "dtype": "float64", + "input": { + "dtype": "float64", + }, "statistics": { "metadata": { "bitsPerValue": 16, @@ -446,7 +448,9 @@ def test_schema_from_output(req, config, num_generated): "legendre-loader": "shmem", "matrix-loader": "file-io", }, - "dtype": "float64", + "input": { + "dtype": "float64", + }, "statistics": { "metadata": { "bitsPerValue": 16, diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index 57fda5a4..4138f78e 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -8,11 +8,26 @@ config: filter:param: "*": {} "10": - preprocessing: - - operation: reshape - shape: 2 - - operation: norm - vod2uv: true + filter:type: + em/es/ep/pb: + preprocessing: + - operation: expand + internal_dim: ["param", ["u", "v"]] + backend_kwargs: {"method": "sel"} + - operation: norm + interp_keys: + intgrid: "none" + legendre-loader: "shmem" + matrix-loader: "file-io" + vod2uv: true + input: + expand_exclude: ["param"] + "*": + preprocessing: + - operation: reshape + shape: 2 + - operation: norm + vod2uv: true "131/132": filter:type: taem/taes: {} @@ -166,7 +181,8 @@ config: operation: std filter:stream: enfo/waef/eefo/weef: - dtype: float64 + input: + dtype: float64 statistics: metadata: localDefinitionNumber: 30 @@ -207,7 +223,8 @@ config: metadata: numberOfDaysInClimateSamplingWindow: 7 instantaneous: - dtype: float64 + input: + dtype: float64 statistics: metadata: perturbationNumber: 0 @@ -350,7 +367,8 @@ config: metadata_from_output: ["param", "stream", "date", "type"] statistics: operation: threshold_probability - dtype: float64 + input: + dtype: float64 filter:steptype: instantaneous: accumulations: From 8c7b3ef6103b6887675db0787a77b68498218cfd Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 1 Jul 2026 09:40:22 +0000 Subject: [PATCH 28/95] Add fallback versions --- pproc-core/pyproject.toml | 1 + .../workflows/plugins/pproc/fluent.py | 25 ++++++++++++------- pproc-runtime/pyproject.toml | 1 + 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 849ad8ed..d36728df 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -62,6 +62,7 @@ write_to_template = '''# Do not change! Do not track in version control! __version__ = "{version}" ''' local_scheme = "no-local-version" +fallback_version = "0.0.0" [tool.ruff] lint.ignore = [ "E722", "E731", "E741" ] diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index c0f5c451..01b9595a 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -29,6 +29,13 @@ from earthkit.workflows.plugins.pproc.metadata.accumulation import accumulation_metadata from earthkit.workflows.plugins.pproc.metadata.threshold import threshold_metadata +# TODO: change git url to ppruntime when published in PyPI +ENVIRONMENT = { + "ppruntime": [ + "ppruntime @ git+https://git@github.com/ecmwf/pproc.git@feature/mono-repo#subdirectory=pproc-runtime" + ], +} + class Action(fluent.Action): # TODO: migrate to schema @@ -294,7 +301,7 @@ def efi( "ppruntime.stats.efi", (fluent.Node.input_name(1), fluent.Node.input_name(0), eps), kwargs={"metadata": metadata}, - metadata={"environment": ["ppruntime"]}, + metadata={"environment": ENVIRONMENT["ppruntime"]}, ) return self.join(climatology, "**datatype**").reduce(payload) @@ -375,7 +382,7 @@ def threshold_probability( threshold.model_dump( exclude=("select", "lower_scale_factor", "upper_scale_factor") ), - metadata={"environment": ["ppruntime"]}, + metadata={"environment": ENVIRONMENT["ppruntime"]}, ) ) if combined is None: @@ -384,7 +391,7 @@ def threshold_probability( combined = combined.join(dim="param").reduce( fluent.Payload( "ppruntime.stats.logical_and", - metadata={"environment": ["ppruntime"]}, + metadata={"environment": ENVIRONMENT["ppruntime"]}, ), dim="param", ) @@ -546,7 +553,7 @@ def mask( "ppruntime.stats.mask", (fluent.Node.input_name(0),), {"lower_comparison": mask.comparison, "lower_value": mask.value}, - metadata={"environment": ["ppruntime"]}, + metadata={"environment": ENVIRONMENT["ppruntime"]}, ) ) return ( @@ -668,7 +675,7 @@ def _write_transform( "ppruntime.io.write", (fluent.Node.input_name(0),), kwargs, - metadata={"environment": ["ppruntime"]}, + metadata={"environment": ENVIRONMENT["ppruntime"]}, ) ) @@ -681,7 +688,7 @@ def _sot_transform( "ppruntime.stats.sot", (fluent.Node.input_name(1), fluent.Node.input_name(0), number, eps), kwargs={"metadata": metadata}, - metadata={"environment": ["ppruntime"]}, + metadata={"environment": ENVIRONMENT["ppruntime"]}, ) ) new_sot._add_dimension(new_dim, number) @@ -709,7 +716,7 @@ def _efi_window_transform( "ppruntime.stats.efi", (fluent.Node.input_name(1), fluent.Node.input_name(0), eps), kwargs={"metadata": metadata}, - metadata={"environment": ["ppruntime"]}, + metadata={"environment": ENVIRONMENT["ppruntime"]}, ), dim="**datatype**", ) @@ -723,7 +730,7 @@ def _quantiles_transform( "ppruntime.stats.quantiles", (fluent.Node.input_name(0), q_number, total_number), kwargs={"metadata": metadata}, - metadata={"environment": ["ppruntime"]}, + metadata={"environment": ENVIRONMENT["ppruntime"]}, ) new_quantile = action.map(payload) new_quantile._add_dimension(new_dim, q_number / total_number) @@ -790,7 +797,7 @@ def from_source( payloads[indices] = fluent.Payload( "ppruntime.io.retrieve", [sources, [new_request], dtype], - metadata={"environment": ["ppruntime"]}, + metadata={"environment": ENVIRONMENT["ppruntime"]}, ) new_action = fluent.from_source( payloads, diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index 0f8c74ab..010c173c 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -62,6 +62,7 @@ write_to_template = '''# Do not change! Do not track in version control! __version__ = "{version}" ''' local_scheme = "no-local-version" +fallback_version = "0.0.0" [tool.ruff] lint.ignore = [ "E722", "E731", "E741" ] From 6b07e240d02b12fc000a3487e083fe66b4fe6a37 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 1 Jul 2026 09:43:22 +0000 Subject: [PATCH 29/95] Fix package name --- pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 01b9595a..41faf6ee 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -32,7 +32,7 @@ # TODO: change git url to ppruntime when published in PyPI ENVIRONMENT = { "ppruntime": [ - "ppruntime @ git+https://git@github.com/ecmwf/pproc.git@feature/mono-repo#subdirectory=pproc-runtime" + "pproc-runtime @ git+https://git@github.com/ecmwf/pproc.git@feature/mono-repo#subdirectory=pproc-runtime" ], } From 8f53352ee2ddc731dba7f2efc874979ff0a2d96b Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 1 Jul 2026 10:10:45 +0000 Subject: [PATCH 30/95] Add root to pyproject.toml --- pproc-core/pyproject.toml | 1 + pproc-runtime/pyproject.toml | 1 + pproc/pyproject.toml | 1 + 3 files changed, 3 insertions(+) diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index d36728df..0fb2306f 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -61,6 +61,7 @@ write_to = "src/earthkit/workflows/plugins/pproc/_version.py" write_to_template = '''# Do not change! Do not track in version control! __version__ = "{version}" ''' +root = ".." local_scheme = "no-local-version" fallback_version = "0.0.0" diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index 010c173c..1e1fa184 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -61,6 +61,7 @@ write_to = "src/ppruntime/_version.py" write_to_template = '''# Do not change! Do not track in version control! __version__ = "{version}" ''' +root = ".." local_scheme = "no-local-version" fallback_version = "0.0.0" diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index 9f515c51..af0335bc 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -86,6 +86,7 @@ write_to = "src/pproc/_version.py" write_to_template = '''# Do not change! Do not track in version control! __version__ = "{version}" ''' +root = ".." local_scheme = "no-local-version" scm.git.describe_command = [ 'git', 'describe', '--dirty', '--tags', '--long', '--abbrev=40', '--match', '[0-9]*' ] From abcfb900de4e404a4a87cec3dfa22048b9903f01 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 1 Jul 2026 10:51:51 +0000 Subject: [PATCH 31/95] Bump earthkit-workflows --- pproc-core/pyproject.toml | 5 +- pproc-core/src/ppcore/products/__init__.py | 38 +- pproc-core/uv.lock | 995 ++------------------- 3 files changed, 103 insertions(+), 935 deletions(-) diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 0fb2306f..780a5441 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -20,10 +20,9 @@ license-files = [ "LICENSE" ] authors = [ { name = "European Centre for Medium-Range Weather Forecasts (ECMWF)", email = "software.support@ecmwf.int" }, ] -requires-python = ">=3.10" +requires-python = ">=3.11" classifiers = [ "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", @@ -34,7 +33,7 @@ dependencies = [ "code-meters", "conflator>=0.1.8", "earthkit-time", - "earthkit-workflows", + "earthkit-workflows[vizualize]", "numpy", "pandas", "pydantic", diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index b8ba8f9d..ff9d6202 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -1,8 +1,8 @@ from typing import Optional from earthkit.workflows.graph import Graph, deduplicate_nodes -# from earthkit.workflows.fluent import Action -# from earthkit.workflows.nodetree import combine_by_coords, datacubes +from earthkit.workflows.fluent import Action +from earthkit.workflows.nodetree import combine_by_coords, datacubes from ppcore.utils.requests import expand from ppcore.configs import from_outputs as config_from_outputs @@ -47,23 +47,23 @@ def product_from_output( return product_from_config(config) -# def action_from_outputs( -# requests: list[dict], -# pproc_schema: str, -# sources: Optional[Action] = None, -# metadata: Optional[dict] = None, -# ) -> Action: -# inputs = None if sources is None else datacubes(sources) -# nodes = [] -# for request in expand(requests): -# nodes.append( -# product_from_output( -# request, pproc_schema=pproc_schema, inputs=inputs, metadata=metadata -# ) -# .action(forecast=sources) -# .nodes -# ) -# return Action(combine_by_coords(nodes)) +def action_from_outputs( + requests: list[dict], + pproc_schema: str, + sources: Optional[Action] = None, + metadata: Optional[dict] = None, +) -> Action: + inputs = None if sources is None else datacubes(sources) + nodes = [] + for request in expand(requests): + nodes.append( + product_from_output( + request, pproc_schema=pproc_schema, inputs=inputs, metadata=metadata + ) + .action(forecast=sources) + .nodes + ) + return Action(combine_by_coords(nodes)) def graph_from_outputs( diff --git a/pproc-core/uv.lock b/pproc-core/uv.lock index 413578d1..c832e49c 100644 --- a/pproc-core/uv.lock +++ b/pproc-core/uv.lock @@ -1,16 +1,15 @@ version = 1 -requires-python = ">=3.10" +requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", + "python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_version < '0'", ] [[package]] @@ -67,18 +66,6 @@ dependencies = [ ] 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/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283 }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504 }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811 }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402 }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217 }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079 }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475 }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829 }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211 }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036 }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184 }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790 }, { 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 }, @@ -148,8 +135,7 @@ dependencies = [ { name = "attrs" }, { name = "click" }, { name = "eccodes" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591 } wheels = [ @@ -161,17 +147,10 @@ name = "cftime" version = "1.6.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605 } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/45/dcc38d7b293107d3e33b3d94b2619687eb414a4f16880e2e841cdb6ac49a/cftime-1.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ad81e8cb0eb873b33c3d1e22c6168163fdc64daa8f7aeb4da8092f272575f4d", size = 510221 }, - { url = "https://files.pythonhosted.org/packages/68/63/2875341516fcfe80f1a16f86b420aec9441223ab5381d554441c9fdae56e/cftime-1.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12d95c6af852114a13301c5a61e41afdbd1542e72939c1083796f8418b9b8b0e", size = 490684 }, - { url = "https://files.pythonhosted.org/packages/80/7f/85f2c4c7ae8300b7871af7d7d144ad06f71dc0dd6258f0d18fd966067d1b/cftime-1.6.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2659b7df700e27d9e3671f686ce474dfb5fc274966961edf996acc148dfa094a", size = 1592268 }, - { url = "https://files.pythonhosted.org/packages/6c/9a/72dbd72498e958edf41a770bbd05e68141774325a945092059f4eb9c653d/cftime-1.6.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:94cebdfcda6a985b8e69aed22d00d6b8aa1f421495adbdcff1d59b3e896d81e2", size = 1624716 }, - { url = "https://files.pythonhosted.org/packages/bc/9e/2c4c720ad8bbe87994ca62a0e3c09d3786b984af664a91a6f3a668aa0b13/cftime-1.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:179681b023349a2fe277ceccc89d4fc52c0dd105cb59b7187b5bc5d442875133", size = 1705927 }, - { url = "https://files.pythonhosted.org/packages/da/77/66484061dee5fbcb2fdcfa6a491d4efb880725117f4a339d20a5323105df/cftime-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:d8b9fdecb466879cfe8ca4472b229b6f8d0bb65e4ffd44266ae17484bac2cf38", size = 472435 }, { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733 }, { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946 }, { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856 }, @@ -214,22 +193,6 @@ 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/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182 }, - { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329 }, - { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230 }, - { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890 }, - { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930 }, - { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109 }, - { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684 }, - { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785 }, - { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055 }, - { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502 }, - { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295 }, - { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145 }, - { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884 }, - { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343 }, - { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174 }, - { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805 }, { 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 }, @@ -385,11 +348,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630 }, ] -[package.optional-dependencies] -distributed = [ - { name = "distributed", marker = "python_full_version >= '3.11'" }, -] - [[package]] name = "decorator" version = "5.3.1" @@ -411,41 +369,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, ] -[[package]] -name = "dill" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019 }, -] - -[[package]] -name = "distributed" -version = "2026.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click", marker = "python_full_version >= '3.11'" }, - { name = "cloudpickle", marker = "python_full_version >= '3.11'" }, - { name = "dask", marker = "python_full_version >= '3.11'" }, - { name = "jinja2", marker = "python_full_version >= '3.11'" }, - { name = "locket", marker = "python_full_version >= '3.11'" }, - { name = "msgpack", marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "psutil", marker = "python_full_version >= '3.11'" }, - { name = "pyyaml", marker = "python_full_version >= '3.11'" }, - { name = "sortedcontainers", marker = "python_full_version >= '3.11'" }, - { name = "tblib", marker = "python_full_version >= '3.11'" }, - { name = "toolz", marker = "python_full_version >= '3.11'" }, - { name = "tornado", marker = "python_full_version >= '3.11'" }, - { name = "urllib3", marker = "python_full_version >= '3.11'" }, - { name = "zict", marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e7/84/3e98a2d61493d201f253743091cbd4f099f502f957a9a33bb9ce5b8d5416/distributed-2026.3.0.tar.gz", hash = "sha256:4a8fc6102fededfbaae45288501276da2297a054d74eb6589f01b087c7f95c26", size = 2103970 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/77/2ff7aefc09cf1306a81cd7a46af34f80ebefef81a2e8329b94b58ad813ae/distributed-2026.3.0-py3-none-any.whl", hash = "sha256:52518f4b3e6795e87b442e8f57788ba1ddc750c62d0835669c85927280d38f07", size = 1009769 }, -] - [[package]] name = "earthkit-data" version = "0.20.0" @@ -463,15 +386,12 @@ dependencies = [ { name = "lru-dict" }, { name = "markdown" }, { name = "multiurl" }, - { name = "netcdf4", version = "1.7.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, - { name = "netcdf4", version = "1.7.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, - { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "netcdf4" }, + { name = "pandas" }, { name = "pdbufr" }, { name = "pyyaml" }, { name = "tqdm" }, - { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "xarray" }, ] sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819 } wheels = [ @@ -496,8 +416,7 @@ version = "0.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "array-api-compat" }, - { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pint" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013 } wheels = [ @@ -506,68 +425,31 @@ wheels = [ [[package]] name = "earthkit-workflows" -version = "0.6.2" +version = "0.15.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] dependencies = [ - { name = "array-api-compat", marker = "python_full_version < '3.11'" }, - { name = "cloudpickle", marker = "python_full_version < '3.11'" }, - { name = "dill", marker = "python_full_version < '3.11'" }, - { name = "earthkit-data", marker = "python_full_version < '3.11'" }, - { name = "fire", marker = "python_full_version < '3.11'" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "orjson", marker = "python_full_version < '3.11'" }, - { name = "pydantic", marker = "python_full_version < '3.11'" }, - { name = "pyrsistent", marker = "python_full_version < '3.11'" }, - { name = "pyvis", marker = "python_full_version < '3.11'" }, - { name = "pyzmq", marker = "python_full_version < '3.11'" }, - { name = "sortedcontainers", marker = "python_full_version < '3.11'" }, - { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "array-api-compat" }, + { name = "cloudpickle" }, + { name = "earthkit-data" }, + { name = "fire" }, + { name = "numpy" }, + { name = "orjson" }, + { name = "pydantic" }, + { name = "pyrsistent" }, + { name = "pyzmq" }, + { name = "qubed" }, + { name = "sortedcontainers" }, + { name = "xarray" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/24/3f/4fae32362bbb8ff27ecfec64f10fad1ae86e546fb4fb42005e1435ef89fc/earthkit_workflows-0.6.2.tar.gz", hash = "sha256:5f05c670dc2f1b4895d799d0af0f7102f90c65b7026713aa4cba0d168c374353", size = 10682030 } +sdist = { url = "https://files.pythonhosted.org/packages/51/3a/91f930cc1d6efdb25f2b3d47c5d9498705d59398a0f1d9276841a1bb7ac5/earthkit_workflows-0.15.1.tar.gz", hash = "sha256:2304197d086842cffbc9025a7db2c46e465857a97ba628da02c9891afa43f5c9", size = 10864288 } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/3d/a399bc384c6bdfadfd052820b4233ce949a3c4496c2cc5a811f165d2381c/earthkit_workflows-0.6.2-py3-none-any.whl", hash = "sha256:772c94b4ff62d9a42b6c4918c410ec082c6870d605f81e08015820121ded7235", size = 175629 }, + { url = "https://files.pythonhosted.org/packages/4b/ff/5f655e43dd2f65563249e51ea4a63d3f498dfe453991df99e72976abb3e3/earthkit_workflows-0.15.1-py3-none-any.whl", hash = "sha256:e782d8ebe46bfbba5c1efc3e6f7c4577b66d0afdc6f7f5789c8784ccfdfa30ad", size = 216702 }, ] -[[package]] -name = "earthkit-workflows" -version = "0.14.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] -dependencies = [ - { name = "array-api-compat", marker = "python_full_version >= '3.11'" }, - { name = "cloudpickle", marker = "python_full_version >= '3.11'" }, - { name = "dask", extra = ["distributed"], marker = "python_full_version >= '3.11'" }, - { name = "dill", marker = "python_full_version >= '3.11'" }, - { name = "earthkit-data", marker = "python_full_version >= '3.11'" }, - { name = "fire", marker = "python_full_version >= '3.11'" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "orjson", marker = "python_full_version >= '3.11'" }, - { name = "pydantic", marker = "python_full_version >= '3.11'" }, - { name = "pyrsistent", marker = "python_full_version >= '3.11'" }, - { name = "pyvis", marker = "python_full_version >= '3.11'" }, - { name = "pyzmq", marker = "python_full_version >= '3.11'" }, - { name = "qubed", marker = "python_full_version >= '3.11'" }, - { name = "sortedcontainers", marker = "python_full_version >= '3.11'" }, - { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/24/7b/37021d7c54faa71415a15ab7592ba8e34efb8989150036e59dd6417e26bd/earthkit_workflows-0.14.0.tar.gz", hash = "sha256:98b30f32a52baaef2b1027f5edeaebad1c6686292586b7dded242c0d2989dcf6", size = 10849635 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/61/e4/dfcb6cc2b7601cb5a105fca08e22c7106cdbd8fc839f6308ad5306de72f2/earthkit_workflows-0.14.0-py3-none-any.whl", hash = "sha256:69fdd46e82506f84ba000d4a10a2aee623a4e6968f0c9b7f92417c71a06ce2e0", size = 203583 }, +[package.optional-dependencies] +vizualize = [ + { name = "networkx" }, + { name = "pyvis" }, ] [[package]] @@ -578,12 +460,10 @@ dependencies = [ { name = "attrs" }, { name = "cffi" }, { name = "findlibs" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/fe/63f915171413efeaaa9d1ba613aeabdc3f8cdba603f72842a7fcb1b011ee/eccodes-2.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:3a7438b259188821a5b05e5dd814f83924936ff9fe0897f6a157506fcaea9baf", size = 7435926 }, { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928 }, { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009 }, { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001 }, @@ -599,18 +479,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f", size = 5294 }, ] -[[package]] -name = "exceptiongroup" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, -] - [[package]] name = "executing" version = "2.2.1" @@ -680,26 +548,6 @@ version = "2.4.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/bd/920b1c5ff1df427a5fc3fd4c2f13b0b0e720c3d57fafd80557094c1fefe0/frozendict-2.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bd37c087a538944652363cfd77fb7abe8100cc1f48afea0b88b38bf0f469c3d2", size = 59848 }, - { url = "https://files.pythonhosted.org/packages/a6/9c/e3e186925b1d84f816d458be4e2ea785bbeba15fd2e9e85c5ae7e7a90421/frozendict-2.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2b96f224a5431889f04b2bc99c0e9abe285679464273ead83d7d7f2a15907d35", size = 38164 }, - { url = "https://files.pythonhosted.org/packages/10/4c/af931d88c51ee2fcbf8c817557dcb975133a188f1b44bfa82caa940beeab/frozendict-2.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5c1781f28c4bbb177644b3cb6d5cf7da59be374b02d91cdde68d1d5ef32e046b", size = 38341 }, - { url = "https://files.pythonhosted.org/packages/ba/7a/c1fd4f736758cf93939cc3b7c8399fe1db0c121881431d41fcdbae344343/frozendict-2.4.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8a06f6c3d3b8d487226fdde93f621e04a54faecc5bf5d9b16497b8f9ead0ac3e", size = 112882 }, - { url = "https://files.pythonhosted.org/packages/bd/b0/304294f7cd099582a98d63e7a9cec34a9905d07f7628b42fc3f9c9a9bc94/frozendict-2.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b809d1c861436a75b2b015dbfd94f6154fa4e7cb0a70e389df1d5f6246b21d1e", size = 120482 }, - { url = "https://files.pythonhosted.org/packages/7e/61/689212ea4124fcbd097c0ac02c2c6a4e345ccc132d9104d054ff6b43ab64/frozendict-2.4.7-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75eefdf257a84ea73d553eb80d0abbff0af4c9df62529e4600fd3f96ff17eeb3", size = 113527 }, - { url = "https://files.pythonhosted.org/packages/5c/9b/38a762f4e76903efd4340454cac2820f583929457822111ef6a00ff1a3f4/frozendict-2.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a4d2b27d8156922c9739dd2ff4f3934716e17cfd1cf6fb61aa17af7d378555e9", size = 130068 }, - { url = "https://files.pythonhosted.org/packages/cf/41/9751e9ec1a2e810e8f961aea4f8958953157478daff6b868277ab7c5ef8c/frozendict-2.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ebd953c41408acfb8041ff9e6c3519c09988fb7e007df7ab6b56e229029d788", size = 126184 }, - { url = "https://files.pythonhosted.org/packages/71/be/b179b5f200cb0f52debeccc63b786cabcc408c4542f47c4245f978ad36e3/frozendict-2.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c64d34b802912ee6d107936e970b90750385a1fdfd38d310098b2918ba4cbf2", size = 120168 }, - { url = "https://files.pythonhosted.org/packages/25/c2/1536bc363dbce414e6b632f496aa8219c0db459a99eeafa02eba380e4cfa/frozendict-2.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:294a7d7d51dd979021a8691b46aedf9bd4a594ce3ed33a4bdf0a712d6929d712", size = 114997 }, - { url = "https://files.pythonhosted.org/packages/29/63/3e9efb490c00a0bf3c7bbf72fc73c90c4a6ebe30595e0fc44f59182b2ae7/frozendict-2.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f65d1b90e9ddc791ea82ef91a9ae0ab27ef6c0cfa88fadfa0e5ca5a22f8fa22f", size = 117292 }, - { url = "https://files.pythonhosted.org/packages/5e/66/d25b1e94f9b0e64025d5cadc77b9b857737ebffd8963ee91de7c5a06415a/frozendict-2.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:82d5272d08451bcef6fb6235a0a04cf1816b6b6815cec76be5ace1de17e0c1a4", size = 110656 }, - { url = "https://files.pythonhosted.org/packages/a3/5d/0e7e3294e18bf41d38dbc9ee82539be607c8d26e763ae12d9e41f03f2dae/frozendict-2.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5943c3f683d3f32036f6ca975e920e383d85add1857eee547742de9c1f283716", size = 113225 }, - { url = "https://files.pythonhosted.org/packages/e0/fb/b72c9b261ac7a7803528aa63bba776face8ad8d39cc4ca4825ddaa7777a9/frozendict-2.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:88c6bea948da03087035bb9ca9625305d70e084aa33f11e17048cb7dda4ca293", size = 126713 }, - { url = "https://files.pythonhosted.org/packages/c7/d9/e13af40bd9ef27b5c9ba10b0e31b03acac9468236b878dab030c75102a47/frozendict-2.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ffd1a9f9babec9119712e76a39397d8aa0d72ef8c4ccad917c6175d7e7f81b74", size = 114166 }, - { url = "https://files.pythonhosted.org/packages/40/2b/435583b11f5332cd3eb479d0a67a87bc9247c8b094169b07bd8f0777fc48/frozendict-2.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0ff6f57854cc8aa8b30947ec005f9246d96e795a78b21441614e85d39b708822", size = 121542 }, - { url = "https://files.pythonhosted.org/packages/38/25/097f3c0dc916d7c76f782cb65544e683ff3940a0ed997fc32efdb0989c45/frozendict-2.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d774df483c12d6cba896eb9a1337bbc5ad3f564eb18cfaaee3e95fb4402f2a86", size = 118610 }, - { url = "https://files.pythonhosted.org/packages/61/d1/6964158524484d7f3410386ff27cbc8f33ef06f8d9ee0e188348efb9a139/frozendict-2.4.7-cp310-cp310-win32.whl", hash = "sha256:a10d38fa300f6bef230fae1fdb4bc98706b78c8a3a2f3140fde748469ef3cfe8", size = 34547 }, - { url = "https://files.pythonhosted.org/packages/94/27/c22d614332c61ace4406542787edafaf7df533c6f02d1de8979d35492587/frozendict-2.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:dd518f300e5eb6a8827bee380f2e1a31c01dc0af069b13abdecd4e5769bd8a97", size = 37693 }, - { url = "https://files.pythonhosted.org/packages/bc/d8/9d6604357b1816586612e0e89bab6d8a9c029e95e199862dc99ce8ae2ed5/frozendict-2.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:3842cfc2d69df5b9978f2e881b7678a282dbdd6846b11b5159f910bc633cbe4f", size = 35563 }, { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264 }, ] @@ -753,61 +601,25 @@ wheels = [ [[package]] name = "ipython" -version = "8.39.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -dependencies = [ - { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version < '3.11'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "jedi", marker = "python_full_version < '3.11'" }, - { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, - { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, - { name = "pygments", marker = "python_full_version < '3.11'" }, - { name = "stack-data", marker = "python_full_version < '3.11'" }, - { name = "traitlets", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849 }, -] - -[[package]] -name = "ipython" -version = "9.14.0" +version = "9.15.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version >= '3.11'" }, - { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, - { name = "jedi", marker = "python_full_version >= '3.11'" }, - { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, - { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, - { name = "psutil", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten'" }, - { name = "pygments", marker = "python_full_version >= '3.11'" }, - { name = "stack-data", marker = "python_full_version >= '3.11'" }, - { name = "traitlets", marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, + { 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", marker = "sys_platform != 'cygwin' and sys_platform != 'emscripten'" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/21/c2/c0064cf15d026501a1ef70e42efd9c3f818663089399aacc5e37a82901c1/ipython-9.14.0.tar.gz", hash = "sha256:6f27ff0f1d9ea050e0551f71568bc4b34d8aba579e8f111c5b4175f44ac6b4aa", size = 4432601 } +sdist = { url = "https://files.pythonhosted.org/packages/53/59/165d3b4d75cc34add3122c4417ecb229085140ac573103c223cd01dde96f/ipython-9.15.0.tar.gz", hash = "sha256:da2819ce2aa83135257df830660b1176d986c3d2876db24df01974fa955b2756", size = 4442580 } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/a3/9e59340f02c1dc8f8c0a05b09244712b8609eb5439f9996e887e2b82f452/ipython-9.14.0-py3-none-any.whl", hash = "sha256:8fd984a3372c14b12790b084ba6b5cff5678c0cb063244a0034f06a51f20d6c2", size = 627457 }, + { url = "https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl", hash = "sha256:515ad9c3cdf0c932a5a9f6245419e8aba706b7bd03c3e1d3a1c83d9351d6aa6e", size = 630895 }, ] [[package]] @@ -815,7 +627,7 @@ name = "ipython-pygments-lexers" version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pygments", marker = "python_full_version >= '3.11'" }, + { 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 = [ @@ -863,8 +675,7 @@ dependencies = [ { name = "attrs" }, { name = "jsonschema-specifications" }, { name = "referencing" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { 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 = [ @@ -898,17 +709,6 @@ version = "1.4.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/6c/396716746ca46fd2ac52a7a6cbd7b4cf848e5d430f431dacd209290dfa71/lru_dict-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3766e397aa6de1ca3442729bc1fa75834ab7b0a6b017e6e197d3a66b61abde59", size = 16757 }, - { url = "https://files.pythonhosted.org/packages/2d/93/c163ffb71beb18f18459461658fd16c8b8c86aed858f2dc7c7e636318f61/lru_dict-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658e152d3a4ad0e1d75e6f53b1fa353779539920b38be99f4ea33d3bad41efdb", size = 11243 }, - { url = "https://files.pythonhosted.org/packages/44/e3/fa96d54032531c67eeacf0ab6f56e10e05f25d382a29f6a381ac8ecf3814/lru_dict-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:98af7044b5c3d85a649e1afb8891829ff5210caf9143acc741b3e98ab1b66ff6", size = 11726 }, - { url = "https://files.pythonhosted.org/packages/7a/23/bae4f32fb014fd2dc5512e9267a3b1ec34c3b55d16a2202a1193d9ae635d/lru_dict-1.4.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:906d99705b79a00b5668bdb8782ad823ccc8d26e1fc6b56327ae469a8d12e9b4", size = 29823 }, - { url = "https://files.pythonhosted.org/packages/9f/3b/8c3d1e6a188ce65e0161b86dbd18f2290950baf1e9e28e4948fc123d9a67/lru_dict-1.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:885643fd968336d8652fddb0778184e2eeff7b7aebced6de268af6d6caef42d5", size = 30812 }, - { url = "https://files.pythonhosted.org/packages/ed/11/7f061507eda944150ed959e99a3700ce6358c1241c7f697b2f1ade48646b/lru_dict-1.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:24c779334bed82f1a7eb2d1ebcba2b7aa9a1555d40a3b53e05eb6b9dfcb0609c", size = 32480 }, - { url = "https://files.pythonhosted.org/packages/75/e7/94ac30d33c6f8a8eca5d7e81c0ce26fb7b79b18ea65accdcb2a652b19abc/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6099e2ecb118dfeae4a197bfcc702ea5841bfd86f19d1b340e932d0f5c47c10", size = 30199 }, - { url = "https://files.pythonhosted.org/packages/4a/81/c93ee7365db67dfb497e6218aa0395b9ec878c07c732d348bfbd651bcc95/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e0db4f3105108598749550e639b283b07df0bb91cac3b47e86ffebcab721cc7", size = 31489 }, - { url = "https://files.pythonhosted.org/packages/9f/0b/634e8b4eca2497647f802bbe1ae3f0e1e9a0de1d555cf77c022527b2682f/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e21f67ba374d1945051b547e719d44a8c7880718f67a15a03e7a12e1d12ea96b", size = 29522 }, - { url = "https://files.pythonhosted.org/packages/de/cc/591b959d77cc0e0ac016f11baf26d03d566bb88a53fa9b41e157bc68bc4b/lru_dict-1.4.1-cp310-cp310-win32.whl", hash = "sha256:f309b4018dd41f33bf3bd4cc0f62421da8bcca513ea044dbb22f3cd029935012", size = 13066 }, - { url = "https://files.pythonhosted.org/packages/d9/bc/c14b67fdbdb5a2a81cfb907ea8a8b0c9da5aed899f34921ebf097e22a966/lru_dict-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:e84cd1065955897de01f1fb4cbd6f87cab7706e920283bb98c27341d76dd9a8d", size = 14008 }, { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760 }, { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249 }, { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728 }, @@ -972,11 +772,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909 }, { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816 }, { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204 }, - { url = "https://files.pythonhosted.org/packages/ec/de/18ac3957e1aa6674a0a828748c819265f79b524ff30cbb0ac7f08ab786c8/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cc9dd191870555624bbf3903c8afa3f01815ca3256ed8b35cb323f0db3ce4f98", size = 10467 }, - { url = "https://files.pythonhosted.org/packages/0c/53/2a0bedaa64950cc56ade72e2f5a292318473585d9a3adc797d13b38082e7/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:afdf92b332632aa6e4b8646e93723f50f41fece2a80a54d2b44e8ac67f913ceb", size = 10871 }, - { url = "https://files.pythonhosted.org/packages/4e/e2/d5ea49d62ea142559fd9cafd8505d4a4f87a1d81953a9c99fa61e7ccbd6b/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6770adafae25663b682420891a10a5894595f02b1e4d87766f7adc8e56e72a", size = 12969 }, - { url = "https://files.pythonhosted.org/packages/a2/67/0672caac9a04dc9011f7a27fc2ec2003f0bfa008070b29940d05b4dae56a/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:018cd3b41224ca81eb83cdf6db024409a920e5c1d3ce4e8b323cb66e24a73132", size = 13959 }, - { url = "https://files.pythonhosted.org/packages/e3/7e/313385214a5011cf9fe8376928f66f70bfedc48d8f7ab424292224ed4907/lru_dict-1.4.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:781dbcf0c83160e525482a4ebcd7c5065851a6c7295f1cda78248a2029f23f39", size = 14084 }, { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384 }, { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822 }, { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968 }, @@ -1011,17 +806,6 @@ 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/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631 }, - { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057 }, - { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050 }, - { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681 }, - { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705 }, - { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524 }, - { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282 }, - { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745 }, - { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571 }, - { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056 }, - { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932 }, { 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 }, @@ -1111,67 +895,6 @@ 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 = "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/f5/a2/3b68a9e769db68668b25c6108444a35f9bd163bb848c0650d516761a59c0/msgpack-1.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0051fffef5a37ca2cd16978ae4f0aef92f164df86823871b5162812bebecd8e2", size = 81318 }, - { url = "https://files.pythonhosted.org/packages/5b/e1/2b720cc341325c00be44e1ed59e7cfeae2678329fbf5aa68f5bda57fe728/msgpack-1.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a605409040f2da88676e9c9e5853b3449ba8011973616189ea5ee55ddbc5bc87", size = 83786 }, - { url = "https://files.pythonhosted.org/packages/71/e5/c2241de64bfceac456b140737812a2ab310b10538a7b34a1d393b748e095/msgpack-1.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b696e83c9f1532b4af884045ba7f3aa741a63b2bc22617293a2c6a7c645f251", size = 398240 }, - { url = "https://files.pythonhosted.org/packages/b7/09/2a06956383c0fdebaef5aa9246e2356776f12ea6f2a44bd1368abf0e46c4/msgpack-1.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:365c0bbe981a27d8932da71af63ef86acc59ed5c01ad929e09a0b88c6294e28a", size = 406070 }, - { url = "https://files.pythonhosted.org/packages/0e/74/2957703f0e1ef20637d6aead4fbb314330c26f39aa046b348c7edcf6ca6b/msgpack-1.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:41d1a5d875680166d3ac5c38573896453bbbea7092936d2e107214daf43b1d4f", size = 393403 }, - { url = "https://files.pythonhosted.org/packages/a5/09/3bfc12aa90f77b37322fc33e7a8a7c29ba7c8edeadfa27664451801b9860/msgpack-1.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354e81bcdebaab427c3df4281187edc765d5d76bfb3a7c125af9da7a27e8458f", size = 398947 }, - { url = "https://files.pythonhosted.org/packages/4b/4f/05fcebd3b4977cb3d840f7ef6b77c51f8582086de5e642f3fefee35c86fc/msgpack-1.1.2-cp310-cp310-win32.whl", hash = "sha256:e64c8d2f5e5d5fda7b842f55dec6133260ea8f53c4257d64494c534f306bf7a9", size = 64769 }, - { url = "https://files.pythonhosted.org/packages/d0/3e/b4547e3a34210956382eed1c85935fff7e0f9b98be3106b3745d7dec9c5e/msgpack-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:db6192777d943bdaaafb6ba66d44bf65aa0e9c5616fa1d2da9bb08828c6b39aa", size = 71293 }, - { 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/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa", size = 81939 }, - { url = "https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:446abdd8b94b55c800ac34b102dffd2f6aa0ce643c55dfc017ad89347db3dbdb", size = 85064 }, - { url = "https://files.pythonhosted.org/packages/f2/60/a064b0345fc36c4c3d2c743c82d9100c40388d77f0b48b2f04d6041dbec1/msgpack-1.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c63eea553c69ab05b6747901b97d620bb2a690633c77f23feb0c6a947a8a7b8f", size = 417131 }, - { url = "https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42", size = 427556 }, - { url = "https://files.pythonhosted.org/packages/f5/87/ffe21d1bf7d9991354ad93949286f643b2bb6ddbeab66373922b44c3b8cc/msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9", size = 404920 }, - { url = "https://files.pythonhosted.org/packages/ff/41/8543ed2b8604f7c0d89ce066f42007faac1eaa7d79a81555f206a5cdb889/msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620", size = 415013 }, - { url = "https://files.pythonhosted.org/packages/41/0d/2ddfaa8b7e1cee6c490d46cb0a39742b19e2481600a7a0e96537e9c22f43/msgpack-1.1.2-cp312-cp312-win32.whl", hash = "sha256:1fff3d825d7859ac888b0fbda39a42d59193543920eda9d9bea44d958a878029", size = 65096 }, - { url = "https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1de460f0403172cff81169a30b9a92b260cb809c4cb7e2fc79ae8d0510c78b6b", size = 72708 }, - { url = "https://files.pythonhosted.org/packages/c5/31/5b1a1f70eb0e87d1678e9624908f86317787b536060641d6798e3cf70ace/msgpack-1.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:be5980f3ee0e6bd44f3a9e9dea01054f175b50c3e6cdb692bc9424c0bbb8bf69", size = 64119 }, - { url = "https://files.pythonhosted.org/packages/6b/31/b46518ecc604d7edf3a4f94cb3bf021fc62aa301f0cb849936968164ef23/msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4efd7b5979ccb539c221a4c4e16aac1a533efc97f3b759bb5a5ac9f6d10383bf", size = 81212 }, - { url = "https://files.pythonhosted.org/packages/92/dc/c385f38f2c2433333345a82926c6bfa5ecfff3ef787201614317b58dd8be/msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42eefe2c3e2af97ed470eec850facbe1b5ad1d6eacdbadc42ec98e7dcf68b4b7", size = 84315 }, - { url = "https://files.pythonhosted.org/packages/d3/68/93180dce57f684a61a88a45ed13047558ded2be46f03acb8dec6d7c513af/msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999", size = 412721 }, - { url = "https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e", size = 424657 }, - { url = "https://files.pythonhosted.org/packages/38/f8/4398c46863b093252fe67368b44edc6c13b17f4e6b0e4929dbf0bdb13f23/msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162", size = 402668 }, - { url = "https://files.pythonhosted.org/packages/28/ce/698c1eff75626e4124b4d78e21cca0b4cc90043afb80a507626ea354ab52/msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794", size = 419040 }, - { url = "https://files.pythonhosted.org/packages/67/32/f3cd1667028424fa7001d82e10ee35386eea1408b93d399b09fb0aa7875f/msgpack-1.1.2-cp313-cp313-win32.whl", hash = "sha256:a7787d353595c7c7e145e2331abf8b7ff1e6673a6b974ded96e6d4ec09f00c8c", size = 65037 }, - { url = "https://files.pythonhosted.org/packages/74/07/1ed8277f8653c40ebc65985180b007879f6a836c525b3885dcc6448ae6cb/msgpack-1.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:a465f0dceb8e13a487e54c07d04ae3ba131c7c5b95e2612596eafde1dccf64a9", size = 72631 }, - { url = "https://files.pythonhosted.org/packages/e5/db/0314e4e2db56ebcf450f277904ffd84a7988b9e5da8d0d61ab2d057df2b6/msgpack-1.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:e69b39f8c0aa5ec24b57737ebee40be647035158f14ed4b40e6f150077e21a84", size = 64118 }, - { url = "https://files.pythonhosted.org/packages/22/71/201105712d0a2ff07b7873ed3c220292fb2ea5120603c00c4b634bcdafb3/msgpack-1.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e23ce8d5f7aa6ea6d2a2b326b4ba46c985dbb204523759984430db7114f8aa00", size = 81127 }, - { url = "https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939", size = 84981 }, - { url = "https://files.pythonhosted.org/packages/8e/a9/3536e385167b88c2cc8f4424c49e28d49a6fc35206d4a8060f136e71f94c/msgpack-1.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e2cb7b9031568a2a5c73aa077180f93dd2e95b4f8d3b8e14a73ae94a9e667e", size = 411885 }, - { url = "https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931", size = 419658 }, - { url = "https://files.pythonhosted.org/packages/3b/ef/2b92e286366500a09a67e03496ee8b8ba00562797a52f3c117aa2b29514b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:04fb995247a6e83830b62f0b07bf36540c213f6eac8e851166d8d86d83cbd014", size = 403290 }, - { url = "https://files.pythonhosted.org/packages/78/90/e0ea7990abea5764e4655b8177aa7c63cdfa89945b6e7641055800f6c16b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e22ab046fa7ede9e36eeb4cfad44d46450f37bb05d5ec482b02868f451c95e2", size = 415234 }, - { url = "https://files.pythonhosted.org/packages/72/4e/9390aed5db983a2310818cd7d3ec0aecad45e1f7007e0cda79c79507bb0d/msgpack-1.1.2-cp314-cp314-win32.whl", hash = "sha256:80a0ff7d4abf5fecb995fcf235d4064b9a9a8a40a3ab80999e6ac1e30b702717", size = 66391 }, - { url = "https://files.pythonhosted.org/packages/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b", size = 73787 }, - { url = "https://files.pythonhosted.org/packages/6a/b0/9d9f667ab48b16ad4115c1935d94023b82b3198064cb84a123e97f7466c1/msgpack-1.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:59415c6076b1e30e563eb732e23b994a61c159cec44deaf584e5cc1dd662f2af", size = 66453 }, - { url = "https://files.pythonhosted.org/packages/16/67/93f80545eb1792b61a217fa7f06d5e5cb9e0055bed867f43e2b8e012e137/msgpack-1.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:897c478140877e5307760b0ea66e0932738879e7aa68144d9b78ea4c8302a84a", size = 85264 }, - { url = "https://files.pythonhosted.org/packages/87/1c/33c8a24959cf193966ef11a6f6a2995a65eb066bd681fd085afd519a57ce/msgpack-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a668204fa43e6d02f89dbe79a30b0d67238d9ec4c5bd8a940fc3a004a47b721b", size = 89076 }, - { url = "https://files.pythonhosted.org/packages/fc/6b/62e85ff7193663fbea5c0254ef32f0c77134b4059f8da89b958beb7696f3/msgpack-1.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5559d03930d3aa0f3aacb4c42c776af1a2ace2611871c84a75afe436695e6245", size = 435242 }, - { url = "https://files.pythonhosted.org/packages/c1/47/5c74ecb4cc277cf09f64e913947871682ffa82b3b93c8dad68083112f412/msgpack-1.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70c5a7a9fea7f036b716191c29047374c10721c389c21e9ffafad04df8c52c90", size = 432509 }, - { url = "https://files.pythonhosted.org/packages/24/a4/e98ccdb56dc4e98c929a3f150de1799831c0a800583cde9fa022fa90602d/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2cb069d8b981abc72b41aea1c580ce92d57c673ec61af4c500153a626cb9e20", size = 415957 }, - { url = "https://files.pythonhosted.org/packages/da/28/6951f7fb67bc0a4e184a6b38ab71a92d9ba58080b27a77d3e2fb0be5998f/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d62ce1f483f355f61adb5433ebfd8868c5f078d1a52d042b0a998682b4fa8c27", size = 422910 }, - { url = "https://files.pythonhosted.org/packages/f0/03/42106dcded51f0a0b5284d3ce30a671e7bd3f7318d122b2ead66ad289fed/msgpack-1.1.2-cp314-cp314t-win32.whl", hash = "sha256:1d1418482b1ee984625d88aa9585db570180c286d942da463533b238b98b812b", size = 75197 }, - { url = "https://files.pythonhosted.org/packages/15/86/d0071e94987f8db59d4eeb386ddc64d0bb9b10820a8d82bcd3e53eeb2da6/msgpack-1.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5a46bf7e831d09470ad92dff02b8b1ac92175ca36b087f904a0519857c6be3ff", size = 85772 }, - { url = "https://files.pythonhosted.org/packages/81/f2/08ace4142eb281c12701fc3b93a10795e4d4dc7f753911d836675050f886/msgpack-1.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d99ef64f349d5ec3293688e91486c5fdb925ed03807f64d98d205d2713c60b46", size = 70868 }, -] - [[package]] name = "multiurl" version = "0.3.7" @@ -1187,48 +910,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl", hash = "sha256:054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380", size = 21524 }, ] -[[package]] -name = "netcdf4" -version = "1.7.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", -] -dependencies = [ - { name = "certifi", marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, - { name = "cftime", marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0e/76/7bc801796dee752c1ce9cd6935564a6ee79d5c9d9ef9192f57b156495a35/netcdf4-1.7.3.tar.gz", hash = "sha256:83f122fc3415e92b1d4904fd6a0898468b5404c09432c34beb6b16c533884673", size = 836095 } - [[package]] name = "netcdf4" version = "1.7.4" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] dependencies = [ - { name = "certifi", marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, - { name = "cftime", marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "certifi" }, + { name = "cftime" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/07/dfdd017641e82fadaf4e043d91fa179d34940c7d69175a3034dea877df9c/netcdf4-1.7.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b1c1a7ea3678db76bf33d14f7e202385d634db38c5e70d8cf4895971023eebb9", size = 23499427 }, - { url = "https://files.pythonhosted.org/packages/a7/6c/8cd98d166f30d378488c5235457d6af7df09f9925ab5ad03d6840543f42e/netcdf4-1.7.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d3f9497873454207f9480847d02b1b19a4bc81ad6e9166e1c17d4e2f8f3555d1", size = 22886591 }, - { url = "https://files.pythonhosted.org/packages/08/1c/ab31713a95160ebc6b4ec495cd4f03f38b235188a7e955bf33703c5039ca/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8e18294af803e80f8c0339f791901942e268c334c099bbd5f7ea8325a49801a", size = 10336881 }, - { url = "https://files.pythonhosted.org/packages/26/d7/bb16993af267acda23fe3de4ead2528cbe49043e391f732a1a4a15beec20/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b06c0b93fd0ecc1ec67a582f3ba98b7db9da1fa843c8f83fd75990e3701771e", size = 10182772 }, - { url = "https://files.pythonhosted.org/packages/9b/a6/e6fca338488a896c5e1f661ba3007e83f46700e1a59552b05013d501bc45/netcdf4-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:889ba77f084504aebaba9c6f9a88ac213431fef0e897f887cd35aef351ff7740", size = 21363337 }, { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499 }, { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667 }, { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769 }, @@ -1247,118 +939,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682 }, ] -[[package]] -name = "networkx" -version = "3.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, -] - [[package]] name = "networkx" version = "3.6.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025 } wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504 }, ] -[[package]] -name = "numpy" -version = "2.2.6" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, - { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, - { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, - { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, - { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, - { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, - { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, - { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, - { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, - { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, - { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, -] - [[package]] name = "numpy" version = "2.4.6" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807 } wheels = [ { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194 }, @@ -1449,19 +1042,6 @@ 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 } wheels = [ - { url = "https://files.pythonhosted.org/packages/10/5d/b95ca542a001135cc250a49370f282f578c8f4e46cc8617d73775297eea8/orjson-3.11.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:135869ef917b8704ea0a94e01620e0c05021c15c52036e4663baffe75e72f8ce", size = 228986 }, - { url = "https://files.pythonhosted.org/packages/80/01/be33fbff646e22f93398429ea645f20d2097aea1a6cdc1e6628e70125f83/orjson-3.11.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115ab5f5f4a0f203cc2a5f0fb09aee503a3f771aa08392949ab5ca230c4fbdbd", size = 132558 }, - { url = "https://files.pythonhosted.org/packages/4e/61/73d49333bba660a075daccca10970dc6409ce1cf42ae4046646a19468aad/orjson-3.11.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4da3c38a2083ca4aaf9c2a36776cce3e9328e6647b10d118948f3cfb4913ffe4", size = 128213 }, - { url = "https://files.pythonhosted.org/packages/1f/7d/30e844b3dac3f74aed66b1f984daf9db3c98c0328c03d965a9e8dc06449e/orjson-3.11.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53b50b0e14084b8f7e29c5ce84c5af0f1160169b30d8a6914231d97d2fe297d4", size = 135430 }, - { url = "https://files.pythonhosted.org/packages/16/64/bd815f5c610b3facc204f26ba94e87a9eb49b0d83de3d5fc1eee2402d91b/orjson-3.11.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:231742b4a11dad8d5380a435962c57e91b7c37b79be858f4ef1c0df1a259897e", size = 146178 }, - { url = "https://files.pythonhosted.org/packages/c7/35/e744fd36c79b339d27beb06068b5a08a8882ef5418804d0ce545a31f718d/orjson-3.11.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34fd2317602587321faab75ab76c623a0117e80841a6413654f04e47f339a8fb", size = 133068 }, - { url = "https://files.pythonhosted.org/packages/2a/56/d54152b67b63a0b3e556cfc549d6ce84f74d7f425ddeadc6c8a74d913da7/orjson-3.11.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71f3db16e69b667b132e0f305a833d5497da302d801508cbb051ed9a9819da47", size = 134217 }, - { url = "https://files.pythonhosted.org/packages/0b/ee/66154baf69f71c7164a268a5e888908aec5a0819d13c81d5e2755a257758/orjson-3.11.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0b34789fa0da61cf7bef0546b09c738fb195331e017e477096d129e9105ab03d", size = 141917 }, - { url = "https://files.pythonhosted.org/packages/09/d3/c5824260ca8b9d7ba82648d042a3f8f4815d18c15bb98a1f30edd1bb2d83/orjson-3.11.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:87e4d4ab280b0c87424d47695bec2182caf8cfc17879ea78dab76680194abc13", size = 415356 }, - { url = "https://files.pythonhosted.org/packages/64/cb/509c2e816fe4df641d93dc92f6a89adc8df3ada8ebdee2bd44aba3264c3c/orjson-3.11.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ace6c58523302d3b97b6ac5c38a5298a54b473762b6be82726b4265c41029f92", size = 148112 }, - { url = "https://files.pythonhosted.org/packages/db/b5/3ceae56d2e4962979eedb023ba6a46a4bb65f333960379be0ca470686220/orjson-3.11.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:97d0d932803c1b164fde11cb542a9efcb1e0f63b184537cca65887147906ff48", size = 137112 }, - { url = "https://files.pythonhosted.org/packages/d7/7a/81fa3f2c7bef79b04cf2ab7838e5ac74b1f12511ceab979759b0275d6bb4/orjson-3.11.9-cp310-cp310-win32.whl", hash = "sha256:b3afcf569c15577a9fe64627292daa3e6b3a70f4fb77a5df246a87ec21681b94", size = 131706 }, - { url = "https://files.pythonhosted.org/packages/ae/d8/b64600f9083c7f151ad39717a5877fccbeb0ef6d7efcb55f971ce00b6bee/orjson-3.11.9-cp310-cp310-win_amd64.whl", hash = "sha256:8697ab6a080a5c46edaad50e2bc5bd8c7ca5c66442d24104fa44ec74910a8244", size = 127282 }, { 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 }, { 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 }, { 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 }, @@ -1533,89 +1113,14 @@ 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.3.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "python-dateutil", marker = "python_full_version < '3.11'" }, - { name = "pytz", marker = "python_full_version < '3.11'" }, - { name = "tzdata", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763 }, - { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217 }, - { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791 }, - { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373 }, - { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444 }, - { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459 }, - { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086 }, - { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790 }, - { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831 }, - { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267 }, - { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281 }, - { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453 }, - { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361 }, - { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702 }, - { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846 }, - { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618 }, - { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212 }, - { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693 }, - { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002 }, - { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971 }, - { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722 }, - { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671 }, - { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807 }, - { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872 }, - { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371 }, - { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333 }, - { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120 }, - { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991 }, - { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227 }, - { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056 }, - { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189 }, - { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912 }, - { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160 }, - { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233 }, - { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635 }, - { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079 }, - { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049 }, - { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638 }, - { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834 }, - { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925 }, - { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071 }, - { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504 }, - { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702 }, - { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535 }, - { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582 }, - { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963 }, - { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175 }, -] - [[package]] name = "pandas" version = "3.0.3" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "python-dateutil", marker = "python_full_version >= '3.11'" }, - { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414 } wheels = [ @@ -1697,10 +1202,8 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "eccodes" }, - { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pandas" }, + { name = "pint" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763 } wheels = [ @@ -1712,51 +1215,22 @@ name = "pexpect" version = "4.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ptyprocess", marker = "(python_full_version < '3.11' and platform_machine != 'ARM64' and sys_platform == 'win32') or (python_full_version < '3.11' and sys_platform == 'emscripten') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "ptyprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] 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 = "pint" -version = "0.24.4" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -dependencies = [ - { name = "flexcache", marker = "python_full_version < '3.11'" }, - { name = "flexparser", marker = "python_full_version < '3.11'" }, - { name = "platformdirs", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029 }, -] - [[package]] name = "pint" version = "0.25.3" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] dependencies = [ - { name = "flexcache", marker = "python_full_version >= '3.11'" }, - { name = "flexparser", marker = "python_full_version >= '3.11'" }, - { name = "platformdirs", marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, + { name = "flexcache" }, + { name = "flexparser" }, + { name = "platformdirs" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106 } wheels = [ @@ -1788,12 +1262,9 @@ dependencies = [ { name = "code-meters" }, { name = "conflator" }, { name = "earthkit-time" }, - { name = "earthkit-workflows", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "earthkit-workflows", version = "0.14.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "earthkit-workflows", extra = ["vizualize"] }, + { name = "numpy" }, + { name = "pandas" }, { name = "pydantic" }, ] @@ -1809,7 +1280,7 @@ requires-dist = [ { name = "code-meters" }, { name = "conflator", specifier = ">=0.1.8" }, { name = "earthkit-time" }, - { name = "earthkit-workflows" }, + { name = "earthkit-workflows", extras = ["vizualize"] }, { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, @@ -1952,20 +1423,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146 }, - { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769 }, - { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958 }, - { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118 }, - { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876 }, - { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703 }, - { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042 }, - { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231 }, - { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388 }, - { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769 }, - { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312 }, - { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817 }, - { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085 }, - { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311 }, { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872 }, { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255 }, { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827 }, @@ -2066,12 +1523,6 @@ version = "0.20.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ce/3a/5031723c09068e9c8c2f0bc25c3a9245f2b1d1aea8396c787a408f2b95ca/pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", size = 103642 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/19/c343b14061907b629b765444b6436b160e2bd4184d17d4804bbe6381f6be/pyrsistent-0.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c3aba3e01235221e5b229a6c05f585f344734bd1ad42a8ac51493d74722bbce", size = 83416 }, - { url = "https://files.pythonhosted.org/packages/9f/4f/8342079ea331031ef9ed57edd312a9ad283bcc8adfaf268931ae356a09a6/pyrsistent-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1beb78af5423b879edaf23c5591ff292cf7c33979734c99aa66d5914ead880f", size = 118021 }, - { url = "https://files.pythonhosted.org/packages/d7/b7/64a125c488243965b7c5118352e47c6f89df95b4ac306d31cee409153d57/pyrsistent-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21cc459636983764e692b9eba7144cdd54fdec23ccdb1e8ba392a63666c60c34", size = 117747 }, - { url = "https://files.pythonhosted.org/packages/fe/a5/43c67bd5f80df9e7583042398d12113263ec57f27c0607abe9d78395d18f/pyrsistent-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5ac696f02b3fc01a710427585c855f65cd9c640e14f52abe52020722bb4906b", size = 114524 }, - { url = "https://files.pythonhosted.org/packages/8a/98/b382a87e89ca839106d874f7bf78d226b3eedb26735eb6f751f1a3375f21/pyrsistent-0.20.0-cp310-cp310-win32.whl", hash = "sha256:0724c506cd8b63c69c7f883cc233aac948c1ea946ea95996ad8b1380c25e1d3f", size = 60780 }, - { url = "https://files.pythonhosted.org/packages/37/8a/23e2193f7adea6901262e3cf39c7fe18ac0c446176c0ff0e19aeb2e9681e/pyrsistent-0.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:8441cf9616d642c475684d6cf2520dd24812e996ba9af15e606df5f6fd9d04a7", size = 63310 }, { url = "https://files.pythonhosted.org/packages/df/63/7544dc7d0953294882a5c587fb1b10a26e0c23d9b92281a14c2514bac1f7/pyrsistent-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", size = 83481 }, { url = "https://files.pythonhosted.org/packages/ae/a0/49249bc14d71b1bf2ffe89703acfa86f2017c25cfdabcaea532b8c8a5810/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", size = 120222 }, { url = "https://files.pythonhosted.org/packages/a1/94/9808e8c9271424120289b9028a657da336ad7e43da0647f62e4f6011d19b/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", size = 120002 }, @@ -2093,12 +1544,10 @@ version = "9.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, { name = "pygments" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165 } wheels = [ @@ -2131,12 +1580,10 @@ name = "pyvis" version = "0.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "ipython", version = "9.14.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "ipython" }, { name = "jinja2" }, { name = "jsonpickle" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "networkx" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ab/4b/e37e4e5d5ee1179694917b445768bdbfb084f5a59ecd38089d3413d4c70f/pyvis-0.3.2-py3-none-any.whl", hash = "sha256:5720c4ca8161dc5d9ab352015723abb7a8bb8fb443edeb07f7a322db34a97555", size = 756038 }, @@ -2148,15 +1595,6 @@ 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/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227 }, - { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019 }, - { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646 }, - { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793 }, - { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293 }, - { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872 }, - { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828 }, - { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415 }, - { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561 }, { 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 }, @@ -2215,16 +1653,6 @@ dependencies = [ ] 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/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850 }, - { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380 }, - { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421 }, - { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149 }, - { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070 }, - { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441 }, - { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529 }, - { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276 }, - { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208 }, - { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766 }, { 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 }, @@ -2267,11 +1695,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, - { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266 }, - { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206 }, - { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747 }, - { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371 }, - { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862 }, { 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 }, @@ -2284,13 +1707,13 @@ name = "qubed" version = "0.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "frozendict", marker = "python_full_version >= '3.11'" }, - { name = "humanize", marker = "python_full_version >= '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "objsize", marker = "python_full_version >= '3.11'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "protobuf", marker = "python_full_version >= '3.11'" }, - { name = "requests", marker = "python_full_version >= '3.11'" }, + { name = "frozendict" }, + { name = "humanize" }, + { name = "numpy" }, + { name = "objsize" }, + { name = "pandas" }, + { name = "protobuf" }, + { name = "requests" }, ] sdist = { url = "https://files.pythonhosted.org/packages/12/a2/d4cd7fbc41fef2b308f10ed3f9c5bb1cf40f338ff3a0e37692325ba28b77/qubed-0.3.1.tar.gz", hash = "sha256:fadcf4be1668f0cfc58fcf430a15613e0f53f0df4e07fd05694c9caba39e8258", size = 15152020 } wheels = [ @@ -2381,8 +1804,7 @@ version = "0.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036 } @@ -2430,146 +1852,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl", hash = "sha256:d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142", size = 25616 }, ] -[[package]] -name = "rpds-py" -version = "0.30.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -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/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490 }, - { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751 }, - { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696 }, - { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136 }, - { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699 }, - { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022 }, - { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522 }, - { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579 }, - { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305 }, - { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503 }, - { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322 }, - { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792 }, - { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901 }, - { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823 }, - { 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/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086 }, - { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053 }, - { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763 }, - { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951 }, - { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622 }, - { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492 }, - { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080 }, - { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680 }, - { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589 }, - { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289 }, - { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737 }, - { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120 }, - { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782 }, - { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463 }, - { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868 }, - { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887 }, - { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904 }, - { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945 }, - { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783 }, - { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021 }, - { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589 }, - { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025 }, - { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895 }, - { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799 }, - { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731 }, - { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027 }, - { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020 }, - { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139 }, - { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224 }, - { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645 }, - { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443 }, - { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375 }, - { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850 }, - { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812 }, - { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841 }, - { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149 }, - { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843 }, - { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507 }, - { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949 }, - { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790 }, - { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217 }, - { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806 }, - { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341 }, - { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768 }, - { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099 }, - { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192 }, - { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080 }, - { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841 }, - { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670 }, - { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005 }, - { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112 }, - { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049 }, - { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661 }, - { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606 }, - { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126 }, - { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371 }, - { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298 }, - { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604 }, - { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391 }, - { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868 }, - { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747 }, - { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795 }, - { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330 }, - { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194 }, - { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340 }, - { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765 }, - { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834 }, - { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470 }, - { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630 }, - { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148 }, - { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030 }, - { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570 }, - { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532 }, - { 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 = "rpds-py" version = "2026.5.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459 } wheels = [ { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609 }, @@ -2735,15 +2021,6 @@ 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 = "tblib" -version = "3.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f4/8a/14c15ae154895cc131174f858c707790d416c444fc69f93918adfd8c4c0b/tblib-3.2.2.tar.gz", hash = "sha256:e9a652692d91bf4f743d4a15bc174c0b76afc750fe8c7b6d195cc1c1d6d2ccec", size = 35046 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/be/5d2d47b1fb58943194fb59dcf222f7c4e35122ec0ffe8c36e18b5d728f0b/tblib-3.2.2-py3-none-any.whl", hash = "sha256:26bdccf339bcce6a88b2b5432c988b266ebbe63a4e593f6b578b1d2e723d2b76", size = 12893 }, -] - [[package]] name = "termcolor" version = "3.3.0" @@ -2753,60 +2030,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/33/d1/8bb87d21e9aeb323cc03034f5eaf2c8f69841e40e4853c2627edf8111ed3/termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5", size = 7734 }, ] -[[package]] -name = "tomli" -version = "2.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704 }, - { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454 }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561 }, - { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824 }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227 }, - { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859 }, - { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204 }, - { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084 }, - { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285 }, - { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924 }, - { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018 }, - { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948 }, - { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341 }, - { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159 }, - { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290 }, - { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141 }, - { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847 }, - { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088 }, - { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866 }, - { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887 }, - { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704 }, - { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628 }, - { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180 }, - { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674 }, - { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976 }, - { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755 }, - { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265 }, - { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726 }, - { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859 }, - { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713 }, - { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084 }, - { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973 }, - { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223 }, - { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973 }, - { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082 }, - { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490 }, - { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263 }, - { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736 }, - { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717 }, - { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461 }, - { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855 }, - { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144 }, - { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683 }, - { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196 }, - { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393 }, - { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, -] - [[package]] name = "toolz" version = "1.1.0" @@ -2816,23 +2039,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093 }, ] -[[package]] -name = "tornado" -version = "6.5.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/50/57/6d7303a77ae439d9189108f76c0c4fd89ee5e2cc8387bffb55232565c4ed/tornado-6.5.6.tar.gz", hash = "sha256:9a365179fe8ff6b8766f602c0f67c185d778193e9bdd828b19f0b6ed7764177d", size = 518139 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/0d/b4f481e18c5a51864e6d12b9a05ecf72919696680b747c958c3fc1f4fbae/tornado-6.5.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:65fcfaafb079435c2c19dc9e07c0f1cf0fa9051759ed0a7d0a3ba7ea7f64919c", size = 447737 }, - { url = "https://files.pythonhosted.org/packages/9e/9c/5430c39fcab1144d35860f457b15e9c08b4bc7ac86764354204e983d6183/tornado-6.5.6-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:38bc01b4acacded2de63ae78023548e41ebe6fbed3ec05a796d7ae3ad893887e", size = 445899 }, - { url = "https://files.pythonhosted.org/packages/8b/79/fa7e14a2f939c807a8d30619b4eb604eab219601b78792516ebe22d40cf9/tornado-6.5.6-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b942e6a137fda31ff54bf8e6e2c8d1c37f1f50583f3ed53fb840b53b9601d104", size = 448964 }, - { url = "https://files.pythonhosted.org/packages/a7/71/bd67d5f5199f937dafe03a49a37989f60f600ff6fef34c79412a829d97bd/tornado-6.5.6-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8666946e70171b8c3f1fc9b7876fac492e84822c4c7f3746f4e8f8bc9ac92a79", size = 449935 }, - { url = "https://files.pythonhosted.org/packages/cc/a4/c24388c9cf5b3c3a513b56a158af9f23092c9a2810d789e294310797df21/tornado-6.5.6-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c34cfab7ad6d104f052f55de06d39bbafc5885cfeb4da688803308dbcfa90b7", size = 449767 }, - { url = "https://files.pythonhosted.org/packages/a5/eb/6a07ad550c3f7b37244bd0becdf293ec3d3e961783d8b720a97df50de1b2/tornado-6.5.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:385f35e4e22fb52551dfcda4cdc8c30c61c2c001aef5ddad99cdfe116952efd3", size = 449174 }, - { url = "https://files.pythonhosted.org/packages/bb/84/3469e098dccdb6763130e06aacd786bb4363fca7b590a55c101ddf34ed30/tornado-6.5.6-cp39-abi3-win32.whl", hash = "sha256:db475f1b67b2809b10bb16264829087724ca8d24fe4ed47f7b8675cae453ef86", size = 450230 }, - { url = "https://files.pythonhosted.org/packages/d2/3c/273a04e0b9dd9016f1685cca0c1c8795a71ac88a34a8c889a0b443483226/tornado-6.5.6-cp39-abi3-win_amd64.whl", hash = "sha256:6739bf1e8eb09230f1280ddbd3236f0309db70f2c551a8dbc40f62babdf82f79", size = 450667 }, - { url = "https://files.pythonhosted.org/packages/02/98/0cffe22a224f60c5fb1e3aa0b76f9da2e1ca78b0e9545e3d077c68ce60a7/tornado-6.5.6-cp39-abi3-win_arm64.whl", hash = "sha256:2543597b24a695d72338a9a77818362d72387c03ae173f1f169eadc5c91466ac", size = 449690 }, -] - [[package]] name = "tqdm" version = "4.67.3" @@ -2920,64 +2126,27 @@ wheels = [ [[package]] name = "wcwidth" -version = "0.7.0" +version = "0.8.2" 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/34/74/c6428f875774288bec1396f5bfcbc2d925700a4dad61727fd5f2b12f249d/wcwidth-0.8.2.tar.gz", hash = "sha256:91fbef97204b96a3d4d421609b80340b760cf33e26da123ff243d76b1fda8dda", size = 1466253 } 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 = "xarray" -version = "2025.6.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "packaging", marker = "python_full_version < '3.11'" }, - { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739 }, + { url = "https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl", hash = "sha256:d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85", size = 323166 }, ] [[package]] name = "xarray" version = "2026.4.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311 } wheels = [ { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326 }, ] -[[package]] -name = "zict" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d1/ac/3c494dd7ec5122cff8252c1a209b282c0867af029f805ae9befd73ae37eb/zict-3.0.0.tar.gz", hash = "sha256:e321e263b6a97aafc0790c3cfb3c04656b7066e6738c37fffcca95d803c9fba5", size = 33238 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl", hash = "sha256:5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae", size = 43332 }, -] - [[package]] name = "zipp" version = "4.1.0" From 8648e50cad34b111e6ac22f6dbbc2ada0243191b Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 1 Jul 2026 11:14:03 +0000 Subject: [PATCH 32/95] Add earthkit-workflows dependency version --- pproc-core/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 780a5441..85e64332 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -33,7 +33,7 @@ dependencies = [ "code-meters", "conflator>=0.1.8", "earthkit-time", - "earthkit-workflows[vizualize]", + "earthkit-workflows[vizualize]>=0.15.1", "numpy", "pandas", "pydantic", From 1dca8cbf22fca545cfbded83745ea6e798b20d4b Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 1 Jul 2026 12:13:36 +0000 Subject: [PATCH 33/95] Bug fix --- pproc-core/src/ppcore/products/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index ff9d6202..c53c4c97 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -53,7 +53,7 @@ def action_from_outputs( sources: Optional[Action] = None, metadata: Optional[dict] = None, ) -> Action: - inputs = None if sources is None else datacubes(sources) + inputs = None if sources is None else datacubes(sources.nodes) nodes = [] for request in expand(requests): nodes.append( From 2ab75108ec2d83766d5572e42025d15783608ccf Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 1 Jul 2026 12:42:23 +0000 Subject: [PATCH 34/95] Check validation data --- pproc-core/src/ppcore/configs/common/input.py | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/pproc-core/src/ppcore/configs/common/input.py b/pproc-core/src/ppcore/configs/common/input.py index b3ba791b..38e69a63 100644 --- a/pproc-core/src/ppcore/configs/common/input.py +++ b/pproc-core/src/ppcore/configs/common/input.py @@ -27,22 +27,23 @@ class Input(PProcBaseModel): @field_validator("sources", mode="before") @classmethod def validate_sources(cls, data: Any) -> Any: - for index, source in enumerate(data): - if isinstance(source, str): - name, loc = split_location(source, default="file") - config = {"name": name} - if loc: - if name == "fdb": - config["config"] = loc - elif name == "file": - config["file"] = loc - elif name == "file-pattern": - config["pattern"] = loc - else: - raise ValueError( - f"Source type {name} does not support location specification" - ) - data[index] = config + if isinstance(data, list): + for index, source in enumerate(data): + if isinstance(source, str): + name, loc = split_location(source, default="file") + config = {"name": name} + if loc: + if name == "fdb": + config["config"] = loc + elif name == "file": + config["file"] = loc + elif name == "file-pattern": + config["pattern"] = loc + else: + raise ValueError( + f"Source type {name} does not support location specification" + ) + data[index] = config return data def base_request(self) -> dict: From f1a4d63d9c11fe0ec85781df618573bff7ac3ba9 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 1 Jul 2026 12:46:05 +0000 Subject: [PATCH 35/95] Fix defaults --- pproc-core/src/ppcore/configs/product/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pproc-core/src/ppcore/configs/product/__init__.py b/pproc-core/src/ppcore/configs/product/__init__.py index a80acf50..5d546871 100644 --- a/pproc-core/src/ppcore/configs/product/__init__.py +++ b/pproc-core/src/ppcore/configs/product/__init__.py @@ -38,8 +38,8 @@ def from_schema( "original": request, "inputs": inputs, }, - "sources": request.pop("sources", None), - "targets": request.pop("targets", None), + "sources": request.pop("sources", []), + "targets": request.pop("targets", []), "metadata": metadata, **schema, } From 6f8cc60b6a546813d198cdd388b2635f1677861f Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 1 Jul 2026 15:22:09 +0000 Subject: [PATCH 36/95] Add request metadata to final action --- .../workflows/plugins/pproc/fluent.py | 9 ++++ .../src/ppcore/configs/product/ensemble.py | 45 +++++++++---------- pproc-core/src/ppcore/products/ensemble.py | 15 +++++-- .../tests/ppcore/products/test_products.py | 8 +++- pproc-core/uv.lock | 2 +- 5 files changed, 51 insertions(+), 28 deletions(-) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 41faf6ee..88f8a09c 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -815,3 +815,12 @@ def from_source( raise ValueError("Join key must be specified for multiple requests") all_actions = all_actions.join(new_action, join_key) return all_actions + + +def set_scalar_coords( + action: fluent.Action, coords: dict[str, Union[int, str]], override: bool = False +): + for dim, value in coords.items(): + if override: + action._squeeze_dimension(dim, drop=True) + action._add_dimension(dim, value) diff --git a/pproc-core/src/ppcore/configs/product/ensemble.py b/pproc-core/src/ppcore/configs/product/ensemble.py index e4ecfd6e..33f8173f 100644 --- a/pproc-core/src/ppcore/configs/product/ensemble.py +++ b/pproc-core/src/ppcore/configs/product/ensemble.py @@ -7,7 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Any, Optional, Union, Literal, Annotated +from typing import Any, Union, Literal, Annotated from pydantic import Field, model_validator from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel @@ -36,32 +36,31 @@ class Ensemble(PProcBaseModel): Field(discriminator="operation"), ] inputs: EnsembleInputModel - output: Optional[Output] = None + output: Output @model_validator(mode="before") def validate_config(cls, data: Any) -> Any: - if isinstance(data, dict): - if "requests" in data: - requests = data.pop("requests") - input_config = data.pop("input", {}) - original = requests.pop("original") - sources = data.pop("sources", []) - if isinstance(sources, dict): - sources = sources["fc"] - if isinstance(sources, str): - sources = [sources] - data["inputs"] = { - "fc": { - "requests": requests.pop("inputs"), - "sources": sources, - **input_config, - } - } - if targets := data.pop("targets", None): - data["output"] = { - "targets": targets if isinstance(targets, list) else [targets], - "request": extract_mars(original), + if isinstance(data, dict) and "requests" in data: + requests = data.pop("requests") + input_config = data.pop("input", {}) + original = requests.pop("original") + sources = data.pop("sources", []) + if isinstance(sources, dict): + sources = sources["fc"] + if isinstance(sources, str): + sources = [sources] + data["inputs"] = { + "fc": { + "requests": requests.pop("inputs"), + "sources": sources, + **input_config, } + } + targets = data.pop("targets", []) + data["output"] = { + "targets": targets if isinstance(targets, list) else [targets], + "request": extract_mars(original), + } if metadata := data.pop("metadata", None): stat_metadata = data["statistics"].setdefault("metadata", {}) stat_metadata.update(metadata) diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index b34ae498..ce8a13d9 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -11,8 +11,11 @@ from dataclasses import dataclass from earthkit.workflows.nodetree import nodetree_dimensions -from earthkit.workflows.plugins.pproc.fluent import Action -from earthkit.workflows.plugins.pproc.fluent import from_source +from earthkit.workflows.plugins.pproc.fluent import ( + Action, + from_source, + set_scalar_coords, +) from earthkit.workflows.plugins.pproc.utils.request import Request from ppcore.utils.requests import validate_request @@ -43,6 +46,7 @@ def source(self, ensemble_dim: Optional[str] = None) -> Action: [req], input_config.dtype, ) + new_action = new_action.set_path(f"/levtype={x['levtype']}") if "number" in x: new_action = new_action.expand( "number", @@ -88,11 +92,16 @@ def action( **self.config.statistics.model_dump(), ) - if self.config.output is not None: + if len(self.config.output.targets) > 0: output_config = self.config.output.model_dump() out_metadata = output_config["metadata"].copy() out_metadata.update(self.output_overrides) ret = ret.write(output_config["targets"], metadata=out_metadata) + set_scalar_coords( + ret, + {k: str(v) for k, v in self.config.output.request.items()}, + override=True, + ) return ret def in_mars(self, sources: Optional[list[str]] = None) -> Iterator[dict]: diff --git a/pproc-core/tests/ppcore/products/test_products.py b/pproc-core/tests/ppcore/products/test_products.py index 26fc5a2c..2e21f70a 100644 --- a/pproc-core/tests/ppcore/products/test_products.py +++ b/pproc-core/tests/ppcore/products/test_products.py @@ -16,7 +16,7 @@ from earthkit.workflows.plugins.pproc.fluent import from_source from earthkit.workflows.plugins.pproc.utils.request import Request -from ppcore.products import product_from_output, graph_from_outputs +from ppcore.products import product_from_output, graph_from_outputs, action_from_outputs from ppcore.utils.requests import expand from conftest import SCHEMA @@ -39,6 +39,12 @@ def test_graph_construction(requests): graph_from_outputs(output_requests, SCHEMA) +def test_action_construction(): + with open(os.path.join(ROOT_DIR, "templates", "ensms.yaml"), "r") as f: + output_requests = yaml.safe_load(f) + action_from_outputs(output_requests, SCHEMA) + + @pytest.mark.parametrize( "requests", [ diff --git a/pproc-core/uv.lock b/pproc-core/uv.lock index c832e49c..04f61dab 100644 --- a/pproc-core/uv.lock +++ b/pproc-core/uv.lock @@ -1280,7 +1280,7 @@ requires-dist = [ { name = "code-meters" }, { name = "conflator", specifier = ">=0.1.8" }, { name = "earthkit-time" }, - { name = "earthkit-workflows", extras = ["vizualize"] }, + { name = "earthkit-workflows", extras = ["vizualize"], specifier = ">=0.15.1" }, { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, From dbb3324261c5897125d248905ea9e4abb6b1698f Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 1 Jul 2026 16:52:27 +0000 Subject: [PATCH 37/95] Tighten config generation functions --- pproc-core/src/ppcore/configs/__init__.py | 24 ++++- .../tests/ppcore/products/test_products.py | 67 +++++++++++--- .../tests/ppcore/schema/test_input_schema.py | 2 +- pproc-core/tests/schema.yaml | 90 ++++++++++--------- 4 files changed, 125 insertions(+), 58 deletions(-) diff --git a/pproc-core/src/ppcore/configs/__init__.py b/pproc-core/src/ppcore/configs/__init__.py index 7df948a2..2dd541b2 100644 --- a/pproc-core/src/ppcore/configs/__init__.py +++ b/pproc-core/src/ppcore/configs/__init__.py @@ -13,7 +13,17 @@ def config_from_output( **overrides, ) -> ProductConfig: schema = Schema.from_file(pproc_schema) - schema_config = schema.config_from_output(request, inputs=inputs) + if inputs is None: + schema_config = schema.config_from_output(request) + else: + schema_configs = list( + schema.config_from_input(input_requests=inputs, output_template=request) + ) + if len(schema_configs) != 1: + raise ValueError( + f"Expected a single schema configuration from input requests, got {len(schema_configs)} for output request {request}" + ) + schema_config = schema_configs[0] return from_schema(schema_config, request, metadata, **overrides) @@ -29,7 +39,17 @@ def from_outputs( """ schema = Schema.from_file(pproc_schema) for request in expand(requests): - schema_config = schema.config_from_output(request, inputs=inputs) + if inputs is None: + schema_config = schema.config_from_output(request) + else: + schema_configs = list( + schema.config_from_input(input_requests=inputs, output_template=request) + ) + if len(schema_configs) != 1: + raise ValueError( + f"Expected a single schema configuration from input requests, got {len(schema_configs)} for output request {request}" + ) + schema_config = schema_configs[0] yield from_schema(schema_config, request, metadata, **overrides) diff --git a/pproc-core/tests/ppcore/products/test_products.py b/pproc-core/tests/ppcore/products/test_products.py index 2e21f70a..0de59cdb 100644 --- a/pproc-core/tests/ppcore/products/test_products.py +++ b/pproc-core/tests/ppcore/products/test_products.py @@ -13,6 +13,7 @@ import yaml from earthkit.workflows.graph import Graph +from earthkit.workflows.fluent import merge from earthkit.workflows.plugins.pproc.fluent import from_source from earthkit.workflows.plugins.pproc.utils.request import Request @@ -49,10 +50,9 @@ def test_action_construction(): "requests", [ os.path.join(ROOT_DIR, "templates", "ensms.yaml"), - os.path.join(ROOT_DIR, "templates", "prob.yaml"), os.path.join(ROOT_DIR, "templates", "quantiles.yaml"), ], - ids=["ensms", "prob", "quantiles"], + ids=["ensms", "quantiles"], ) def test_custom_source(requests): with open(requests, "r") as f: @@ -60,18 +60,59 @@ def test_custom_source(requests): graph = Graph([]) for req in expand(output_requests): - product = product_from_output(req, SCHEMA, metadata={"edition": 2}) - requests = [] - for request in product.config.inputs.fc.requests: - req = Request(request) - if "number" not in req: - req.make_dim("number", 0) - requests.append(req) - sources = from_source( - ["fdb"], - requests, - join_key="number", + inputs = [ + { + "stream": "oper", + "type": "fc", + "step": list(range(0, 24, 3)), + "param": ["228", "167"], + "levtype": "sfc", + }, + { + "stream": "enfo", + "type": "pf", + "step": list(range(0, 24, 3)), + "param": ["228", "167"], + "number": list(range(1, 5)), + "levtype": "sfc", + }, + { + "stream": "oper", + "type": "fc", + "step": list(range(0, 24, 3)), + "param": ["130"], + "levtype": "pl", + "levelist": [250, 500, 850], + }, + { + "stream": "enfo", + "type": "pf", + "step": list(range(0, 24, 3)), + "param": ["130"], + "levtype": "pl", + "levelist": [250, 500, 850], + "number": list(range(1, 5)), + }, + ] + product = product_from_output( + req, SCHEMA, inputs=inputs, metadata={"edition": 2} ) + source_actions = {} + for levtype in ["sfc", "pl"]: + source_requests = [] + for request in inputs: + if request["levtype"] != levtype: + continue + req = Request(request) + if "number" not in req: + req.make_dim("number", 0) + source_requests.append(req) + source_actions[f"/levtype={levtype}"] = from_source( + ["fdb"], + source_requests, + join_key="number", + ) + sources = merge(**source_actions) new_action = product.action( ensemble_dim="number", forecast=sources, diff --git a/pproc-core/tests/ppcore/schema/test_input_schema.py b/pproc-core/tests/ppcore/schema/test_input_schema.py index c98967da..72d96ae5 100644 --- a/pproc-core/tests/ppcore/schema/test_input_schema.py +++ b/pproc-core/tests/ppcore/schema/test_input_schema.py @@ -496,7 +496,7 @@ def test_input_format(): } ], {"type": "fc"}, - 18, + 20, ], [ [ diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index 4138f78e..d2e7bdcb 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -3795,53 +3795,59 @@ inputs: request: param: "{param}" "200142": - from_inputs: false - forecast: - inputs: - request: - param: "142" - derive_step: - type: deaccumulate + filter:type: + fc/cf/pf/em/es/pb: + forecast: + inputs: + request: + param: "142" + derive_step: + type: deaccumulate "200143": - from_inputs: false - forecast: - inputs: - request: - param: "143" - derive_step: - type: deaccumulate + filter:type: + fc/cf/pf/em/es/pb: + forecast: + inputs: + request: + param: "143" + derive_step: + type: deaccumulate "200144": - from_inputs: false - forecast: - inputs: - request: - param: "144" - derive_step: - type: deaccumulate + filter:type: + fc/cf/pf/em/es/pb: + forecast: + inputs: + request: + param: "144" + derive_step: + type: deaccumulate "200189": - from_inputs: false - forecast: - inputs: - request: - param: "189" - derive_step: - type: deaccumulate + filter:type: + fc/cf/pf/em/es/pb: + forecast: + inputs: + request: + param: "189" + derive_step: + type: deaccumulate "200228": - from_inputs: false - forecast: - inputs: - request: - param: "228" - derive_step: - type: deaccumulate + filter:type: + fc/cf/pf/em/es/pb: + forecast: + inputs: + request: + param: "228" + derive_step: + type: deaccumulate "228216": - from_inputs: false - forecast: - inputs: - request: - param: "228216" - derive_step: - type: deaccumulate + filter:type: + fc/cf/pf/em/es/pb: + forecast: + inputs: + request: + param: "228216" + derive_step: + type: deaccumulate "201": filter:type: fcmean/fcstdev/fcmin/fcmax: From 81057abce60d74cc1cf480c44644880fd45b01a6 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Thu, 2 Jul 2026 13:34:21 +0000 Subject: [PATCH 38/95] Update set_scalar_coords --- .../workflows/plugins/pproc/fluent.py | 20 +++++-- pproc-core/src/ppcore/products/ensemble.py | 1 + pproc-core/src/ppcore/schema/schema.py | 58 +++++++++++-------- 3 files changed, 50 insertions(+), 29 deletions(-) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 88f8a09c..bc334941 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -12,7 +12,7 @@ import numpy as np from earthkit.workflows.backends.earthkit import FieldListBackend -from earthkit.workflows.nodetree import nodetree_size +from earthkit.workflows.nodetree import nodetree_size, nodetree_from_dict from earthkit.workflows import fluent from earthkit.workflows.nodetree import nodetree_arrays, nodetree_dimensions @@ -818,9 +818,19 @@ def from_source( def set_scalar_coords( - action: fluent.Action, coords: dict[str, Union[int, str]], override: bool = False + action: Action, + coords: dict[str, Union[int, str]], + override: bool = False, + make_dim: bool = False, ): + nodetree = {npath: narray for npath, narray in nodetree_arrays(action.nodes)} for dim, value in coords.items(): - if override: - action._squeeze_dimension(dim, drop=True) - action._add_dimension(dim, value) + for npath, narray in nodetree.items(): + if override and dim in narray.dims and len(narray.coords[dim]) == 1: + narray = narray.squeeze(dim, drop=True) + narray = narray.expand_dims({dim: [value]}) + + if not make_dim: + narray = narray.squeeze(dim, drop=False) + nodetree[npath] = narray + action.nodes = nodetree_from_dict(nodetree) diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index ce8a13d9..4b5f3d7a 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -101,6 +101,7 @@ def action( ret, {k: str(v) for k, v in self.config.output.request.items()}, override=True, + make_dim=True, ) return ret diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index 003f1bbe..7d96c44c 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -35,14 +35,9 @@ def from_file(cls, schema_path: str) -> Self: schema = yaml.safe_load(f) return cls(**schema) - def config_from_output( - self, output_request: dict, inputs: Optional[list[dict]] = None - ) -> dict: + def config_from_output(self, output_request: dict) -> dict: config = self.config_schema.config(output_request) - if inputs is not None: - inputs = [validate_request(x) for x in inputs] - else: - inputs = list(self.param_schema.inputs(output_request, self.step_schema)) + inputs = list(self.param_schema.inputs(output_request, self.step_schema)) # Set metadata base_request = inputs[0] @@ -68,24 +63,39 @@ def config_from_input( output_template: Optional[dict] = None, entrypoint: Optional[str] = None, ) -> Iterator[dict]: - reconstructed = self.config_schema.reconstruct( - output_template=( - None if output_template is None else validate_request(output_template) - ), - **({} if entrypoint is None else {"entrypoint": entrypoint}), - ) - matching_types = pd.DataFrame([x for x, _ in reconstructed]) - output_keys = [] if output_template is None else list(output_template.keys()) - drop = [ - x for x in self.config_schema.all_filters.difference(["type"] + output_keys) - ] - matching_types.drop(columns=drop, inplace=True, errors="ignore") - matching_types.drop_duplicates(inplace=True) - for template in matching_types.to_dict(orient="records"): - for output, inputs in self.param_schema.outputs( - input_requests, self.step_schema, output_template=template + # If entrypoint is provided, find output templates provided by that entrypoint + if entrypoint is not None: + reconstructed = self.config_schema.reconstruct( + output_template=( + None + if output_template is None + else validate_request(output_template) + ), + **({} if entrypoint is None else {"entrypoint": entrypoint}), + ) + matching_types = pd.DataFrame([x for x, _ in reconstructed]) + output_keys = ( + [] if output_template is None else list(output_template.keys()) + ) + drop = [ + x + for x in self.config_schema.all_filters.difference( + ["type"] + output_keys + ) + ] + matching_types.drop(columns=drop, inplace=True, errors="ignore") + matching_types.drop_duplicates(inplace=True) + output_templates = matching_types.to_dict(orient="records") + else: + output_templates = [output_template] + + for template in output_templates: + for output, inputs in self.outputs_from_inputs( + input_requests, output_template=template ): - yield self.config_from_output(output, inputs) + out_config = self.config_from_output(output) + out_config["inputs"] = inputs + yield out_config def outputs_from_inputs( self, From 621863ef74d79e7472850ca836d35b297765eb78 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 6 Jul 2026 09:35:33 +0000 Subject: [PATCH 39/95] Tidy --- .../workflows/plugins/pproc/fluent.py | 23 ++----------------- pproc-core/src/ppcore/configs/__init__.py | 9 ++++---- pproc-core/src/ppcore/products/__init__.py | 9 ++++---- pproc-core/src/ppcore/products/ensemble.py | 4 +--- pproc-core/src/ppcore/schema/schema.py | 6 ++--- 5 files changed, 16 insertions(+), 35 deletions(-) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index bc334941..56b843a8 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -12,7 +12,7 @@ import numpy as np from earthkit.workflows.backends.earthkit import FieldListBackend -from earthkit.workflows.nodetree import nodetree_size, nodetree_from_dict +from earthkit.workflows.nodetree import nodetree_size from earthkit.workflows import fluent from earthkit.workflows.nodetree import nodetree_arrays, nodetree_dimensions @@ -525,7 +525,7 @@ def thermal_index( new_action = new_action.join(dependency, dim) try: selection = new_action.sel(param=(config["params"])) - except KeyError: + except IndexError: selection = new_action config_metadata = config.get("metadata", {}) new_metadata = ( @@ -815,22 +815,3 @@ def from_source( raise ValueError("Join key must be specified for multiple requests") all_actions = all_actions.join(new_action, join_key) return all_actions - - -def set_scalar_coords( - action: Action, - coords: dict[str, Union[int, str]], - override: bool = False, - make_dim: bool = False, -): - nodetree = {npath: narray for npath, narray in nodetree_arrays(action.nodes)} - for dim, value in coords.items(): - for npath, narray in nodetree.items(): - if override and dim in narray.dims and len(narray.coords[dim]) == 1: - narray = narray.squeeze(dim, drop=True) - narray = narray.expand_dims({dim: [value]}) - - if not make_dim: - narray = narray.squeeze(dim, drop=False) - nodetree[npath] = narray - action.nodes = nodetree_from_dict(nodetree) diff --git a/pproc-core/src/ppcore/configs/__init__.py b/pproc-core/src/ppcore/configs/__init__.py index 2dd541b2..e7111d62 100644 --- a/pproc-core/src/ppcore/configs/__init__.py +++ b/pproc-core/src/ppcore/configs/__init__.py @@ -1,4 +1,5 @@ -from typing import Iterator, Optional +import os +from typing import Iterator, Optional, Union from ppcore.schema.schema import Schema from ppcore.configs.product import from_schema, ProductConfig @@ -7,7 +8,7 @@ def config_from_output( request: dict, - pproc_schema: str, + pproc_schema: Union[str, os.PathLike], inputs: Optional[list[dict]] = None, metadata: Optional[dict] = None, **overrides, @@ -29,7 +30,7 @@ def config_from_output( def from_outputs( requests: list[dict], - pproc_schema: str, + pproc_schema: Union[str, os.PathLike], inputs: Optional[list[dict]] = None, metadata: Optional[dict] = None, **overrides, @@ -55,7 +56,7 @@ def from_outputs( def from_inputs( requests: list[dict], - pproc_schema: str, + pproc_schema: Union[str, os.PathLike], inputs: Optional[list[dict]] = None, metadata: Optional[dict] = None, **overrides, diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index c53c4c97..a5cae572 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -1,4 +1,5 @@ -from typing import Optional +import os +from typing import Optional, Union from earthkit.workflows.graph import Graph, deduplicate_nodes from earthkit.workflows.fluent import Action @@ -28,7 +29,7 @@ def product_from_config( def product_from_output( request: dict, - pproc_schema: str, + pproc_schema: Union[str, os.PathLike], inputs: Optional[list[dict]] = None, metadata: Optional[dict] = None, ) -> Product: @@ -49,7 +50,7 @@ def product_from_output( def action_from_outputs( requests: list[dict], - pproc_schema: str, + pproc_schema: Union[str, os.PathLike], sources: Optional[Action] = None, metadata: Optional[dict] = None, ) -> Action: @@ -68,7 +69,7 @@ def action_from_outputs( def graph_from_outputs( requests: list[dict], - pproc_schema: str, + pproc_schema: Union[str, os.PathLike], metadata: Optional[dict] = None, ) -> Product: """ diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index 4b5f3d7a..d09e4fae 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -14,7 +14,6 @@ from earthkit.workflows.plugins.pproc.fluent import ( Action, from_source, - set_scalar_coords, ) from earthkit.workflows.plugins.pproc.utils.request import Request @@ -97,8 +96,7 @@ def action( out_metadata = output_config["metadata"].copy() out_metadata.update(self.output_overrides) ret = ret.write(output_config["targets"], metadata=out_metadata) - set_scalar_coords( - ret, + ret.set_scalar_coords( {k: str(v) for k, v in self.config.output.request.items()}, override=True, make_dim=True, diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index 7d96c44c..24d57e0d 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -7,8 +7,8 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Iterator -from typing import Optional +import os +from typing import Iterator, Optional, Union import numpy as np import pandas as pd @@ -30,7 +30,7 @@ def __init__(self, config: dict, inputs: dict, windows: dict): self.step_schema = StepSchema(windows) @classmethod - def from_file(cls, schema_path: str) -> Self: + def from_file(cls, schema_path: Union[str, os.PathLike]) -> Self: with open(schema_path, "r") as f: schema = yaml.safe_load(f) return cls(**schema) From 317f79fae5f8ddff808cbcd47586ba241ca871c5 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 7 Jul 2026 14:03:46 +0000 Subject: [PATCH 40/95] Update threshold metadata and config --- .../plugins/pproc/config/threshold.py | 30 ++++++++++++------- .../plugins/pproc/metadata/threshold.py | 19 ++++++++---- pproc/tests/config/test_param.py | 2 +- pproc/tests/config/types/test_extreme.py | 2 +- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py index f1e8be05..9cc330d0 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py @@ -17,14 +17,24 @@ class Threshold(PProcBaseModel): @model_validator(mode="before") def validate_threshold(cls, data: Any) -> Any: - if "comparison" in data: - data["lower_comparison"] = data.pop("comparison") - data["lower_value"] = data.pop("value") - data["lower_scale_factor"] = data.pop("scale_factor", 0) - if any(k in data for k in ["upper_comparison", "upper_value"]) and not all( - k in data for k in ["upper_comparison", "upper_value"] - ): - raise ValueError( - "Both upper_comparison and upper_value must be provided together" - ) + if isinstance(data, dict): + if "comparison" in data: + data["lower_comparison"] = data.pop("comparison") + data["lower_value"] = data.pop("value") + data["lower_scale_factor"] = data.pop("scale_factor", 0) + if any(k in data for k in ["upper_comparison", "upper_value"]) and not all( + k in data for k in ["upper_comparison", "upper_value"] + ): + raise ValueError( + "Both upper_comparison and upper_value must be provided together" + ) + # Derive scale factors for custom thresholds + for value in ["lower_value", "upper_value"]: + upper_or_lower = value.split("_")[0] + if isinstance(data.get(value), float) and f"{upper_or_lower}_scale_factor" not in data: + scale_factor = 0 + while abs(data[value] * 10**scale_factor) < 1: + scale_factor += 1 + data[f"{upper_or_lower}_scale_factor"] = scale_factor + data[value] = round(data[value] * 10**scale_factor) return data diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py index 141bbbbc..48198550 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py @@ -39,16 +39,25 @@ def threshold_metadata( ) elif edition == 2: # GRIB 2 has probability types above/below upper/lower limits (see Code Table 4.9) + # where the threshold value can correspond to either limit. # Default is to use limit_type=lower probability types - # where the threshold value can correspond to either limit. The default limit type - # is upper for "<" and lower for ">", consistent with the GRIB 1 to GRIB 2 conversion - # assumption. - limit_type = "lower" prob_types = { "<": {"upper": 4, "lower": 0}, ">": {"upper": 1, "lower": 3}, } - probability_type = prob_types[comparison][limit_type] + if not metadata.get("probabilityType", None): + limit_type = "lower" + probability_type = prob_types[comparison][limit_type] + else: + probability_type = metadata["probabilityType"] + if probability_type in [0, 3]: + limit_type = "lower" + elif probability_type in [1, 4]: + limit_type = "upper" + else: + raise ValueError( + f"Unsupported probability type {probability_type} for threshold comparison {comparison}" + ) missing = "Upper" if limit_type == "lower" else "Lower" thr_metadata.update( { diff --git a/pproc/tests/config/test_param.py b/pproc/tests/config/test_param.py index d15c3003..65b0bf1b 100644 --- a/pproc/tests/config/test_param.py +++ b/pproc/tests/config/test_param.py @@ -11,7 +11,7 @@ from pproc.config.param import ParamConfig from pproc.config.io import BaseInputModel -from pproc.config.utils import extract_mars +from ppcore.utils.mars import extract_mars base_config = { "name": "2t", diff --git a/pproc/tests/config/types/test_extreme.py b/pproc/tests/config/types/test_extreme.py index b00565b6..65130477 100644 --- a/pproc/tests/config/types/test_extreme.py +++ b/pproc/tests/config/types/test_extreme.py @@ -1,7 +1,7 @@ import pytest from pproc.config import types -from pproc.config.utils import deep_update +from ppcore.utils.requests import deep_update BASE_OUTPUT = { "target": "fdb", From a13ff29005d43a55616a5dfe3c725ecac614b491 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 7 Jul 2026 14:24:55 +0000 Subject: [PATCH 41/95] Tidy --- pproc-core/src/ppcore/schema/input.py | 6 ++---- pproc-core/src/ppcore/schema/schema.py | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index 71b5c9e0..58edea23 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -68,12 +68,10 @@ def populate_request(self) -> Self: if self.members: if "number" in self.request: number = np.asarray(self.request["number"]) - number = list( - number[ + number = number[ (number >= self.members["start"]) & (number <= self.members["end"]) - ] - ) + ].tolist() else: number = list(range(self.members["start"], self.members["end"] + 1)) self.request["number"] = number diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index 24d57e0d..740e0a06 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -102,4 +102,4 @@ def outputs_from_inputs( inputs: list[dict], output_template: Optional[dict] = None, ) -> Iterator[tuple[dict, list[dict]]]: - return self.param_schema.outputs(inputs, self.step_schema, output_template) + yield from self.param_schema.outputs(inputs, self.step_schema, output_template) From 7b3b66abd7bf294642369c8e7834e95c23405cbe Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 8 Jul 2026 08:07:05 +0000 Subject: [PATCH 42/95] Cache schema reconstruct calls --- .../plugins/pproc/config/threshold.py | 5 +- .../plugins/pproc/metadata/threshold.py | 2 +- pproc-core/src/ppcore/schema/base.py | 128 ++++++++++++++---- pproc-core/src/ppcore/schema/input.py | 5 +- pproc-core/src/ppcore/schema/schema.py | 18 ++- .../tests/ppcore/schema/test_config_schema.py | 14 ++ 6 files changed, 137 insertions(+), 35 deletions(-) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py index 9cc330d0..1a7d9a08 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py @@ -31,7 +31,10 @@ def validate_threshold(cls, data: Any) -> Any: # Derive scale factors for custom thresholds for value in ["lower_value", "upper_value"]: upper_or_lower = value.split("_")[0] - if isinstance(data.get(value), float) and f"{upper_or_lower}_scale_factor" not in data: + if ( + isinstance(data.get(value), float) + and f"{upper_or_lower}_scale_factor" not in data + ): scale_factor = 0 while abs(data[value] * 10**scale_factor) < 1: scale_factor += 1 diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py index 48198550..a6a885be 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py @@ -39,7 +39,7 @@ def threshold_metadata( ) elif edition == 2: # GRIB 2 has probability types above/below upper/lower limits (see Code Table 4.9) - # where the threshold value can correspond to either limit. + # where the threshold value can correspond to either limit. # Default is to use limit_type=lower probability types prob_types = { "<": {"upper": 4, "lower": 0}, diff --git a/pproc-core/src/ppcore/schema/base.py b/pproc-core/src/ppcore/schema/base.py index ff4024ad..937ef10d 100644 --- a/pproc-core/src/ppcore/schema/base.py +++ b/pproc-core/src/ppcore/schema/base.py @@ -9,6 +9,7 @@ import copy import logging +from collections import OrderedDict from typing import Any from typing import Callable from typing import Iterator @@ -41,9 +42,71 @@ class BaseSchema: custom_filter: dict[str, FilterFunc] = {} custom_match: dict[str, MatchFunc] = {} - def __init__(self, schema: dict): + def __init__( + self, + schema: dict, + *, + matching_cache_size: int = 0, + ): self.all_filters, self.schema = self.expand(schema) self.filters = self.all_filters.difference(set(self.custom_filter.keys())) + self.matching_cache_size = max(0, matching_cache_size) + self._matching_cache: OrderedDict[tuple, tuple[dict, ...]] = OrderedDict() + + @classmethod + def _freeze_cache_value(cls, value: Any) -> Any: + if isinstance(value, (str, int, float, bool, type(None))): + return value + if isinstance(value, dict): + return tuple( + sorted( + (key, cls._freeze_cache_value(item)) for key, item in value.items() + ) + ) + if isinstance(value, (list, tuple)): + return tuple(cls._freeze_cache_value(item) for item in value) + if isinstance(value, set): + frozen = [cls._freeze_cache_value(item) for item in value] + return ("__set__", tuple(sorted(frozen, key=repr))) + + model_dump = getattr(value, "model_dump", None) + if callable(model_dump): + return ( + "__model__", + cls._freeze_cache_value(model_dump(exclude_none=False, by_alias=True)), + ) + + return ("__repr__", repr(value)) + + def _matching_cache_key(self, output_template: dict, matching: dict) -> tuple: + return ( + id(self.schema), + self._freeze_cache_value(output_template), + self._freeze_cache_value(matching), + ) + + def clear_matching_cache(self) -> None: + self._matching_cache.clear() + + def _get_cached_matching(self, key: tuple) -> Optional[list[dict]]: + if self.matching_cache_size == 0: + return None + + cached = self._matching_cache.get(key, None) + if cached is None: + return None + + self._matching_cache.move_to_end(key) + return [copy.deepcopy(cfg) for cfg in cached] + + def _set_cached_matching(self, key: tuple, configs: list[dict]) -> None: + if self.matching_cache_size == 0: + return + + self._matching_cache[key] = tuple(copy.deepcopy(cfg) for cfg in configs) + self._matching_cache.move_to_end(key) + while len(self._matching_cache) > self.matching_cache_size: + self._matching_cache.popitem(last=False) @classmethod def from_file(cls, schema_path: str) -> Self: @@ -112,49 +175,54 @@ def _find_matching( configs: list[dict], **matching, ) -> Iterator[dict]: + missing = object() + matching_funcs = [ + (key, value, cls.custom_match.get(key, DEFAULT_MATCH)) + for key, value in matching.items() + ] for key, value in schema.items(): if cls.is_subschema(key): filter_key = key.split(":")[1] + wildcard_schema = value.get("*", None) new_configs = [] value_matched = False - for filter_value in value.keys(): + for filter_value, sub_schema in value.items(): if filter_value == "*": continue for fout in configs: - new_fout = copy.deepcopy(fout) - if new_fout["recon_req"].get(filter_key, None) == filter_value: + current_value = fout["recon_req"].get(filter_key, missing) + if current_value == filter_value: value_matched = True - if ( - new_fout["recon_req"].setdefault( - filter_key, copy.deepcopy(filter_value) - ) - != filter_value - ): + elif current_value is not missing: continue + + new_fout = copy.deepcopy(fout) + if current_value is missing: + new_fout["recon_req"][filter_key] = copy.deepcopy( + filter_value + ) + new_configs.extend( cls._find_matching( - schema[key][filter_value], + sub_schema, [new_fout], **matching, ) ) - if "*" in schema[key].keys() and not value_matched: + if wildcard_schema is not None and not value_matched: new_configs.extend( - cls._find_matching(schema[key]["*"], configs, **matching) + cls._find_matching(wildcard_schema, configs, **matching) ) configs = new_configs else: - [ - cls.custom_update.get(key, DEFAULT_UPDATE)( - cfg, {key: copy.deepcopy(value)} - ) - for cfg in configs - ] + update = cls.custom_update.get(key, DEFAULT_UPDATE) + for cfg in configs: + update(cfg, {key: copy.deepcopy(value)}) for cfg in configs: is_match = True - for key, value in matching.items(): - if not cls.custom_match.get(key, DEFAULT_MATCH)( + for key, value, match_func in matching_funcs: + if not match_func( cfg["recon_req"], cfg.get(key, value), value, @@ -168,7 +236,19 @@ def _find_matching( def reconstruct( self, output_template: Optional[dict] = None, **matching ) -> Iterator[tuple[dict, dict]]: - for cfg in self._find_matching( - self.schema, [{"recon_req": output_template or {}}], **matching - ): + output_template = output_template or {} + cache_key = self._matching_cache_key(output_template, matching) + configs = self._get_cached_matching(cache_key) + + if configs is None: + configs = list( + self._find_matching( + self.schema, + [{"recon_req": output_template}], + **matching, + ) + ) + self._set_cached_matching(cache_key, configs) + + for cfg in configs: yield cfg.pop("recon_req"), cfg diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index 58edea23..9cf77cdf 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -69,9 +69,8 @@ def populate_request(self) -> Self: if "number" in self.request: number = np.asarray(self.request["number"]) number = number[ - (number >= self.members["start"]) - & (number <= self.members["end"]) - ].tolist() + (number >= self.members["start"]) & (number <= self.members["end"]) + ].tolist() else: number = list(range(self.members["start"], self.members["end"] + 1)) self.request["number"] = number diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index 740e0a06..0be97b50 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -24,16 +24,22 @@ class Schema: - def __init__(self, config: dict, inputs: dict, windows: dict): - self.config_schema = ConfigSchema(config) - self.param_schema = InputSchema(inputs) - self.step_schema = StepSchema(windows) + def __init__( + self, config: dict, inputs: dict, windows: dict, matching_cache_size: int = 0 + ): + self.config_schema = ConfigSchema( + config, matching_cache_size=matching_cache_size + ) + self.param_schema = InputSchema(inputs, matching_cache_size=matching_cache_size) + self.step_schema = StepSchema(windows, matching_cache_size=matching_cache_size) @classmethod - def from_file(cls, schema_path: Union[str, os.PathLike]) -> Self: + def from_file( + cls, schema_path: Union[str, os.PathLike], matching_cache_size: int = 0 + ) -> Self: with open(schema_path, "r") as f: schema = yaml.safe_load(f) - return cls(**schema) + return cls(**schema, matching_cache_size=matching_cache_size) def config_from_output(self, output_request: dict) -> dict: config = self.config_schema.config(output_request) diff --git a/pproc-core/tests/ppcore/schema/test_config_schema.py b/pproc-core/tests/ppcore/schema/test_config_schema.py index 790718d2..02b76489 100644 --- a/pproc-core/tests/ppcore/schema/test_config_schema.py +++ b/pproc-core/tests/ppcore/schema/test_config_schema.py @@ -25,6 +25,20 @@ def test_reconstruct(): ) +def test_reconstruct_cache(): + config_schema = ConfigSchema( + schema("config"), + matching_cache_size=2, + ) + cfgs_a = list(config_schema.reconstruct(entrypoint="pproc-ensms")) + cfgs_b = list(config_schema.reconstruct(entrypoint="pproc-ensms")) + assert cfgs_a == cfgs_b + assert len(config_schema._matching_cache) == 1 + + config_schema.clear_matching_cache() + assert len(config_schema._matching_cache) == 0 + + @pytest.mark.parametrize( "out_request, expected_config", [ From a00a393e57b4658ee4a59f2efcb5acab8fea7cc8 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 8 Jul 2026 08:19:27 +0000 Subject: [PATCH 43/95] Modify api to accepted constructed schema --- pproc-core/src/ppcore/configs/__init__.py | 16 +++++++++++----- pproc-core/src/ppcore/products/__init__.py | 7 ++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/pproc-core/src/ppcore/configs/__init__.py b/pproc-core/src/ppcore/configs/__init__.py index e7111d62..62b6dab7 100644 --- a/pproc-core/src/ppcore/configs/__init__.py +++ b/pproc-core/src/ppcore/configs/__init__.py @@ -8,12 +8,15 @@ def config_from_output( request: dict, - pproc_schema: Union[str, os.PathLike], + pproc_schema: Union[str, os.PathLike, Schema], inputs: Optional[list[dict]] = None, metadata: Optional[dict] = None, **overrides, ) -> ProductConfig: - schema = Schema.from_file(pproc_schema) + if isinstance(pproc_schema, Schema): + schema = pproc_schema + else: + schema = Schema.from_file(pproc_schema) if inputs is None: schema_config = schema.config_from_output(request) else: @@ -30,7 +33,7 @@ def config_from_output( def from_outputs( requests: list[dict], - pproc_schema: Union[str, os.PathLike], + pproc_schema: Union[str, os.PathLike, Schema], inputs: Optional[list[dict]] = None, metadata: Optional[dict] = None, **overrides, @@ -38,7 +41,10 @@ def from_outputs( """ Returns product configuration from output request and PProc schema """ - schema = Schema.from_file(pproc_schema) + if isinstance(pproc_schema, Schema): + schema = pproc_schema + else: + schema = Schema.from_file(pproc_schema) for request in expand(requests): if inputs is None: schema_config = schema.config_from_output(request) @@ -56,7 +62,7 @@ def from_outputs( def from_inputs( requests: list[dict], - pproc_schema: Union[str, os.PathLike], + pproc_schema: Union[str, os.PathLike, Schema], inputs: Optional[list[dict]] = None, metadata: Optional[dict] = None, **overrides, diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index a5cae572..22849a6c 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -8,6 +8,7 @@ from ppcore.utils.requests import expand from ppcore.configs import from_outputs as config_from_outputs from ppcore.configs.product import ProductConfig +from ppcore.schema.schema import Schema from ppcore.products.base import Product from ppcore.products.ensemble import Ensemble @@ -29,7 +30,7 @@ def product_from_config( def product_from_output( request: dict, - pproc_schema: Union[str, os.PathLike], + pproc_schema: Union[str, os.PathLike, Schema], inputs: Optional[list[dict]] = None, metadata: Optional[dict] = None, ) -> Product: @@ -50,7 +51,7 @@ def product_from_output( def action_from_outputs( requests: list[dict], - pproc_schema: Union[str, os.PathLike], + pproc_schema: Union[str, os.PathLike, Schema], sources: Optional[Action] = None, metadata: Optional[dict] = None, ) -> Action: @@ -69,7 +70,7 @@ def action_from_outputs( def graph_from_outputs( requests: list[dict], - pproc_schema: Union[str, os.PathLike], + pproc_schema: Union[str, os.PathLike, Schema], metadata: Optional[dict] = None, ) -> Product: """ From 3cfec23a5dba7ad6e3b95a24bf822a60bcbe32a9 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 8 Jul 2026 08:55:58 +0000 Subject: [PATCH 44/95] Extend cache to input_schema reconstruct --- pproc-core/src/ppcore/schema/base.py | 8 ++++++-- pproc-core/src/ppcore/schema/input.py | 25 +++++++++++-------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/pproc-core/src/ppcore/schema/base.py b/pproc-core/src/ppcore/schema/base.py index 937ef10d..0609de98 100644 --- a/pproc-core/src/ppcore/schema/base.py +++ b/pproc-core/src/ppcore/schema/base.py @@ -234,9 +234,13 @@ def _find_matching( yield cfg def reconstruct( - self, output_template: Optional[dict] = None, **matching + self, + output_template: Optional[dict] = None, + initial_config: Optional[dict] = None, + **matching, ) -> Iterator[tuple[dict, dict]]: output_template = output_template or {} + initial_config = initial_config or {} cache_key = self._matching_cache_key(output_template, matching) configs = self._get_cached_matching(cache_key) @@ -244,7 +248,7 @@ def reconstruct( configs = list( self._find_matching( self.schema, - [{"recon_req": output_template}], + [{"recon_req": output_template, **initial_config}], **matching, ) ) diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index 9cf77cdf..91855bd0 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -401,22 +401,19 @@ def reconstruct( base_request = { key: output_template[key] for key in inherit if key in output_template } - for cfg in self._find_matching( - self.schema, - [ - { - "recon_req": output_template or {}, - "forecast": ForecastConfig.model_construct( - inputs=[ForecastInput.model_construct(request=base_request)] - ), - "climatology": ClimatologyConfig.model_construct( - inputs=[ClimatologyInput.model_construct(request=base_request)] - ), - } - ], + for out, cfg in super().reconstruct( + output_template or {}, + { + "forecast": ForecastConfig.model_construct( + inputs=[ForecastInput.model_construct(request=base_request)] + ), + "climatology": ClimatologyConfig.model_construct( + inputs=[ClimatologyInput.model_construct(request=base_request)] + ), + }, **matching, ): - out, input_config = cfg.pop("recon_req"), InputConfig(**cfg) + input_config = InputConfig(**cfg) logger.info("Reconstructed output %s, with config %s", out, input_config) yield out, input_config From c5f702ed62e3e3a4c07784e45925429c5b20a0c5 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 8 Jul 2026 09:24:49 +0000 Subject: [PATCH 45/95] Bump earthkit-workflows --- pproc-core/uv.lock | 6 +- pproc/uv.lock | 1186 ++++---------------------------------------- 2 files changed, 94 insertions(+), 1098 deletions(-) diff --git a/pproc-core/uv.lock b/pproc-core/uv.lock index 04f61dab..3790f7b6 100644 --- a/pproc-core/uv.lock +++ b/pproc-core/uv.lock @@ -425,7 +425,7 @@ wheels = [ [[package]] name = "earthkit-workflows" -version = "0.15.1" +version = "0.15.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "array-api-compat" }, @@ -441,9 +441,9 @@ dependencies = [ { name = "sortedcontainers" }, { name = "xarray" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/3a/91f930cc1d6efdb25f2b3d47c5d9498705d59398a0f1d9276841a1bb7ac5/earthkit_workflows-0.15.1.tar.gz", hash = "sha256:2304197d086842cffbc9025a7db2c46e465857a97ba628da02c9891afa43f5c9", size = 10864288 } +sdist = { url = "https://files.pythonhosted.org/packages/ff/c6/8fd4b42984abff59eaf7bc2bc727a713c4b65539e55324b354aef2795fad/earthkit_workflows-0.15.2.tar.gz", hash = "sha256:616a3065fd14d4be282327048898355f3d4f972b8a648bbb87cbed9329c83202", size = 10865493 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/ff/5f655e43dd2f65563249e51ea4a63d3f498dfe453991df99e72976abb3e3/earthkit_workflows-0.15.1-py3-none-any.whl", hash = "sha256:e782d8ebe46bfbba5c1efc3e6f7c4577b66d0afdc6f7f5789c8784ccfdfa30ad", size = 216702 }, + { url = "https://files.pythonhosted.org/packages/3c/45/835afbb6254535370fb0f1917607e7b1b1a0a737a155d5e2f8f2b2ad3e88/earthkit_workflows-0.15.2-py3-none-any.whl", hash = "sha256:ba9ac562c0b57bc05a380b0a2d9881c1c261bab68912491ed431fb9a9da20f0d", size = 217575 }, ] [package.optional-dependencies] diff --git a/pproc/uv.lock b/pproc/uv.lock index 634503dd..32231164 100644 --- a/pproc/uv.lock +++ b/pproc/uv.lock @@ -1,16 +1,15 @@ version = 1 -requires-python = ">=3.10" +requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", + "python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_version < '0'", ] [manifest] @@ -55,10 +54,6 @@ dependencies = [ { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/40/be/262b9ecc67391b5aa627050d0b74334be278dcbda10fa74dd9053b9e92d6/atlaslib_ecmwf-0.46.0.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:dba6b7872180ba75b11f35daa22d054e90fde6ed32470aa19c9d1fe0f43303aa", size = 5200826 }, - { url = "https://files.pythonhosted.org/packages/f0/d8/33a3f4cea97dc040f63726db624d9d9be8d21bd11b1f9f6cb7dfdaf464ad/atlaslib_ecmwf-0.46.0.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:8eae9424296b4dfb17c6c061a52ecc4b4556df6974c8fd3e627ec452f969c43c", size = 5794256 }, - { url = "https://files.pythonhosted.org/packages/47/23/6528df2548c392410aa48541395b33ea1ea9a05c7011369e367d61141049/atlaslib_ecmwf-0.46.0.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:29ecadcbe6ceba500764098789a3ee8f48b81b504b06950effb16ab166cc0178", size = 6061703 }, - { url = "https://files.pythonhosted.org/packages/93/1e/0ac948c7fc475939d58753f8a595de614b3eb951b270033db20abe54a024/atlaslib_ecmwf-0.46.0.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e9e65324ab023706e8918dd3770b3edc07a16309a18734f88c577620667b5a21", size = 6423405 }, { url = "https://files.pythonhosted.org/packages/01/22/b9c3d9b0198c4bb2df40510793402463e0b471bf20de260561d51271c845/atlaslib_ecmwf-0.46.0.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:21ba8c25b6d9024674ce47582e086c7628fb8f2663d476056ef13d705cd148ab", size = 5200826 }, { url = "https://files.pythonhosted.org/packages/4d/87/5fd44d072449dd41099be19073049e6a5a82089141bd433dc9cde3895e2a/atlaslib_ecmwf-0.46.0.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:d12b4481546d2bcab7b9481e816d1e9424814a5258ceb7efd8af95f21619cad3", size = 5794258 }, { url = "https://files.pythonhosted.org/packages/55/06/24e64985cb6a872bd1b350b756f7686656093e99d3c4f2eea837fb72ee3f/atlaslib_ecmwf-0.46.0.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b27205c408cb2f809993275b39b8d71990921270876114b2e6e4275837a4d056", size = 6061766 }, @@ -104,18 +99,6 @@ dependencies = [ ] 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/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283 }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504 }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811 }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402 }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217 }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079 }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475 }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829 }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211 }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036 }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184 }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790 }, { 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 }, @@ -185,8 +168,7 @@ dependencies = [ { name = "attrs" }, { name = "click" }, { name = "eccodes" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591 } wheels = [ @@ -198,17 +180,10 @@ name = "cftime" version = "1.6.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605 } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/45/dcc38d7b293107d3e33b3d94b2619687eb414a4f16880e2e841cdb6ac49a/cftime-1.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ad81e8cb0eb873b33c3d1e22c6168163fdc64daa8f7aeb4da8092f272575f4d", size = 510221 }, - { url = "https://files.pythonhosted.org/packages/68/63/2875341516fcfe80f1a16f86b420aec9441223ab5381d554441c9fdae56e/cftime-1.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12d95c6af852114a13301c5a61e41afdbd1542e72939c1083796f8418b9b8b0e", size = 490684 }, - { url = "https://files.pythonhosted.org/packages/80/7f/85f2c4c7ae8300b7871af7d7d144ad06f71dc0dd6258f0d18fd966067d1b/cftime-1.6.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2659b7df700e27d9e3671f686ce474dfb5fc274966961edf996acc148dfa094a", size = 1592268 }, - { url = "https://files.pythonhosted.org/packages/6c/9a/72dbd72498e958edf41a770bbd05e68141774325a945092059f4eb9c653d/cftime-1.6.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:94cebdfcda6a985b8e69aed22d00d6b8aa1f421495adbdcff1d59b3e896d81e2", size = 1624716 }, - { url = "https://files.pythonhosted.org/packages/bc/9e/2c4c720ad8bbe87994ca62a0e3c09d3786b984af664a91a6f3a668aa0b13/cftime-1.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:179681b023349a2fe277ceccc89d4fc52c0dd105cb59b7187b5bc5d442875133", size = 1705927 }, - { url = "https://files.pythonhosted.org/packages/da/77/66484061dee5fbcb2fdcfa6a491d4efb880725117f4a339d20a5323105df/cftime-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:d8b9fdecb466879cfe8ca4472b229b6f8d0bb65e4ffd44266ae17484bac2cf38", size = 472435 }, { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733 }, { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946 }, { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856 }, @@ -251,22 +226,6 @@ 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/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182 }, - { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329 }, - { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230 }, - { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890 }, - { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930 }, - { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109 }, - { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684 }, - { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785 }, - { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055 }, - { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502 }, - { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295 }, - { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145 }, - { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884 }, - { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343 }, - { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174 }, - { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805 }, { 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 }, @@ -422,11 +381,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630 }, ] -[package.optional-dependencies] -distributed = [ - { name = "distributed", marker = "python_full_version >= '3.11'" }, -] - [[package]] name = "decorator" version = "5.3.1" @@ -448,41 +402,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, ] -[[package]] -name = "dill" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/81/e1/56027a71e31b02ddc53c7d65b01e68edf64dea2932122fe7746a516f75d5/dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa", size = 187315 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d", size = 120019 }, -] - -[[package]] -name = "distributed" -version = "2026.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click", marker = "python_full_version >= '3.11'" }, - { name = "cloudpickle", marker = "python_full_version >= '3.11'" }, - { name = "dask", marker = "python_full_version >= '3.11'" }, - { name = "jinja2", marker = "python_full_version >= '3.11'" }, - { name = "locket", marker = "python_full_version >= '3.11'" }, - { name = "msgpack", marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "psutil", marker = "python_full_version >= '3.11'" }, - { name = "pyyaml", marker = "python_full_version >= '3.11'" }, - { name = "sortedcontainers", marker = "python_full_version >= '3.11'" }, - { name = "tblib", marker = "python_full_version >= '3.11'" }, - { name = "toolz", marker = "python_full_version >= '3.11'" }, - { name = "tornado", marker = "python_full_version >= '3.11'" }, - { name = "urllib3", marker = "python_full_version >= '3.11'" }, - { name = "zict", marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e7/84/3e98a2d61493d201f253743091cbd4f099f502f957a9a33bb9ce5b8d5416/distributed-2026.3.0.tar.gz", hash = "sha256:4a8fc6102fededfbaae45288501276da2297a054d74eb6589f01b087c7f95c26", size = 2103970 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/77/2ff7aefc09cf1306a81cd7a46af34f80ebefef81a2e8329b94b58ad813ae/distributed-2026.3.0-py3-none-any.whl", hash = "sha256:52518f4b3e6795e87b442e8f57788ba1ddc750c62d0835669c85927280d38f07", size = 1009769 }, -] - [[package]] name = "earthkit-data" version = "0.20.0" @@ -500,15 +419,12 @@ dependencies = [ { name = "lru-dict" }, { name = "markdown" }, { name = "multiurl" }, - { name = "netcdf4", version = "1.7.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, - { name = "netcdf4", version = "1.7.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, - { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "netcdf4" }, + { name = "pandas" }, { name = "pdbufr" }, { name = "pyyaml" }, { name = "tqdm" }, - { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "xarray" }, ] sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819 } wheels = [ @@ -529,8 +445,7 @@ version = "0.6.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "earthkit-utils" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/14/87/162771cba3c4371e054914750164851e32bafe924c674153105789f01c88/earthkit_meteo-0.6.2.tar.gz", hash = "sha256:2823ed56947dd2c9c69aae6fe19153eec393c80392126ab84cc760419d0b952b", size = 370304 } wheels = [ @@ -555,8 +470,7 @@ version = "0.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "array-api-compat" }, - { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pint" }, ] sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013 } wheels = [ @@ -565,68 +479,31 @@ wheels = [ [[package]] name = "earthkit-workflows" -version = "0.6.2" +version = "0.15.2" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] dependencies = [ - { name = "array-api-compat", marker = "python_full_version < '3.11'" }, - { name = "cloudpickle", marker = "python_full_version < '3.11'" }, - { name = "dill", marker = "python_full_version < '3.11'" }, - { name = "earthkit-data", marker = "python_full_version < '3.11'" }, - { name = "fire", marker = "python_full_version < '3.11'" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "orjson", marker = "python_full_version < '3.11'" }, - { name = "pydantic", marker = "python_full_version < '3.11'" }, - { name = "pyrsistent", marker = "python_full_version < '3.11'" }, - { name = "pyvis", marker = "python_full_version < '3.11'" }, - { name = "pyzmq", marker = "python_full_version < '3.11'" }, - { name = "sortedcontainers", marker = "python_full_version < '3.11'" }, - { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "array-api-compat" }, + { name = "cloudpickle" }, + { name = "earthkit-data" }, + { name = "fire" }, + { name = "numpy" }, + { name = "orjson" }, + { name = "pydantic" }, + { name = "pyrsistent" }, + { name = "pyzmq" }, + { name = "qubed" }, + { name = "sortedcontainers" }, + { name = "xarray" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/24/3f/4fae32362bbb8ff27ecfec64f10fad1ae86e546fb4fb42005e1435ef89fc/earthkit_workflows-0.6.2.tar.gz", hash = "sha256:5f05c670dc2f1b4895d799d0af0f7102f90c65b7026713aa4cba0d168c374353", size = 10682030 } +sdist = { url = "https://files.pythonhosted.org/packages/ff/c6/8fd4b42984abff59eaf7bc2bc727a713c4b65539e55324b354aef2795fad/earthkit_workflows-0.15.2.tar.gz", hash = "sha256:616a3065fd14d4be282327048898355f3d4f972b8a648bbb87cbed9329c83202", size = 10865493 } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/3d/a399bc384c6bdfadfd052820b4233ce949a3c4496c2cc5a811f165d2381c/earthkit_workflows-0.6.2-py3-none-any.whl", hash = "sha256:772c94b4ff62d9a42b6c4918c410ec082c6870d605f81e08015820121ded7235", size = 175629 }, + { url = "https://files.pythonhosted.org/packages/3c/45/835afbb6254535370fb0f1917607e7b1b1a0a737a155d5e2f8f2b2ad3e88/earthkit_workflows-0.15.2-py3-none-any.whl", hash = "sha256:ba9ac562c0b57bc05a380b0a2d9881c1c261bab68912491ed431fb9a9da20f0d", size = 217575 }, ] -[[package]] -name = "earthkit-workflows" -version = "0.14.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] -dependencies = [ - { name = "array-api-compat", marker = "python_full_version >= '3.11'" }, - { name = "cloudpickle", marker = "python_full_version >= '3.11'" }, - { name = "dask", extra = ["distributed"], marker = "python_full_version >= '3.11'" }, - { name = "dill", marker = "python_full_version >= '3.11'" }, - { name = "earthkit-data", marker = "python_full_version >= '3.11'" }, - { name = "fire", marker = "python_full_version >= '3.11'" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "orjson", marker = "python_full_version >= '3.11'" }, - { name = "pydantic", marker = "python_full_version >= '3.11'" }, - { name = "pyrsistent", marker = "python_full_version >= '3.11'" }, - { name = "pyvis", marker = "python_full_version >= '3.11'" }, - { name = "pyzmq", marker = "python_full_version >= '3.11'" }, - { name = "qubed", marker = "python_full_version >= '3.11'" }, - { name = "sortedcontainers", marker = "python_full_version >= '3.11'" }, - { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/52/03/8dd102d62897dfe47669053205623c9404fcccdf38762b894ba199dc5f2e/earthkit_workflows-0.14.2.tar.gz", hash = "sha256:18288d16cb1b8c580d5659ceb28c7dd2b00bdf8867653891ace72386366211d4", size = 10855266 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/c1/c0fc86e6ad49c35ce77d3ad3e285af29e5116ba1d463801555321dff0b18/earthkit_workflows-0.14.2-py3-none-any.whl", hash = "sha256:df3b9445262d2c948575f21a4502ad67662885da633fc82ed0d1d7ef9e91882a", size = 205638 }, +[package.optional-dependencies] +vizualize = [ + { name = "networkx" }, + { name = "pyvis" }, ] [[package]] @@ -637,12 +514,10 @@ dependencies = [ { name = "attrs" }, { name = "cffi" }, { name = "findlibs" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/fe/63f915171413efeaaa9d1ba613aeabdc3f8cdba603f72842a7fcb1b011ee/eccodes-2.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:3a7438b259188821a5b05e5dd814f83924936ff9fe0897f6a157506fcaea9baf", size = 7435926 }, { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928 }, { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009 }, { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001 }, @@ -657,10 +532,6 @@ dependencies = [ { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/af/17/25635892d00944eb51eee767d9f7cda5af5f965591b3eed2f3325fc2edd6/eccodeslib-2.46.2.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:28786e11150a5593df346cf8d90d1432b494041183f29c18c7fdc93b8e8e6f78", size = 8900008 }, - { url = "https://files.pythonhosted.org/packages/6c/f6/85ead200b6728c8b7efe4921d6bde296702759c6d3b98f5dfff1a57a7c1b/eccodeslib-2.46.2.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:16df01da07b032eb18c77cc18c62e32afa803f40a14e88e450b517d5416f614f", size = 8731393 }, - { url = "https://files.pythonhosted.org/packages/c6/18/363ceef6f9c61f316809c11a8b213ad410a44970bb2e36d3b97921839e58/eccodeslib-2.46.2.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:d2ddb31feb32efa77643873abff54801902a56364118614b3fec86e2ac984c51", size = 9093646 }, - { url = "https://files.pythonhosted.org/packages/98/fc/2e48a18b37bf5ab228c1fa2476c4957be6accf4d6261710087cd0a3e0b05/eccodeslib-2.46.2.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0c53d1a3e715ca52402cff11bc3a1c3d8f2619aa18c7a383167b2bdbb7913d1b", size = 8986652 }, { url = "https://files.pythonhosted.org/packages/5d/b6/c2dab62331d291aa0e3d39d5a7021d3403d221a68d929dd9c0142ad5e847/eccodeslib-2.46.2.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:592295430695846ca258fe46f7cb8fc937331bc722e5ad56efca45b743b6374d", size = 8900035 }, { url = "https://files.pythonhosted.org/packages/8d/b4/7422f4457b4becc32d5f02c5fd7bf8fb184bb0667cd30bcd80a7fc33aac9/eccodeslib-2.46.2.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:a1a6c4e0c783194760dc18d86b07c85f343e83eb19836e9b5f35712de302e406", size = 8731409 }, { url = "https://files.pythonhosted.org/packages/8b/20/864f25031ebe08cb60a5ba15cf4385338aacc445a4b2bdb4ae0b65115f22/eccodeslib-2.46.2.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6a8c1431f025a2e6015cb7ed59b17c3e11cd48e88316dabe66eb0cb72d02e820", size = 9093647 }, @@ -684,10 +555,6 @@ name = "eckitlib" version = "2.0.7.19" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/95/9c/07d6a2b2a54a192d1a759437a8752e3964b1a52b33cacb86d8336ebebde8/eckitlib-2.0.7.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:b100d0a992668934768fb6a232be36227cb92aa5f14f0e6d5b0c8eba9d5d7773", size = 2480051 }, - { url = "https://files.pythonhosted.org/packages/4c/0d/27c56aa4d6a6bf67f33ecb66f6f11bc1b2b1c211157e39411c8d0926e728/eckitlib-2.0.7.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:965aa92b8c7f0c05b49b209a22bd138082b4ee1d690ee4dd19f0400ffa6aa869", size = 2610838 }, - { url = "https://files.pythonhosted.org/packages/e7/df/5340c9c737eff8206e886ef34be00207bcffe7765dbe943d770975a99e46/eckitlib-2.0.7.19-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adf6218d6e8f45f3c301d8d0ed18b1e9caaf10027f03012871b63051dacc0766", size = 7040522 }, - { url = "https://files.pythonhosted.org/packages/13/72/5f66e7876b3f9b27c0b12fe4039aad6c82baf6ab9ae9897c6b89b1c092ce/eckitlib-2.0.7.19-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2471ceeb54ca59fbe28fb70258a8b333eba4ab73c7003df48b8808bf55550f4f", size = 7169831 }, { url = "https://files.pythonhosted.org/packages/3f/dc/8729911c1d77aa26438abcfb8b2cab5893c32961068070cfff0bd8dbd7e7/eckitlib-2.0.7.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:d754b8f61dc376daf350f6d1f0e951260716e2b7be5081fa1160646ee121fcce", size = 2480047 }, { url = "https://files.pythonhosted.org/packages/1e/8b/72e40a8cf04e4fe6b8c2e396f8c9926178aed6125481a7d563e5879840a4/eckitlib-2.0.7.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:7010c09a8e9998eadf98026d682441e588b1b166d8970cb42f6b6198f20085fd", size = 2610843 }, { url = "https://files.pythonhosted.org/packages/a9/bf/a778df35b83c5019483cc1aef3a1f0d0c6cc3a44d18e438bf0ef33431541/eckitlib-2.0.7.19-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7bb53ee8cec37ebc05712906592c605f1ec166a953ae832fed9ba2117198ce8a", size = 7040517 }, @@ -724,18 +591,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/a8/365059bbcd4572cbc41de17fd5b682be5868b218c3c5479071865cab9078/entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f", size = 5294 }, ] -[[package]] -name = "exceptiongroup" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, -] - [[package]] name = "executing" version = "2.2.1" @@ -755,10 +610,6 @@ dependencies = [ { name = "metkitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/33/f6/f88797370f7f39e29e6d5e062360095f52143338e3976ab7d5e59f268c89/fdb5lib-5.21.0.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:a3ec38961d068d2e7be20d720ca99eb811f9a0d20aafd38a332e9a9939b4fd03", size = 1402489 }, - { url = "https://files.pythonhosted.org/packages/7f/73/381fcb49317b23e245c1027bfb9b7c377c25c96309ca5de92ebb50de4a8d/fdb5lib-5.21.0.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:f24ac5d5bada2aa878afaf9330a7e0bf0fd6d4560718fe236a9e3a3b8f836c0f", size = 1436517 }, - { url = "https://files.pythonhosted.org/packages/5f/1a/56c2c33cca629cb4a3549eda9bcb880b11b12379955de6a2b801a930c657/fdb5lib-5.21.0.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6ddcb23d4dc966e39cfe00b32e03fc689085f4da3ad87e6506d9ad3224711113", size = 1719622 }, - { url = "https://files.pythonhosted.org/packages/96/d6/b859109a3c5d7413b460dce9cd9544dd9e1d2f734e421cf55fbeb7e45bfa/fdb5lib-5.21.0.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:2efc546263e5f339454552db1a1bcd42b490d10f8653cff84fa213af36f664f8", size = 1703409 }, { url = "https://files.pythonhosted.org/packages/3e/3f/7d89b179dee7c4ce63366b59a7313fa20e93c32e9a7966230856dd8591c0/fdb5lib-5.21.0.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:ffc2412194abeec3cd1d2d2f022a133134858cb0dfe34a47b9a307945472ea32", size = 1402510 }, { url = "https://files.pythonhosted.org/packages/37/93/83ae989626a142b25df81e8b6239583864d8ca395e8dfee68d544d901465/fdb5lib-5.21.0.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:ec40d1d7ba88f0251fb44802b0b0cda3d94367b5b825c9684c267f9dc5f99bd9", size = 1436540 }, { url = "https://files.pythonhosted.org/packages/e6/b9/8c3e49bf3eea222eb50d8e38b46171ec1bfc8b985f28a40b1468d69c450f/fdb5lib-5.21.0.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:fbaf588a7ab781c0fd33d08e42b17a61312560d289e834db62cf8aefce93d896", size = 1719647 }, @@ -837,26 +688,6 @@ version = "2.4.7" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/bd/920b1c5ff1df427a5fc3fd4c2f13b0b0e720c3d57fafd80557094c1fefe0/frozendict-2.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bd37c087a538944652363cfd77fb7abe8100cc1f48afea0b88b38bf0f469c3d2", size = 59848 }, - { url = "https://files.pythonhosted.org/packages/a6/9c/e3e186925b1d84f816d458be4e2ea785bbeba15fd2e9e85c5ae7e7a90421/frozendict-2.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2b96f224a5431889f04b2bc99c0e9abe285679464273ead83d7d7f2a15907d35", size = 38164 }, - { url = "https://files.pythonhosted.org/packages/10/4c/af931d88c51ee2fcbf8c817557dcb975133a188f1b44bfa82caa940beeab/frozendict-2.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5c1781f28c4bbb177644b3cb6d5cf7da59be374b02d91cdde68d1d5ef32e046b", size = 38341 }, - { url = "https://files.pythonhosted.org/packages/ba/7a/c1fd4f736758cf93939cc3b7c8399fe1db0c121881431d41fcdbae344343/frozendict-2.4.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8a06f6c3d3b8d487226fdde93f621e04a54faecc5bf5d9b16497b8f9ead0ac3e", size = 112882 }, - { url = "https://files.pythonhosted.org/packages/bd/b0/304294f7cd099582a98d63e7a9cec34a9905d07f7628b42fc3f9c9a9bc94/frozendict-2.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b809d1c861436a75b2b015dbfd94f6154fa4e7cb0a70e389df1d5f6246b21d1e", size = 120482 }, - { url = "https://files.pythonhosted.org/packages/7e/61/689212ea4124fcbd097c0ac02c2c6a4e345ccc132d9104d054ff6b43ab64/frozendict-2.4.7-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75eefdf257a84ea73d553eb80d0abbff0af4c9df62529e4600fd3f96ff17eeb3", size = 113527 }, - { url = "https://files.pythonhosted.org/packages/5c/9b/38a762f4e76903efd4340454cac2820f583929457822111ef6a00ff1a3f4/frozendict-2.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a4d2b27d8156922c9739dd2ff4f3934716e17cfd1cf6fb61aa17af7d378555e9", size = 130068 }, - { url = "https://files.pythonhosted.org/packages/cf/41/9751e9ec1a2e810e8f961aea4f8958953157478daff6b868277ab7c5ef8c/frozendict-2.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ebd953c41408acfb8041ff9e6c3519c09988fb7e007df7ab6b56e229029d788", size = 126184 }, - { url = "https://files.pythonhosted.org/packages/71/be/b179b5f200cb0f52debeccc63b786cabcc408c4542f47c4245f978ad36e3/frozendict-2.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c64d34b802912ee6d107936e970b90750385a1fdfd38d310098b2918ba4cbf2", size = 120168 }, - { url = "https://files.pythonhosted.org/packages/25/c2/1536bc363dbce414e6b632f496aa8219c0db459a99eeafa02eba380e4cfa/frozendict-2.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:294a7d7d51dd979021a8691b46aedf9bd4a594ce3ed33a4bdf0a712d6929d712", size = 114997 }, - { url = "https://files.pythonhosted.org/packages/29/63/3e9efb490c00a0bf3c7bbf72fc73c90c4a6ebe30595e0fc44f59182b2ae7/frozendict-2.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f65d1b90e9ddc791ea82ef91a9ae0ab27ef6c0cfa88fadfa0e5ca5a22f8fa22f", size = 117292 }, - { url = "https://files.pythonhosted.org/packages/5e/66/d25b1e94f9b0e64025d5cadc77b9b857737ebffd8963ee91de7c5a06415a/frozendict-2.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:82d5272d08451bcef6fb6235a0a04cf1816b6b6815cec76be5ace1de17e0c1a4", size = 110656 }, - { url = "https://files.pythonhosted.org/packages/a3/5d/0e7e3294e18bf41d38dbc9ee82539be607c8d26e763ae12d9e41f03f2dae/frozendict-2.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5943c3f683d3f32036f6ca975e920e383d85add1857eee547742de9c1f283716", size = 113225 }, - { url = "https://files.pythonhosted.org/packages/e0/fb/b72c9b261ac7a7803528aa63bba776face8ad8d39cc4ca4825ddaa7777a9/frozendict-2.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:88c6bea948da03087035bb9ca9625305d70e084aa33f11e17048cb7dda4ca293", size = 126713 }, - { url = "https://files.pythonhosted.org/packages/c7/d9/e13af40bd9ef27b5c9ba10b0e31b03acac9468236b878dab030c75102a47/frozendict-2.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ffd1a9f9babec9119712e76a39397d8aa0d72ef8c4ccad917c6175d7e7f81b74", size = 114166 }, - { url = "https://files.pythonhosted.org/packages/40/2b/435583b11f5332cd3eb479d0a67a87bc9247c8b094169b07bd8f0777fc48/frozendict-2.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:0ff6f57854cc8aa8b30947ec005f9246d96e795a78b21441614e85d39b708822", size = 121542 }, - { url = "https://files.pythonhosted.org/packages/38/25/097f3c0dc916d7c76f782cb65544e683ff3940a0ed997fc32efdb0989c45/frozendict-2.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d774df483c12d6cba896eb9a1337bbc5ad3f564eb18cfaaee3e95fb4402f2a86", size = 118610 }, - { url = "https://files.pythonhosted.org/packages/61/d1/6964158524484d7f3410386ff27cbc8f33ef06f8d9ee0e188348efb9a139/frozendict-2.4.7-cp310-cp310-win32.whl", hash = "sha256:a10d38fa300f6bef230fae1fdb4bc98706b78c8a3a2f3140fde748469ef3cfe8", size = 34547 }, - { url = "https://files.pythonhosted.org/packages/94/27/c22d614332c61ace4406542787edafaf7df533c6f02d1de8979d35492587/frozendict-2.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:dd518f300e5eb6a8827bee380f2e1a31c01dc0af069b13abdecd4e5769bd8a97", size = 37693 }, - { url = "https://files.pythonhosted.org/packages/bc/d8/9d6604357b1816586612e0e89bab6d8a9c029e95e199862dc99ce8ae2ed5/frozendict-2.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:3842cfc2d69df5b9978f2e881b7678a282dbdd6846b11b5159f910bc633cbe4f", size = 35563 }, { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264 }, ] @@ -908,59 +739,23 @@ 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 = "ipython" -version = "8.39.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -dependencies = [ - { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version < '3.11'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "jedi", marker = "python_full_version < '3.11'" }, - { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, - { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, - { name = "pygments", marker = "python_full_version < '3.11'" }, - { name = "stack-data", marker = "python_full_version < '3.11'" }, - { name = "traitlets", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/40/18/f8598d287006885e7136451fdea0755af4ebcbfe342836f24deefaed1164/ipython-8.39.0.tar.gz", hash = "sha256:4110ae96012c379b8b6db898a07e186c40a2a1ef5d57a7fa83166047d9da7624", size = 5513971 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/56/4cc7fc9e9e3f38fd324f24f8afe0ad8bb5fa41283f37f1aaf9de0612c968/ipython-8.39.0-py3-none-any.whl", hash = "sha256:bb3c51c4fa8148ab1dea07a79584d1c854e234ea44aa1283bcb37bc75054651f", size = 831849 }, -] - [[package]] name = "ipython" version = "9.14.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version >= '3.11'" }, - { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, - { name = "jedi", marker = "python_full_version >= '3.11'" }, - { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, - { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, - { name = "psutil", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten'" }, - { name = "pygments", marker = "python_full_version >= '3.11'" }, - { name = "stack-data", marker = "python_full_version >= '3.11'" }, - { name = "traitlets", marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, + { 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", marker = "sys_platform != 'emscripten'" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e2/23/3a27530575643c8bb7bfc757a28e2e7ef80092afbf59a2bc5716320b6602/ipython-9.14.1.tar.gz", hash = "sha256:f913bf74df06d458e46ced84ca506c23797590d594b236fe60b14df213291e7b", size = 4433457 } wheels = [ @@ -972,7 +767,7 @@ name = "ipython-pygments-lexers" version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pygments", marker = "python_full_version >= '3.11'" }, + { 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 = [ @@ -1029,8 +824,7 @@ dependencies = [ { name = "attrs" }, { name = "jsonschema-specifications" }, { name = "referencing" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { 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 = [ @@ -1064,17 +858,6 @@ version = "1.4.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/6c/396716746ca46fd2ac52a7a6cbd7b4cf848e5d430f431dacd209290dfa71/lru_dict-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3766e397aa6de1ca3442729bc1fa75834ab7b0a6b017e6e197d3a66b61abde59", size = 16757 }, - { url = "https://files.pythonhosted.org/packages/2d/93/c163ffb71beb18f18459461658fd16c8b8c86aed858f2dc7c7e636318f61/lru_dict-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658e152d3a4ad0e1d75e6f53b1fa353779539920b38be99f4ea33d3bad41efdb", size = 11243 }, - { url = "https://files.pythonhosted.org/packages/44/e3/fa96d54032531c67eeacf0ab6f56e10e05f25d382a29f6a381ac8ecf3814/lru_dict-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:98af7044b5c3d85a649e1afb8891829ff5210caf9143acc741b3e98ab1b66ff6", size = 11726 }, - { url = "https://files.pythonhosted.org/packages/7a/23/bae4f32fb014fd2dc5512e9267a3b1ec34c3b55d16a2202a1193d9ae635d/lru_dict-1.4.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:906d99705b79a00b5668bdb8782ad823ccc8d26e1fc6b56327ae469a8d12e9b4", size = 29823 }, - { url = "https://files.pythonhosted.org/packages/9f/3b/8c3d1e6a188ce65e0161b86dbd18f2290950baf1e9e28e4948fc123d9a67/lru_dict-1.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:885643fd968336d8652fddb0778184e2eeff7b7aebced6de268af6d6caef42d5", size = 30812 }, - { url = "https://files.pythonhosted.org/packages/ed/11/7f061507eda944150ed959e99a3700ce6358c1241c7f697b2f1ade48646b/lru_dict-1.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:24c779334bed82f1a7eb2d1ebcba2b7aa9a1555d40a3b53e05eb6b9dfcb0609c", size = 32480 }, - { url = "https://files.pythonhosted.org/packages/75/e7/94ac30d33c6f8a8eca5d7e81c0ce26fb7b79b18ea65accdcb2a652b19abc/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6099e2ecb118dfeae4a197bfcc702ea5841bfd86f19d1b340e932d0f5c47c10", size = 30199 }, - { url = "https://files.pythonhosted.org/packages/4a/81/c93ee7365db67dfb497e6218aa0395b9ec878c07c732d348bfbd651bcc95/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e0db4f3105108598749550e639b283b07df0bb91cac3b47e86ffebcab721cc7", size = 31489 }, - { url = "https://files.pythonhosted.org/packages/9f/0b/634e8b4eca2497647f802bbe1ae3f0e1e9a0de1d555cf77c022527b2682f/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e21f67ba374d1945051b547e719d44a8c7880718f67a15a03e7a12e1d12ea96b", size = 29522 }, - { url = "https://files.pythonhosted.org/packages/de/cc/591b959d77cc0e0ac016f11baf26d03d566bb88a53fa9b41e157bc68bc4b/lru_dict-1.4.1-cp310-cp310-win32.whl", hash = "sha256:f309b4018dd41f33bf3bd4cc0f62421da8bcca513ea044dbb22f3cd029935012", size = 13066 }, - { url = "https://files.pythonhosted.org/packages/d9/bc/c14b67fdbdb5a2a81cfb907ea8a8b0c9da5aed899f34921ebf097e22a966/lru_dict-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:e84cd1065955897de01f1fb4cbd6f87cab7706e920283bb98c27341d76dd9a8d", size = 14008 }, { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760 }, { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249 }, { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728 }, @@ -1138,11 +921,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909 }, { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816 }, { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204 }, - { url = "https://files.pythonhosted.org/packages/ec/de/18ac3957e1aa6674a0a828748c819265f79b524ff30cbb0ac7f08ab786c8/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cc9dd191870555624bbf3903c8afa3f01815ca3256ed8b35cb323f0db3ce4f98", size = 10467 }, - { url = "https://files.pythonhosted.org/packages/0c/53/2a0bedaa64950cc56ade72e2f5a292318473585d9a3adc797d13b38082e7/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:afdf92b332632aa6e4b8646e93723f50f41fece2a80a54d2b44e8ac67f913ceb", size = 10871 }, - { url = "https://files.pythonhosted.org/packages/4e/e2/d5ea49d62ea142559fd9cafd8505d4a4f87a1d81953a9c99fa61e7ccbd6b/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6770adafae25663b682420891a10a5894595f02b1e4d87766f7adc8e56e72a", size = 12969 }, - { url = "https://files.pythonhosted.org/packages/a2/67/0672caac9a04dc9011f7a27fc2ec2003f0bfa008070b29940d05b4dae56a/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:018cd3b41224ca81eb83cdf6db024409a920e5c1d3ce4e8b323cb66e24a73132", size = 13959 }, - { url = "https://files.pythonhosted.org/packages/e3/7e/313385214a5011cf9fe8376928f66f70bfedc48d8f7ab424292224ed4907/lru_dict-1.4.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:781dbcf0c83160e525482a4ebcd7c5065851a6c7295f1cda78248a2029f23f39", size = 14084 }, { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384 }, { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822 }, { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968 }, @@ -1177,17 +955,6 @@ 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/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631 }, - { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057 }, - { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050 }, - { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681 }, - { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705 }, - { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524 }, - { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282 }, - { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745 }, - { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571 }, - { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056 }, - { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932 }, { 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 }, @@ -1286,10 +1053,6 @@ dependencies = [ { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/bb/2a/8a94fd5542fabb9c760730196a1dabc40b1cf2363c27c1423f17ae7cd9e7/metkitlib-1.17.3.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:dd6e5ee217de4554f15bed65a84f9a6526743c09ed06ca712af34d29e8b063fd", size = 886921 }, - { url = "https://files.pythonhosted.org/packages/74/7a/be861714c6004a8d9b928a35e592da68ac02deadfde719783a2e9d9cf058/metkitlib-1.17.3.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:a3fe0094efb44e1a89f26dc7aef198d579aea52eadfa70a025c346821d43e113", size = 925708 }, - { url = "https://files.pythonhosted.org/packages/56/41/076558ca2b208d106b64135c9382b288391957a8d997b34cedcddf6aebcd/metkitlib-1.17.3.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:90c6c940c28438e5e8a01d8111b2b0856221858c53d1bde92ad2404ae24e87fb", size = 976933 }, - { url = "https://files.pythonhosted.org/packages/92/bb/339684b07961891555f71ff1d2411055058a4a5a91b03b553255f86c90bd/metkitlib-1.17.3.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:23c177b69358627c2bc9e9f4ceab756fc719f4519d9184986b5e2afac0809d31", size = 1008998 }, { url = "https://files.pythonhosted.org/packages/d4/de/b7f2d25236a214508a4599774731b442ddd26ae152efb885b448e0e29cc2/metkitlib-1.17.3.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:dc79e341081d28605b84bf21c01721f3edeccd6191d81800b2102f88f7ef2793", size = 886920 }, { url = "https://files.pythonhosted.org/packages/84/f0/b03171cbc8b39e388dab87ac7577446dd60443133d90ba2217cfdf8224d3/metkitlib-1.17.3.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6f6fdddd6c1168608eaee8f099cd51eafbacaba65875586bf0b47c47ddceed07", size = 925710 }, { url = "https://files.pythonhosted.org/packages/9d/30/53737da681ef5970543f423de6a57cc396fd52b9f3fbd8d165d5d573bffc/metkitlib-1.17.3.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:74102e39a1070f2534c4c9bfd30d5ef6903192af30f6101e536bb78963567112", size = 976933 }, @@ -1315,15 +1078,10 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "findlibs" }, { name = "mirlib" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, { name = "pyyaml" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/1f/89eac0ca0db436135051f1540db0772b1ac79cd2f583db0acee2e94cb255/mir_python-1.28.1.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:ad75301aca9b1f588145bc5c12fc3c905727be4592765a65b5ce1ad401e350fa", size = 141581 }, - { url = "https://files.pythonhosted.org/packages/d6/d5/555aa2543723db7c42fc2e27f3222533f466531d35e01bf377dd668b7406/mir_python-1.28.1.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:58ac2805f84043b74b77c04ec3bb3beaae161e94924961aa93b0c87c9ea4b436", size = 145420 }, - { url = "https://files.pythonhosted.org/packages/0d/61/5e9ebff32b30e8bd78835caf8b3f5d5820ed007e1ccfcec0a2569692c355/mir_python-1.28.1.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:608ef7cc47603cc4370ee8c6414de75ac3481f77328dd7c9025ecdb3c9b4a42d", size = 1145577 }, - { url = "https://files.pythonhosted.org/packages/99/af/edeb5897f533166d9be87f2714d2032017680f577196dc6d9c87a679490f/mir_python-1.28.1.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:5bdaf22f53c3d995f1826e60d19bcfe9b2bfca007ef47763f0ec4e68de482cf0", size = 1159308 }, { url = "https://files.pythonhosted.org/packages/70/dd/e4b7489dad09cd7760d913fa4f53717d98914fc32242e9fc9fbdbd6ef9e1/mir_python-1.28.1.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:5150f106b893f65546b6e6db931c4c695b54f853a573528cdd70e5d4c5805208", size = 140863 }, { url = "https://files.pythonhosted.org/packages/f5/c5/82826c8a8f006ce4081174d64cb18303deb6d2c8f57f8d657e187af3275b/mir_python-1.28.1.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:b02bfbc40a8e77672eaa751f63dc37a44392f1244fda22ca4e0e5ffc6876db5a", size = 144561 }, { url = "https://files.pythonhosted.org/packages/8c/eb/68f96ad53de7ef44670e3a312ef85127f3c2f1aad9e871b5a684e57bec2b/mir_python-1.28.1.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:292d964a558c4bc4a5fa58669b036ae55aad110b15ccc53b297e28e353f1265f", size = 1186778 }, @@ -1352,10 +1110,6 @@ dependencies = [ { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/85/d8f15dc31c545f8a20082997f69d60fa54c6e5b1ae39da61906cf43691bf/mirlib-1.28.1.19-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:7a72ef4299b4e3a2631827621f29142788d7f2f1d15a824aeda8e25d3560e110", size = 1839754 }, - { url = "https://files.pythonhosted.org/packages/01/f5/4930b0b6c081b12b1440d84d875418c36be024d5e1dc1f2dd1cf2e67911c/mirlib-1.28.1.19-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:e048f99f6e3230744c15b86bcf56ad344ea9752a86546a86548783fd7b4318b1", size = 1941922 }, - { url = "https://files.pythonhosted.org/packages/b2/9f/4d85db16cdabeef4b008c3b6a2ad58908b595a98ada7484e7a9390805d87/mirlib-1.28.1.19-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:38fbf984e83fa5e8286f07cb76dc4f5866fee76d344a3b49432edaeeef470b22", size = 2443706 }, - { url = "https://files.pythonhosted.org/packages/16/c1/357651acae50d34c6016e5aa8f86b7379dde21475c8be21740a14a33eb93/mirlib-1.28.1.19-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:dc82741bb1494bb1b500f862c3117847f5fad0d03b90fae63ce04baaf1b5538e", size = 2418516 }, { url = "https://files.pythonhosted.org/packages/a1/7e/5106ea2bdd18ef8c324e38c359f2b26e30335451c520965e0d03a627822f/mirlib-1.28.1.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:59c0a9e49d88aadd6e626a8769e2e7e703d92a282b3bfb65a6a586e0d43f9409", size = 1839746 }, { url = "https://files.pythonhosted.org/packages/a5/98/de2820c9c3eadca3cf06cd287483e132136b40c26acd19c26a8ff1f1cbd5/mirlib-1.28.1.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6d0d449b798e932b52ee3625a4fa14a5bac662812fafb5b50f1e2d69a42ab195", size = 1941921 }, { url = "https://files.pythonhosted.org/packages/49/78/299c8241a16719a261e01957b0d3e5b0bcaa71ad4abfe7d5d277fe8c0964/mirlib-1.28.1.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f6c3d71fd1709802df402dd14b60668a8332c9cbc1af2261f74d3d5cae6274", size = 2443710 }, @@ -1374,67 +1128,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/f4/a96d8d2995ed1403ebc279a5fc890ab13b39409f285fba5cc74724a2792f/mirlib-1.28.1.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:e0f3efff8a890e3367ebb6ef2cf53ee0c6add87a0645be3c5a49086e04e113e1", size = 2418518 }, ] -[[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/f5/a2/3b68a9e769db68668b25c6108444a35f9bd163bb848c0650d516761a59c0/msgpack-1.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0051fffef5a37ca2cd16978ae4f0aef92f164df86823871b5162812bebecd8e2", size = 81318 }, - { url = "https://files.pythonhosted.org/packages/5b/e1/2b720cc341325c00be44e1ed59e7cfeae2678329fbf5aa68f5bda57fe728/msgpack-1.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a605409040f2da88676e9c9e5853b3449ba8011973616189ea5ee55ddbc5bc87", size = 83786 }, - { url = "https://files.pythonhosted.org/packages/71/e5/c2241de64bfceac456b140737812a2ab310b10538a7b34a1d393b748e095/msgpack-1.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b696e83c9f1532b4af884045ba7f3aa741a63b2bc22617293a2c6a7c645f251", size = 398240 }, - { url = "https://files.pythonhosted.org/packages/b7/09/2a06956383c0fdebaef5aa9246e2356776f12ea6f2a44bd1368abf0e46c4/msgpack-1.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:365c0bbe981a27d8932da71af63ef86acc59ed5c01ad929e09a0b88c6294e28a", size = 406070 }, - { url = "https://files.pythonhosted.org/packages/0e/74/2957703f0e1ef20637d6aead4fbb314330c26f39aa046b348c7edcf6ca6b/msgpack-1.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:41d1a5d875680166d3ac5c38573896453bbbea7092936d2e107214daf43b1d4f", size = 393403 }, - { url = "https://files.pythonhosted.org/packages/a5/09/3bfc12aa90f77b37322fc33e7a8a7c29ba7c8edeadfa27664451801b9860/msgpack-1.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354e81bcdebaab427c3df4281187edc765d5d76bfb3a7c125af9da7a27e8458f", size = 398947 }, - { url = "https://files.pythonhosted.org/packages/4b/4f/05fcebd3b4977cb3d840f7ef6b77c51f8582086de5e642f3fefee35c86fc/msgpack-1.1.2-cp310-cp310-win32.whl", hash = "sha256:e64c8d2f5e5d5fda7b842f55dec6133260ea8f53c4257d64494c534f306bf7a9", size = 64769 }, - { url = "https://files.pythonhosted.org/packages/d0/3e/b4547e3a34210956382eed1c85935fff7e0f9b98be3106b3745d7dec9c5e/msgpack-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:db6192777d943bdaaafb6ba66d44bf65aa0e9c5616fa1d2da9bb08828c6b39aa", size = 71293 }, - { 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/ad/bd/8b0d01c756203fbab65d265859749860682ccd2a59594609aeec3a144efa/msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa", size = 81939 }, - { url = "https://files.pythonhosted.org/packages/34/68/ba4f155f793a74c1483d4bdef136e1023f7bcba557f0db4ef3db3c665cf1/msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:446abdd8b94b55c800ac34b102dffd2f6aa0ce643c55dfc017ad89347db3dbdb", size = 85064 }, - { url = "https://files.pythonhosted.org/packages/f2/60/a064b0345fc36c4c3d2c743c82d9100c40388d77f0b48b2f04d6041dbec1/msgpack-1.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c63eea553c69ab05b6747901b97d620bb2a690633c77f23feb0c6a947a8a7b8f", size = 417131 }, - { url = "https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42", size = 427556 }, - { url = "https://files.pythonhosted.org/packages/f5/87/ffe21d1bf7d9991354ad93949286f643b2bb6ddbeab66373922b44c3b8cc/msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9", size = 404920 }, - { url = "https://files.pythonhosted.org/packages/ff/41/8543ed2b8604f7c0d89ce066f42007faac1eaa7d79a81555f206a5cdb889/msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620", size = 415013 }, - { url = "https://files.pythonhosted.org/packages/41/0d/2ddfaa8b7e1cee6c490d46cb0a39742b19e2481600a7a0e96537e9c22f43/msgpack-1.1.2-cp312-cp312-win32.whl", hash = "sha256:1fff3d825d7859ac888b0fbda39a42d59193543920eda9d9bea44d958a878029", size = 65096 }, - { url = "https://files.pythonhosted.org/packages/8c/ec/d431eb7941fb55a31dd6ca3404d41fbb52d99172df2e7707754488390910/msgpack-1.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1de460f0403172cff81169a30b9a92b260cb809c4cb7e2fc79ae8d0510c78b6b", size = 72708 }, - { url = "https://files.pythonhosted.org/packages/c5/31/5b1a1f70eb0e87d1678e9624908f86317787b536060641d6798e3cf70ace/msgpack-1.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:be5980f3ee0e6bd44f3a9e9dea01054f175b50c3e6cdb692bc9424c0bbb8bf69", size = 64119 }, - { url = "https://files.pythonhosted.org/packages/6b/31/b46518ecc604d7edf3a4f94cb3bf021fc62aa301f0cb849936968164ef23/msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4efd7b5979ccb539c221a4c4e16aac1a533efc97f3b759bb5a5ac9f6d10383bf", size = 81212 }, - { url = "https://files.pythonhosted.org/packages/92/dc/c385f38f2c2433333345a82926c6bfa5ecfff3ef787201614317b58dd8be/msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42eefe2c3e2af97ed470eec850facbe1b5ad1d6eacdbadc42ec98e7dcf68b4b7", size = 84315 }, - { url = "https://files.pythonhosted.org/packages/d3/68/93180dce57f684a61a88a45ed13047558ded2be46f03acb8dec6d7c513af/msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999", size = 412721 }, - { url = "https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e", size = 424657 }, - { url = "https://files.pythonhosted.org/packages/38/f8/4398c46863b093252fe67368b44edc6c13b17f4e6b0e4929dbf0bdb13f23/msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162", size = 402668 }, - { url = "https://files.pythonhosted.org/packages/28/ce/698c1eff75626e4124b4d78e21cca0b4cc90043afb80a507626ea354ab52/msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794", size = 419040 }, - { url = "https://files.pythonhosted.org/packages/67/32/f3cd1667028424fa7001d82e10ee35386eea1408b93d399b09fb0aa7875f/msgpack-1.1.2-cp313-cp313-win32.whl", hash = "sha256:a7787d353595c7c7e145e2331abf8b7ff1e6673a6b974ded96e6d4ec09f00c8c", size = 65037 }, - { url = "https://files.pythonhosted.org/packages/74/07/1ed8277f8653c40ebc65985180b007879f6a836c525b3885dcc6448ae6cb/msgpack-1.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:a465f0dceb8e13a487e54c07d04ae3ba131c7c5b95e2612596eafde1dccf64a9", size = 72631 }, - { url = "https://files.pythonhosted.org/packages/e5/db/0314e4e2db56ebcf450f277904ffd84a7988b9e5da8d0d61ab2d057df2b6/msgpack-1.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:e69b39f8c0aa5ec24b57737ebee40be647035158f14ed4b40e6f150077e21a84", size = 64118 }, - { url = "https://files.pythonhosted.org/packages/22/71/201105712d0a2ff07b7873ed3c220292fb2ea5120603c00c4b634bcdafb3/msgpack-1.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e23ce8d5f7aa6ea6d2a2b326b4ba46c985dbb204523759984430db7114f8aa00", size = 81127 }, - { url = "https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939", size = 84981 }, - { url = "https://files.pythonhosted.org/packages/8e/a9/3536e385167b88c2cc8f4424c49e28d49a6fc35206d4a8060f136e71f94c/msgpack-1.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e2cb7b9031568a2a5c73aa077180f93dd2e95b4f8d3b8e14a73ae94a9e667e", size = 411885 }, - { url = "https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931", size = 419658 }, - { url = "https://files.pythonhosted.org/packages/3b/ef/2b92e286366500a09a67e03496ee8b8ba00562797a52f3c117aa2b29514b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:04fb995247a6e83830b62f0b07bf36540c213f6eac8e851166d8d86d83cbd014", size = 403290 }, - { url = "https://files.pythonhosted.org/packages/78/90/e0ea7990abea5764e4655b8177aa7c63cdfa89945b6e7641055800f6c16b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e22ab046fa7ede9e36eeb4cfad44d46450f37bb05d5ec482b02868f451c95e2", size = 415234 }, - { url = "https://files.pythonhosted.org/packages/72/4e/9390aed5db983a2310818cd7d3ec0aecad45e1f7007e0cda79c79507bb0d/msgpack-1.1.2-cp314-cp314-win32.whl", hash = "sha256:80a0ff7d4abf5fecb995fcf235d4064b9a9a8a40a3ab80999e6ac1e30b702717", size = 66391 }, - { url = "https://files.pythonhosted.org/packages/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b", size = 73787 }, - { url = "https://files.pythonhosted.org/packages/6a/b0/9d9f667ab48b16ad4115c1935d94023b82b3198064cb84a123e97f7466c1/msgpack-1.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:59415c6076b1e30e563eb732e23b994a61c159cec44deaf584e5cc1dd662f2af", size = 66453 }, - { url = "https://files.pythonhosted.org/packages/16/67/93f80545eb1792b61a217fa7f06d5e5cb9e0055bed867f43e2b8e012e137/msgpack-1.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:897c478140877e5307760b0ea66e0932738879e7aa68144d9b78ea4c8302a84a", size = 85264 }, - { url = "https://files.pythonhosted.org/packages/87/1c/33c8a24959cf193966ef11a6f6a2995a65eb066bd681fd085afd519a57ce/msgpack-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a668204fa43e6d02f89dbe79a30b0d67238d9ec4c5bd8a940fc3a004a47b721b", size = 89076 }, - { url = "https://files.pythonhosted.org/packages/fc/6b/62e85ff7193663fbea5c0254ef32f0c77134b4059f8da89b958beb7696f3/msgpack-1.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5559d03930d3aa0f3aacb4c42c776af1a2ace2611871c84a75afe436695e6245", size = 435242 }, - { url = "https://files.pythonhosted.org/packages/c1/47/5c74ecb4cc277cf09f64e913947871682ffa82b3b93c8dad68083112f412/msgpack-1.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70c5a7a9fea7f036b716191c29047374c10721c389c21e9ffafad04df8c52c90", size = 432509 }, - { url = "https://files.pythonhosted.org/packages/24/a4/e98ccdb56dc4e98c929a3f150de1799831c0a800583cde9fa022fa90602d/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2cb069d8b981abc72b41aea1c580ce92d57c673ec61af4c500153a626cb9e20", size = 415957 }, - { url = "https://files.pythonhosted.org/packages/da/28/6951f7fb67bc0a4e184a6b38ab71a92d9ba58080b27a77d3e2fb0be5998f/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d62ce1f483f355f61adb5433ebfd8868c5f078d1a52d042b0a998682b4fa8c27", size = 422910 }, - { url = "https://files.pythonhosted.org/packages/f0/03/42106dcded51f0a0b5284d3ce30a671e7bd3f7318d122b2ead66ad289fed/msgpack-1.1.2-cp314-cp314t-win32.whl", hash = "sha256:1d1418482b1ee984625d88aa9585db570180c286d942da463533b238b98b812b", size = 75197 }, - { url = "https://files.pythonhosted.org/packages/15/86/d0071e94987f8db59d4eeb386ddc64d0bb9b10820a8d82bcd3e53eeb2da6/msgpack-1.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5a46bf7e831d09470ad92dff02b8b1ac92175ca36b087f904a0519857c6be3ff", size = 85772 }, - { url = "https://files.pythonhosted.org/packages/81/f2/08ace4142eb281c12701fc3b93a10795e4d4dc7f753911d836675050f886/msgpack-1.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d99ef64f349d5ec3293688e91486c5fdb925ed03807f64d98d205d2713c60b46", size = 70868 }, -] - [[package]] name = "multiurl" version = "0.3.7" @@ -1459,48 +1152,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl", hash = "sha256:60567d774edf77db53906f89d9fbd164e66e56d66d388e1e6990f17ac33cfb53", size = 454815 }, ] -[[package]] -name = "netcdf4" -version = "1.7.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", -] -dependencies = [ - { name = "certifi", marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, - { name = "cftime", marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0e/76/7bc801796dee752c1ce9cd6935564a6ee79d5c9d9ef9192f57b156495a35/netcdf4-1.7.3.tar.gz", hash = "sha256:83f122fc3415e92b1d4904fd6a0898468b5404c09432c34beb6b16c533884673", size = 836095 } - [[package]] name = "netcdf4" version = "1.7.4" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] dependencies = [ - { name = "certifi", marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, - { name = "cftime", marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "certifi" }, + { name = "cftime" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/07/dfdd017641e82fadaf4e043d91fa179d34940c7d69175a3034dea877df9c/netcdf4-1.7.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b1c1a7ea3678db76bf33d14f7e202385d634db38c5e70d8cf4895971023eebb9", size = 23499427 }, - { url = "https://files.pythonhosted.org/packages/a7/6c/8cd98d166f30d378488c5235457d6af7df09f9925ab5ad03d6840543f42e/netcdf4-1.7.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d3f9497873454207f9480847d02b1b19a4bc81ad6e9166e1c17d4e2f8f3555d1", size = 22886591 }, - { url = "https://files.pythonhosted.org/packages/08/1c/ab31713a95160ebc6b4ec495cd4f03f38b235188a7e955bf33703c5039ca/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8e18294af803e80f8c0339f791901942e268c334c099bbd5f7ea8325a49801a", size = 10336881 }, - { url = "https://files.pythonhosted.org/packages/26/d7/bb16993af267acda23fe3de4ead2528cbe49043e391f732a1a4a15beec20/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b06c0b93fd0ecc1ec67a582f3ba98b7db9da1fa843c8f83fd75990e3701771e", size = 10182772 }, - { url = "https://files.pythonhosted.org/packages/9b/a6/e6fca338488a896c5e1f661ba3007e83f46700e1a59552b05013d501bc45/netcdf4-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:889ba77f084504aebaba9c6f9a88ac213431fef0e897f887cd35aef351ff7740", size = 21363337 }, { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499 }, { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667 }, { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769 }, @@ -1519,33 +1181,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682 }, ] -[[package]] -name = "networkx" -version = "3.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, -] - [[package]] name = "networkx" version = "3.6.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025 } wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504 }, @@ -1556,19 +1195,10 @@ name = "numexpr" version = "2.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { 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/db/91/ccd504cbe5b88d06987c77f42ba37a13ef05065fdab4afe6dcfeb2961faf/numexpr-2.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d0fab3fd06a04f6b86102552b26aa5d85e20ac7d8296c15764c726eeabae6cc8", size = 163200 }, - { url = "https://files.pythonhosted.org/packages/f3/89/6b07977baf2af75fb6692f9e7a1fb612a15f600fc921f3f565366de01f4a/numexpr-2.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:64ae5dfd62d74a3ef82fe0b37f80527247f3626171ad82025900f46ffca4b39a", size = 152085 }, - { url = "https://files.pythonhosted.org/packages/28/c2/c5775541256c4bf16b4d88fa1cffa74a0126703e513093c8774d911b0bb7/numexpr-2.14.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:955c92b064f9074d2970cf3138f5e3b965be673b82024962ed526f39bc25a920", size = 449435 }, - { url = "https://files.pythonhosted.org/packages/34/d4/d1a410901c620f7a6a3c5c2b1fc9dab22170be05a89d2c02ae699e27bd3f/numexpr-2.14.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75440c54fc01e130396650fdf307aa9d41a67dc06ddbfb288971b591c13a395b", size = 440197 }, - { url = "https://files.pythonhosted.org/packages/ac/c8/fa85f0cc5c39db587ba4927b862a92477c017ee8476e415e8120a100457b/numexpr-2.14.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dde9fa47ed319e1e1728940a539df3cb78326b7754bc7c6ab3152afc91808f9b", size = 1414125 }, - { url = "https://files.pythonhosted.org/packages/08/72/a58ddc05e0eabb3fa8d3fcd319f3d97870e6b41520832acfd04a6734c2c0/numexpr-2.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76db0bc6267e591ab9c4df405ffb533598e4c88239db7338d11ae9e4b368a85a", size = 1463041 }, - { url = "https://files.pythonhosted.org/packages/c4/c5/bdd1862302bb71a78dba941eaf7060e1274f1cf6af2d1b0f1880bfcb289b/numexpr-2.14.1-cp310-cp310-win32.whl", hash = "sha256:0d1dcbdc4d0374c0d523cee2f94f06b001623cbc1fd163612841017a3495427c", size = 166833 }, - { url = "https://files.pythonhosted.org/packages/18/af/26773a246716922794388786529e5640676399efabb0ee217ce034df9d27/numexpr-2.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:823cd82c8e7937981339f634e7a9c6a92cb2d0b9d0a5cf627a5e394fffc05377", size = 160068 }, { 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 }, @@ -1619,86 +1249,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/a2/5a1a2c72528b429337f49911b18c302ecd36eeab00f409147e1aa4ae4519/numexpr-2.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:a40b350cd45b4446076fa11843fa32bbe07024747aeddf6d467290bf9011b392", size = 163589 }, ] -[[package]] -name = "numpy" -version = "2.2.6" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, - { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, - { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, - { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, - { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, - { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, - { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, - { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, - { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, - { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, - { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, -] - [[package]] name = "numpy" version = "2.4.6" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807 } wheels = [ { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194 }, @@ -1789,19 +1343,6 @@ 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 } wheels = [ - { url = "https://files.pythonhosted.org/packages/10/5d/b95ca542a001135cc250a49370f282f578c8f4e46cc8617d73775297eea8/orjson-3.11.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:135869ef917b8704ea0a94e01620e0c05021c15c52036e4663baffe75e72f8ce", size = 228986 }, - { url = "https://files.pythonhosted.org/packages/80/01/be33fbff646e22f93398429ea645f20d2097aea1a6cdc1e6628e70125f83/orjson-3.11.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:115ab5f5f4a0f203cc2a5f0fb09aee503a3f771aa08392949ab5ca230c4fbdbd", size = 132558 }, - { url = "https://files.pythonhosted.org/packages/4e/61/73d49333bba660a075daccca10970dc6409ce1cf42ae4046646a19468aad/orjson-3.11.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4da3c38a2083ca4aaf9c2a36776cce3e9328e6647b10d118948f3cfb4913ffe4", size = 128213 }, - { url = "https://files.pythonhosted.org/packages/1f/7d/30e844b3dac3f74aed66b1f984daf9db3c98c0328c03d965a9e8dc06449e/orjson-3.11.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53b50b0e14084b8f7e29c5ce84c5af0f1160169b30d8a6914231d97d2fe297d4", size = 135430 }, - { url = "https://files.pythonhosted.org/packages/16/64/bd815f5c610b3facc204f26ba94e87a9eb49b0d83de3d5fc1eee2402d91b/orjson-3.11.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:231742b4a11dad8d5380a435962c57e91b7c37b79be858f4ef1c0df1a259897e", size = 146178 }, - { url = "https://files.pythonhosted.org/packages/c7/35/e744fd36c79b339d27beb06068b5a08a8882ef5418804d0ce545a31f718d/orjson-3.11.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34fd2317602587321faab75ab76c623a0117e80841a6413654f04e47f339a8fb", size = 133068 }, - { url = "https://files.pythonhosted.org/packages/2a/56/d54152b67b63a0b3e556cfc549d6ce84f74d7f425ddeadc6c8a74d913da7/orjson-3.11.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71f3db16e69b667b132e0f305a833d5497da302d801508cbb051ed9a9819da47", size = 134217 }, - { url = "https://files.pythonhosted.org/packages/0b/ee/66154baf69f71c7164a268a5e888908aec5a0819d13c81d5e2755a257758/orjson-3.11.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0b34789fa0da61cf7bef0546b09c738fb195331e017e477096d129e9105ab03d", size = 141917 }, - { url = "https://files.pythonhosted.org/packages/09/d3/c5824260ca8b9d7ba82648d042a3f8f4815d18c15bb98a1f30edd1bb2d83/orjson-3.11.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:87e4d4ab280b0c87424d47695bec2182caf8cfc17879ea78dab76680194abc13", size = 415356 }, - { url = "https://files.pythonhosted.org/packages/64/cb/509c2e816fe4df641d93dc92f6a89adc8df3ada8ebdee2bd44aba3264c3c/orjson-3.11.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ace6c58523302d3b97b6ac5c38a5298a54b473762b6be82726b4265c41029f92", size = 148112 }, - { url = "https://files.pythonhosted.org/packages/db/b5/3ceae56d2e4962979eedb023ba6a46a4bb65f333960379be0ca470686220/orjson-3.11.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:97d0d932803c1b164fde11cb542a9efcb1e0f63b184537cca65887147906ff48", size = 137112 }, - { url = "https://files.pythonhosted.org/packages/d7/7a/81fa3f2c7bef79b04cf2ab7838e5ac74b1f12511ceab979759b0275d6bb4/orjson-3.11.9-cp310-cp310-win32.whl", hash = "sha256:b3afcf569c15577a9fe64627292daa3e6b3a70f4fb77a5df246a87ec21681b94", size = 131706 }, - { url = "https://files.pythonhosted.org/packages/ae/d8/b64600f9083c7f151ad39717a5877fccbeb0ef6d7efcb55f971ce00b6bee/orjson-3.11.9-cp310-cp310-win_amd64.whl", hash = "sha256:8697ab6a080a5c46edaad50e2bc5bd8c7ca5c66442d24104fa44ec74910a8244", size = 127282 }, { 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 }, { 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 }, { 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 }, @@ -1873,89 +1414,14 @@ 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.3.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "python-dateutil", marker = "python_full_version < '3.11'" }, - { name = "pytz", marker = "python_full_version < '3.11'" }, - { name = "tzdata", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763 }, - { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217 }, - { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791 }, - { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373 }, - { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444 }, - { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459 }, - { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086 }, - { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790 }, - { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831 }, - { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267 }, - { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281 }, - { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453 }, - { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361 }, - { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702 }, - { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846 }, - { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618 }, - { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212 }, - { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693 }, - { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002 }, - { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971 }, - { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722 }, - { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671 }, - { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807 }, - { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872 }, - { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371 }, - { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333 }, - { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120 }, - { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991 }, - { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227 }, - { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056 }, - { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189 }, - { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912 }, - { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160 }, - { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233 }, - { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635 }, - { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079 }, - { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049 }, - { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638 }, - { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834 }, - { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925 }, - { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071 }, - { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504 }, - { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702 }, - { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535 }, - { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582 }, - { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963 }, - { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175 }, -] - [[package]] name = "pandas" version = "3.0.3" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "python-dateutil", marker = "python_full_version >= '3.11'" }, - { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414 } wheels = [ @@ -2037,10 +1503,8 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "eccodes" }, - { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "pandas" }, + { name = "pint" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763 } wheels = [ @@ -2052,51 +1516,22 @@ name = "pexpect" version = "4.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ptyprocess", marker = "(python_full_version < '3.11' and platform_machine != 'ARM64' and sys_platform == 'win32') or (python_full_version < '3.11' and sys_platform == 'emscripten') or (sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "ptyprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] 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 = "pint" -version = "0.24.4" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -dependencies = [ - { name = "flexcache", marker = "python_full_version < '3.11'" }, - { name = "flexparser", marker = "python_full_version < '3.11'" }, - { name = "platformdirs", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029 }, -] - [[package]] name = "pint" version = "0.25.3" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] dependencies = [ - { name = "flexcache", marker = "python_full_version >= '3.11'" }, - { name = "flexparser", marker = "python_full_version >= '3.11'" }, - { name = "platformdirs", marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, + { name = "flexcache" }, + { name = "flexparser" }, + { name = "platformdirs" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106 } wheels = [ @@ -2133,12 +1568,9 @@ dependencies = [ { name = "pproc-core" }, { name = "pproc-runtime" }, { name = "psutil" }, - { name = "scikit-learn", version = "1.7.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "scikit-learn", version = "1.9.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "scikit-learn" }, + { name = "scipy" }, + { name = "xarray" }, ] [package.optional-dependencies] @@ -2183,12 +1615,9 @@ dependencies = [ { name = "code-meters" }, { name = "conflator" }, { name = "earthkit-time" }, - { name = "earthkit-workflows", version = "0.6.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "earthkit-workflows", version = "0.14.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "earthkit-workflows", extra = ["vizualize"] }, + { name = "numpy" }, + { name = "pandas" }, { name = "pydantic" }, ] @@ -2204,7 +1633,7 @@ requires-dist = [ { name = "code-meters" }, { name = "conflator", specifier = ">=0.1.8" }, { name = "earthkit-time" }, - { name = "earthkit-workflows" }, + { name = "earthkit-workflows", extras = ["vizualize"], specifier = ">=0.15.1" }, { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, @@ -2228,8 +1657,7 @@ dependencies = [ { name = "eccodes" }, { name = "fdb5lib" }, { name = "mir-python" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, { name = "thermofeel" }, ] @@ -2390,20 +1818,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146 }, - { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769 }, - { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958 }, - { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118 }, - { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876 }, - { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703 }, - { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042 }, - { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231 }, - { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388 }, - { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769 }, - { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312 }, - { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817 }, - { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085 }, - { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311 }, { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872 }, { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255 }, { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827 }, @@ -2519,8 +1933,7 @@ version = "0.1.1" source = { git = "ssh://git@github.com/ecmwf/infero.git?subdirectory=src%2Finfero%2Fapi%2Fpyinfero&rev=0.3.1#63046295c28729d3eb0410a56ddfc4b68273e930" } dependencies = [ { name = "cffi" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, ] [[package]] @@ -2529,12 +1942,6 @@ version = "0.20.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/ce/3a/5031723c09068e9c8c2f0bc25c3a9245f2b1d1aea8396c787a408f2b95ca/pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", size = 103642 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/19/c343b14061907b629b765444b6436b160e2bd4184d17d4804bbe6381f6be/pyrsistent-0.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c3aba3e01235221e5b229a6c05f585f344734bd1ad42a8ac51493d74722bbce", size = 83416 }, - { url = "https://files.pythonhosted.org/packages/9f/4f/8342079ea331031ef9ed57edd312a9ad283bcc8adfaf268931ae356a09a6/pyrsistent-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1beb78af5423b879edaf23c5591ff292cf7c33979734c99aa66d5914ead880f", size = 118021 }, - { url = "https://files.pythonhosted.org/packages/d7/b7/64a125c488243965b7c5118352e47c6f89df95b4ac306d31cee409153d57/pyrsistent-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21cc459636983764e692b9eba7144cdd54fdec23ccdb1e8ba392a63666c60c34", size = 117747 }, - { url = "https://files.pythonhosted.org/packages/fe/a5/43c67bd5f80df9e7583042398d12113263ec57f27c0607abe9d78395d18f/pyrsistent-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5ac696f02b3fc01a710427585c855f65cd9c640e14f52abe52020722bb4906b", size = 114524 }, - { url = "https://files.pythonhosted.org/packages/8a/98/b382a87e89ca839106d874f7bf78d226b3eedb26735eb6f751f1a3375f21/pyrsistent-0.20.0-cp310-cp310-win32.whl", hash = "sha256:0724c506cd8b63c69c7f883cc233aac948c1ea946ea95996ad8b1380c25e1d3f", size = 60780 }, - { url = "https://files.pythonhosted.org/packages/37/8a/23e2193f7adea6901262e3cf39c7fe18ac0c446176c0ff0e19aeb2e9681e/pyrsistent-0.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:8441cf9616d642c475684d6cf2520dd24812e996ba9af15e606df5f6fd9d04a7", size = 63310 }, { url = "https://files.pythonhosted.org/packages/df/63/7544dc7d0953294882a5c587fb1b10a26e0c23d9b92281a14c2514bac1f7/pyrsistent-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", size = 83481 }, { url = "https://files.pythonhosted.org/packages/ae/a0/49249bc14d71b1bf2ffe89703acfa86f2017c25cfdabcaea532b8c8a5810/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", size = 120222 }, { url = "https://files.pythonhosted.org/packages/a1/94/9808e8c9271424120289b9028a657da336ad7e43da0647f62e4f6011d19b/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", size = 120002 }, @@ -2556,12 +1963,10 @@ version = "9.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, { name = "pygments" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165 } wheels = [ @@ -2594,12 +1999,10 @@ name = "pyvis" version = "0.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ipython", version = "8.39.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "ipython", version = "9.14.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "ipython" }, { name = "jinja2" }, { name = "jsonpickle" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "networkx", version = "3.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "networkx" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ab/4b/e37e4e5d5ee1179694917b445768bdbfb084f5a59ecd38089d3413d4c70f/pyvis-0.3.2-py3-none-any.whl", hash = "sha256:5720c4ca8161dc5d9ab352015723abb7a8bb8fb443edeb07f7a322db34a97555", size = 756038 }, @@ -2611,15 +2014,6 @@ 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/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227 }, - { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019 }, - { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646 }, - { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793 }, - { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293 }, - { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872 }, - { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828 }, - { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415 }, - { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561 }, { 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 }, @@ -2678,16 +2072,6 @@ dependencies = [ ] 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/67/b9/52aa9ec2867528b54f1e60846728d8b4d84726630874fee3a91e66c7df81/pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4", size = 1329850 }, - { url = "https://files.pythonhosted.org/packages/99/64/5653e7b7425b169f994835a2b2abf9486264401fdef18df91ddae47ce2cc/pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556", size = 906380 }, - { url = "https://files.pythonhosted.org/packages/73/78/7d713284dbe022f6440e391bd1f3c48d9185673878034cfb3939cdf333b2/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b", size = 666421 }, - { url = "https://files.pythonhosted.org/packages/30/76/8f099f9d6482450428b17c4d6b241281af7ce6a9de8149ca8c1c649f6792/pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e", size = 854149 }, - { url = "https://files.pythonhosted.org/packages/59/f0/37fbfff06c68016019043897e4c969ceab18bde46cd2aca89821fcf4fb2e/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526", size = 1655070 }, - { url = "https://files.pythonhosted.org/packages/47/14/7254be73f7a8edc3587609554fcaa7bfd30649bf89cd260e4487ca70fdaa/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1", size = 2033441 }, - { url = "https://files.pythonhosted.org/packages/22/dc/49f2be26c6f86f347e796a4d99b19167fc94503f0af3fd010ad262158822/pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386", size = 1891529 }, - { url = "https://files.pythonhosted.org/packages/a3/3e/154fb963ae25be70c0064ce97776c937ecc7d8b0259f22858154a9999769/pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda", size = 567276 }, - { url = "https://files.pythonhosted.org/packages/62/b2/f4ab56c8c595abcb26b2be5fd9fa9e6899c1e5ad54964e93ae8bb35482be/pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f", size = 632208 }, - { url = "https://files.pythonhosted.org/packages/3b/e3/be2cc7ab8332bdac0522fdb64c17b1b6241a795bee02e0196636ec5beb79/pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32", size = 559766 }, { 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 }, @@ -2730,11 +2114,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, - { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266 }, - { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206 }, - { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747 }, - { url = "https://files.pythonhosted.org/packages/d1/db/5c4d6807434751e3f21231bee98109aa57b9b9b55e058e450d0aef59b70f/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74", size = 747371 }, - { url = "https://files.pythonhosted.org/packages/26/af/78ce193dbf03567eb8c0dc30e3df2b9e56f12a670bf7eb20f9fb532c7e8a/pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba", size = 544862 }, { 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 }, @@ -2747,13 +2126,13 @@ name = "qubed" version = "0.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "frozendict", marker = "python_full_version >= '3.11'" }, - { name = "humanize", marker = "python_full_version >= '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "objsize", marker = "python_full_version >= '3.11'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "protobuf", marker = "python_full_version >= '3.11'" }, - { name = "requests", marker = "python_full_version >= '3.11'" }, + { name = "frozendict" }, + { name = "humanize" }, + { name = "numpy" }, + { name = "objsize" }, + { name = "pandas" }, + { name = "protobuf" }, + { name = "requests" }, ] sdist = { url = "https://files.pythonhosted.org/packages/12/a2/d4cd7fbc41fef2b308f10ed3f9c5bb1cf40f338ff3a0e37692325ba28b77/qubed-0.3.1.tar.gz", hash = "sha256:fadcf4be1668f0cfc58fcf430a15613e0f53f0df4e07fd05694c9caba39e8258", size = 15152020 } wheels = [ @@ -2844,8 +2223,7 @@ version = "0.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, - { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036 } @@ -2893,146 +2271,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl", hash = "sha256:d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142", size = 25616 }, ] -[[package]] -name = "rpds-py" -version = "0.30.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -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/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490 }, - { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751 }, - { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696 }, - { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136 }, - { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699 }, - { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022 }, - { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522 }, - { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579 }, - { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305 }, - { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503 }, - { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322 }, - { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792 }, - { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901 }, - { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823 }, - { 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/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086 }, - { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053 }, - { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763 }, - { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951 }, - { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622 }, - { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492 }, - { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080 }, - { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680 }, - { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589 }, - { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289 }, - { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737 }, - { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120 }, - { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782 }, - { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463 }, - { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868 }, - { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887 }, - { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904 }, - { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945 }, - { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783 }, - { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021 }, - { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589 }, - { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025 }, - { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895 }, - { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799 }, - { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731 }, - { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027 }, - { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020 }, - { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139 }, - { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224 }, - { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645 }, - { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443 }, - { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375 }, - { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850 }, - { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812 }, - { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841 }, - { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149 }, - { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843 }, - { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507 }, - { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949 }, - { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790 }, - { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217 }, - { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806 }, - { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341 }, - { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768 }, - { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099 }, - { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192 }, - { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080 }, - { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841 }, - { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670 }, - { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005 }, - { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112 }, - { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049 }, - { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661 }, - { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606 }, - { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126 }, - { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371 }, - { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298 }, - { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604 }, - { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391 }, - { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868 }, - { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747 }, - { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795 }, - { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330 }, - { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194 }, - { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340 }, - { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765 }, - { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834 }, - { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470 }, - { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630 }, - { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148 }, - { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030 }, - { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570 }, - { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532 }, - { 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 = "rpds-py" version = "2026.5.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459 } wheels = [ { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609 }, @@ -3166,74 +2408,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326 }, ] -[[package]] -name = "scikit-learn" -version = "1.7.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -dependencies = [ - { name = "joblib", marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "threadpoolctl", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/98/c2/a7855e41c9d285dfe86dc50b250978105dce513d6e459ea66a6aeb0e1e0c/scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda", size = 7193136 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/3e/daed796fd69cce768b8788401cc464ea90b306fb196ae1ffed0b98182859/scikit_learn-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b33579c10a3081d076ab403df4a4190da4f4432d443521674637677dc91e61f", size = 9336221 }, - { url = "https://files.pythonhosted.org/packages/1c/ce/af9d99533b24c55ff4e18d9b7b4d9919bbc6cd8f22fe7a7be01519a347d5/scikit_learn-1.7.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:36749fb62b3d961b1ce4fedf08fa57a1986cd409eff2d783bca5d4b9b5fce51c", size = 8653834 }, - { url = "https://files.pythonhosted.org/packages/58/0e/8c2a03d518fb6bd0b6b0d4b114c63d5f1db01ff0f9925d8eb10960d01c01/scikit_learn-1.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7a58814265dfc52b3295b1900cfb5701589d30a8bb026c7540f1e9d3499d5ec8", size = 9660938 }, - { url = "https://files.pythonhosted.org/packages/2b/75/4311605069b5d220e7cf5adabb38535bd96f0079313cdbb04b291479b22a/scikit_learn-1.7.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a847fea807e278f821a0406ca01e387f97653e284ecbd9750e3ee7c90347f18", size = 9477818 }, - { url = "https://files.pythonhosted.org/packages/7f/9b/87961813c34adbca21a6b3f6b2bea344c43b30217a6d24cc437c6147f3e8/scikit_learn-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:ca250e6836d10e6f402436d6463d6c0e4d8e0234cfb6a9a47835bd392b852ce5", size = 8886969 }, - { url = "https://files.pythonhosted.org/packages/43/83/564e141eef908a5863a54da8ca342a137f45a0bfb71d1d79704c9894c9d1/scikit_learn-1.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7509693451651cd7361d30ce4e86a1347493554f172b1c72a39300fa2aea79e", size = 9331967 }, - { url = "https://files.pythonhosted.org/packages/18/d6/ba863a4171ac9d7314c4d3fc251f015704a2caeee41ced89f321c049ed83/scikit_learn-1.7.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:0486c8f827c2e7b64837c731c8feff72c0bd2b998067a8a9cbc10643c31f0fe1", size = 8648645 }, - { url = "https://files.pythonhosted.org/packages/ef/0e/97dbca66347b8cf0ea8b529e6bb9367e337ba2e8be0ef5c1a545232abfde/scikit_learn-1.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89877e19a80c7b11a2891a27c21c4894fb18e2c2e077815bcade10d34287b20d", size = 9715424 }, - { url = "https://files.pythonhosted.org/packages/f7/32/1f3b22e3207e1d2c883a7e09abb956362e7d1bd2f14458c7de258a26ac15/scikit_learn-1.7.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8da8bf89d4d79aaec192d2bda62f9b56ae4e5b4ef93b6a56b5de4977e375c1f1", size = 9509234 }, - { url = "https://files.pythonhosted.org/packages/9f/71/34ddbd21f1da67c7a768146968b4d0220ee6831e4bcbad3e03dd3eae88b6/scikit_learn-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:9b7ed8d58725030568523e937c43e56bc01cadb478fc43c042a9aca1dacb3ba1", size = 8894244 }, - { url = "https://files.pythonhosted.org/packages/a7/aa/3996e2196075689afb9fce0410ebdb4a09099d7964d061d7213700204409/scikit_learn-1.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8d91a97fa2b706943822398ab943cde71858a50245e31bc71dba62aab1d60a96", size = 9259818 }, - { url = "https://files.pythonhosted.org/packages/43/5d/779320063e88af9c4a7c2cf463ff11c21ac9c8bd730c4a294b0000b666c9/scikit_learn-1.7.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:acbc0f5fd2edd3432a22c69bed78e837c70cf896cd7993d71d51ba6708507476", size = 8636997 }, - { url = "https://files.pythonhosted.org/packages/5c/d0/0c577d9325b05594fdd33aa970bf53fb673f051a45496842caee13cfd7fe/scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b", size = 9478381 }, - { url = "https://files.pythonhosted.org/packages/82/70/8bf44b933837ba8494ca0fc9a9ab60f1c13b062ad0197f60a56e2fc4c43e/scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44", size = 9300296 }, - { url = "https://files.pythonhosted.org/packages/c6/99/ed35197a158f1fdc2fe7c3680e9c70d0128f662e1fee4ed495f4b5e13db0/scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290", size = 8731256 }, - { url = "https://files.pythonhosted.org/packages/ae/93/a3038cb0293037fd335f77f31fe053b89c72f17b1c8908c576c29d953e84/scikit_learn-1.7.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b7dacaa05e5d76759fb071558a8b5130f4845166d88654a0f9bdf3eb57851b7", size = 9212382 }, - { url = "https://files.pythonhosted.org/packages/40/dd/9a88879b0c1104259136146e4742026b52df8540c39fec21a6383f8292c7/scikit_learn-1.7.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:abebbd61ad9e1deed54cca45caea8ad5f79e1b93173dece40bb8e0c658dbe6fe", size = 8592042 }, - { url = "https://files.pythonhosted.org/packages/46/af/c5e286471b7d10871b811b72ae794ac5fe2989c0a2df07f0ec723030f5f5/scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f", size = 9434180 }, - { url = "https://files.pythonhosted.org/packages/f1/fd/df59faa53312d585023b2da27e866524ffb8faf87a68516c23896c718320/scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0", size = 9283660 }, - { url = "https://files.pythonhosted.org/packages/a7/c7/03000262759d7b6f38c836ff9d512f438a70d8a8ddae68ee80de72dcfb63/scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c", size = 8702057 }, - { url = "https://files.pythonhosted.org/packages/55/87/ef5eb1f267084532c8e4aef98a28b6ffe7425acbfd64b5e2f2e066bc29b3/scikit_learn-1.7.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9acb6c5e867447b4e1390930e3944a005e2cb115922e693c08a323421a6966e8", size = 9558731 }, - { url = "https://files.pythonhosted.org/packages/93/f8/6c1e3fc14b10118068d7938878a9f3f4e6d7b74a8ddb1e5bed65159ccda8/scikit_learn-1.7.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:2a41e2a0ef45063e654152ec9d8bcfc39f7afce35b08902bfe290c2498a67a6a", size = 9038852 }, - { url = "https://files.pythonhosted.org/packages/83/87/066cafc896ee540c34becf95d30375fe5cbe93c3b75a0ee9aa852cd60021/scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c", size = 9527094 }, - { url = "https://files.pythonhosted.org/packages/9c/2b/4903e1ccafa1f6453b1ab78413938c8800633988c838aa0be386cbb33072/scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c", size = 9367436 }, - { url = "https://files.pythonhosted.org/packages/b5/aa/8444be3cfb10451617ff9d177b3c190288f4563e6c50ff02728be67ad094/scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973", size = 9275749 }, - { url = "https://files.pythonhosted.org/packages/d9/82/dee5acf66837852e8e68df6d8d3a6cb22d3df997b733b032f513d95205b7/scikit_learn-1.7.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fa8f63940e29c82d1e67a45d5297bdebbcb585f5a5a50c4914cc2e852ab77f33", size = 9208906 }, - { url = "https://files.pythonhosted.org/packages/3c/30/9029e54e17b87cb7d50d51a5926429c683d5b4c1732f0507a6c3bed9bf65/scikit_learn-1.7.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:f95dc55b7902b91331fa4e5845dd5bde0580c9cd9612b1b2791b7e80c3d32615", size = 8627836 }, - { url = "https://files.pythonhosted.org/packages/60/18/4a52c635c71b536879f4b971c2cedf32c35ee78f48367885ed8025d1f7ee/scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106", size = 9426236 }, - { url = "https://files.pythonhosted.org/packages/99/7e/290362f6ab582128c53445458a5befd471ed1ea37953d5bcf80604619250/scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61", size = 9312593 }, - { url = "https://files.pythonhosted.org/packages/8e/87/24f541b6d62b1794939ae6422f8023703bbf6900378b2b34e0b4384dfefd/scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8", size = 8820007 }, -] - [[package]] name = "scikit-learn" version = "1.9.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] dependencies = [ - { name = "joblib", marker = "python_full_version >= '3.11'" }, - { name = "narwhals", marker = "python_full_version >= '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "threadpoolctl", marker = "python_full_version >= '3.11'" }, + { name = "joblib" }, + { name = "narwhals" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767 } wheels = [ @@ -3269,82 +2453,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/f3/ff83d76d7418112e5a61326443cdda87be3545dd8d6599c95b2481a4419e/scikit_learn-1.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa", size = 8222661 }, ] -[[package]] -name = "scipy" -version = "1.15.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770 }, - { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511 }, - { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151 }, - { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732 }, - { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617 }, - { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964 }, - { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749 }, - { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383 }, - { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201 }, - { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255 }, - { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035 }, - { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499 }, - { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602 }, - { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415 }, - { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622 }, - { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796 }, - { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684 }, - { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504 }, - { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735 }, - { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284 }, - { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958 }, - { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454 }, - { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199 }, - { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455 }, - { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140 }, - { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549 }, - { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184 }, - { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256 }, - { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540 }, - { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115 }, - { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884 }, - { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018 }, - { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716 }, - { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342 }, - { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869 }, - { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851 }, - { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011 }, - { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407 }, - { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030 }, - { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709 }, - { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045 }, - { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062 }, - { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132 }, - { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503 }, - { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097 }, -] - [[package]] name = "scipy" version = "1.17.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822 } wheels = [ @@ -3442,15 +2556,6 @@ 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 = "tblib" -version = "3.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f4/8a/14c15ae154895cc131174f858c707790d416c444fc69f93918adfd8c4c0b/tblib-3.2.2.tar.gz", hash = "sha256:e9a652692d91bf4f743d4a15bc174c0b76afc750fe8c7b6d195cc1c1d6d2ccec", size = 35046 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/be/5d2d47b1fb58943194fb59dcf222f7c4e35122ec0ffe8c36e18b5d728f0b/tblib-3.2.2-py3-none-any.whl", hash = "sha256:26bdccf339bcce6a88b2b5432c988b266ebbe63a4e593f6b578b1d2e723d2b76", size = 12893 }, -] - [[package]] name = "termcolor" version = "3.3.0" @@ -3465,8 +2570,7 @@ name = "thermofeel" version = "2.1.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8a/9b/467dc4de053aa5ba379ecc9ac000c62551520fc4bcc1a079ddbdbaebfa11/thermofeel-2.1.7.tar.gz", hash = "sha256:f034ffa8d8d096416cd94cc234a67db8afc2ae72ca872144c59e9fc104b09073", size = 38251 } wheels = [ @@ -3482,60 +2586,6 @@ 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 = "tomli" -version = "2.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704 }, - { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454 }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561 }, - { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824 }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227 }, - { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859 }, - { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204 }, - { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084 }, - { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285 }, - { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924 }, - { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018 }, - { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948 }, - { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341 }, - { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159 }, - { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290 }, - { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141 }, - { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847 }, - { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088 }, - { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866 }, - { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887 }, - { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704 }, - { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628 }, - { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180 }, - { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674 }, - { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976 }, - { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755 }, - { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265 }, - { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726 }, - { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859 }, - { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713 }, - { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084 }, - { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973 }, - { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223 }, - { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973 }, - { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082 }, - { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490 }, - { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263 }, - { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736 }, - { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717 }, - { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461 }, - { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855 }, - { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144 }, - { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683 }, - { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196 }, - { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393 }, - { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, -] - [[package]] name = "toolz" version = "1.1.0" @@ -3545,23 +2595,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093 }, ] -[[package]] -name = "tornado" -version = "6.5.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/50/57/6d7303a77ae439d9189108f76c0c4fd89ee5e2cc8387bffb55232565c4ed/tornado-6.5.6.tar.gz", hash = "sha256:9a365179fe8ff6b8766f602c0f67c185d778193e9bdd828b19f0b6ed7764177d", size = 518139 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/0d/b4f481e18c5a51864e6d12b9a05ecf72919696680b747c958c3fc1f4fbae/tornado-6.5.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:65fcfaafb079435c2c19dc9e07c0f1cf0fa9051759ed0a7d0a3ba7ea7f64919c", size = 447737 }, - { url = "https://files.pythonhosted.org/packages/9e/9c/5430c39fcab1144d35860f457b15e9c08b4bc7ac86764354204e983d6183/tornado-6.5.6-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:38bc01b4acacded2de63ae78023548e41ebe6fbed3ec05a796d7ae3ad893887e", size = 445899 }, - { url = "https://files.pythonhosted.org/packages/8b/79/fa7e14a2f939c807a8d30619b4eb604eab219601b78792516ebe22d40cf9/tornado-6.5.6-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b942e6a137fda31ff54bf8e6e2c8d1c37f1f50583f3ed53fb840b53b9601d104", size = 448964 }, - { url = "https://files.pythonhosted.org/packages/a7/71/bd67d5f5199f937dafe03a49a37989f60f600ff6fef34c79412a829d97bd/tornado-6.5.6-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8666946e70171b8c3f1fc9b7876fac492e84822c4c7f3746f4e8f8bc9ac92a79", size = 449935 }, - { url = "https://files.pythonhosted.org/packages/cc/a4/c24388c9cf5b3c3a513b56a158af9f23092c9a2810d789e294310797df21/tornado-6.5.6-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c34cfab7ad6d104f052f55de06d39bbafc5885cfeb4da688803308dbcfa90b7", size = 449767 }, - { url = "https://files.pythonhosted.org/packages/a5/eb/6a07ad550c3f7b37244bd0becdf293ec3d3e961783d8b720a97df50de1b2/tornado-6.5.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:385f35e4e22fb52551dfcda4cdc8c30c61c2c001aef5ddad99cdfe116952efd3", size = 449174 }, - { url = "https://files.pythonhosted.org/packages/bb/84/3469e098dccdb6763130e06aacd786bb4363fca7b590a55c101ddf34ed30/tornado-6.5.6-cp39-abi3-win32.whl", hash = "sha256:db475f1b67b2809b10bb16264829087724ca8d24fe4ed47f7b8675cae453ef86", size = 450230 }, - { url = "https://files.pythonhosted.org/packages/d2/3c/273a04e0b9dd9016f1685cca0c1c8795a71ac88a34a8c889a0b443483226/tornado-6.5.6-cp39-abi3-win_amd64.whl", hash = "sha256:6739bf1e8eb09230f1280ddbd3236f0309db70f2c551a8dbc40f62babdf82f79", size = 450667 }, - { url = "https://files.pythonhosted.org/packages/02/98/0cffe22a224f60c5fb1e3aa0b76f9da2e1ca78b0e9545e3d077c68ce60a7/tornado-6.5.6-cp39-abi3-win_arm64.whl", hash = "sha256:2543597b24a695d72338a9a77818362d72387c03ae173f1f169eadc5c91466ac", size = 449690 }, -] - [[package]] name = "tqdm" version = "4.68.1" @@ -3662,57 +2695,20 @@ version = "3.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/47/6a/62e288da7bcda82b935ff0c6cfe542970f04e29c756b0e147251b2fb251f/wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061", size = 10857 } -[[package]] -name = "xarray" -version = "2025.6.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", -] -dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "packaging", marker = "python_full_version < '3.11'" }, - { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739 }, -] - [[package]] name = "xarray" version = "2026.4.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] dependencies = [ - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311 } wheels = [ { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326 }, ] -[[package]] -name = "zict" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d1/ac/3c494dd7ec5122cff8252c1a209b282c0867af029f805ae9befd73ae37eb/zict-3.0.0.tar.gz", hash = "sha256:e321e263b6a97aafc0790c3cfb3c04656b7066e6738c37fffcca95d803c9fba5", size = 33238 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl", hash = "sha256:5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae", size = 43332 }, -] - [[package]] name = "zipp" version = "4.1.0" From 4d211d951cc8bf4f5e30e628345b5ad14b554161 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 8 Jul 2026 11:23:36 +0000 Subject: [PATCH 46/95] Add depth first reconstruction --- pproc-core/src/ppcore/schema/base.py | 95 +++++++++++++++++-- pproc-core/src/ppcore/schema/input.py | 13 ++- pproc-core/src/ppcore/schema/schema.py | 12 ++- .../tests/ppcore/schema/test_config_schema.py | 8 ++ 4 files changed, 118 insertions(+), 10 deletions(-) diff --git a/pproc-core/src/ppcore/schema/base.py b/pproc-core/src/ppcore/schema/base.py index 0609de98..9f8b3a77 100644 --- a/pproc-core/src/ppcore/schema/base.py +++ b/pproc-core/src/ppcore/schema/base.py @@ -14,6 +14,7 @@ from typing import Callable from typing import Iterator from typing import Optional +from typing import Literal import yaml from typing_extensions import Self @@ -233,10 +234,84 @@ def _find_matching( logger.debug("Matched config: %s", cfg) yield cfg + @classmethod + def _find_matching_dps( + cls, + schema: dict, + configs: list[dict], + **matching, + ) -> Iterator[dict]: + missing = object() + matching_funcs = [ + (key, value, cls.custom_match.get(key, DEFAULT_MATCH)) + for key, value in matching.items() + ] + + def _walk_schema(current_schema: dict, current_cfg: dict) -> Iterator[dict]: + items = list(current_schema.items()) + + def _walk_items(index: int, cfg: dict) -> Iterator[dict]: + if index >= len(items): + yield cfg + return + + key, value = items[index] + if cls.is_subschema(key): + filter_key = key.split(":")[1] + wildcard_schema = value.get("*", None) + current_value = cfg["recon_req"].get(filter_key, missing) + value_matched = False + + for filter_value, sub_schema in value.items(): + if filter_value == "*": + continue + + if current_value == filter_value: + value_matched = True + elif current_value is not missing: + continue + + branch_cfg = copy.deepcopy(cfg) + if current_value is missing: + branch_cfg["recon_req"][filter_key] = copy.deepcopy( + filter_value + ) + + for resolved_cfg in _walk_schema(sub_schema, branch_cfg): + yield from _walk_items(index + 1, resolved_cfg) + + if wildcard_schema is not None and not value_matched: + wildcard_cfg = copy.deepcopy(cfg) + for resolved_cfg in _walk_schema(wildcard_schema, wildcard_cfg): + yield from _walk_items(index + 1, resolved_cfg) + else: + update = cls.custom_update.get(key, DEFAULT_UPDATE) + update(cfg, {key: copy.deepcopy(value)}) + yield from _walk_items(index + 1, cfg) + + yield from _walk_items(0, current_cfg) + + for initial_cfg in configs: + for cfg in _walk_schema(schema, copy.deepcopy(initial_cfg)): + is_match = True + for key, value, match_func in matching_funcs: + if not match_func( + cfg["recon_req"], + cfg.get(key, value), + value, + ): + is_match = False + break + if is_match: + logger.debug("Matched config: %s", cfg) + yield cfg + def reconstruct( self, output_template: Optional[dict] = None, initial_config: Optional[dict] = None, + method: Literal["dps", "bfs"] = "bfs", + enable_cache: bool = True, **matching, ) -> Iterator[tuple[dict, dict]]: output_template = output_template or {} @@ -244,15 +319,21 @@ def reconstruct( cache_key = self._matching_cache_key(output_template, matching) configs = self._get_cached_matching(cache_key) + if method not in ["dps", "bfs"]: + raise ValueError(f"Invalid method '{method}'. Must be 'dps' or 'bfs'.") + method_func = ( + self._find_matching_dps if method == "dps" else self._find_matching + ) + if configs is None: - configs = list( - self._find_matching( - self.schema, - [{"recon_req": output_template, **initial_config}], - **matching, - ) + configs = method_func( + self.schema, + [{"recon_req": output_template, **initial_config}], + **matching, ) - self._set_cached_matching(cache_key, configs) + if self.matching_cache_size > 0 and enable_cache: + self._set_cached_matching(cache_key, list(configs)) + configs = self._get_cached_matching(cache_key) for cfg in configs: yield cfg.pop("recon_req"), cfg diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index 91855bd0..c0d5dc53 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -13,6 +13,7 @@ from typing import Iterator from typing import Optional from typing import Union +from typing import Literal import numpy as np import pandas as pd @@ -395,7 +396,11 @@ def inputs(self, output_request: dict, step_schema: StepSchema) -> Iterator[dict yield validate_request(inp) def reconstruct( - self, output_template: dict[str, Any] = {}, **matching + self, + output_template: dict[str, Any] = {}, + method: Literal["dps", "bfs"] = "bfs", + enable_cache: bool = True, + **matching, ) -> Iterator[tuple[dict, InputConfig]]: inherit = ["levelist", "levtype"] base_request = { @@ -412,6 +417,8 @@ def reconstruct( ), }, **matching, + method=method, + enable_cache=enable_cache, ): input_config = InputConfig(**cfg) logger.info("Reconstructed output %s, with config %s", out, input_config) @@ -440,6 +447,8 @@ def outputs( input_requests: list[dict], step_schema: Optional[StepSchema] = None, output_template: dict[str, Any] = {}, + method: Literal["dps", "bfs"] = "bfs", + enable_cache: bool = True, ) -> Iterator[tuple[dict, list[dict]]]: """ Assumes inputs are from the same forecast for a single date and time @@ -451,6 +460,8 @@ def outputs( forecast={"inputs": input_requests}, climatology={"inputs": input_requests}, from_inputs=True, + method=method, + enable_cache=enable_cache, ): for mconfig in config.match(input_requests): logger.debug("Matched config: %s", mconfig) diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index 0be97b50..09e6f14a 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -8,7 +8,7 @@ # nor does it submit to any jurisdiction. import os -from typing import Iterator, Optional, Union +from typing import Iterator, Optional, Union, Literal import numpy as np import pandas as pd @@ -107,5 +107,13 @@ def outputs_from_inputs( self, inputs: list[dict], output_template: Optional[dict] = None, + method: Literal["dps", "bfs"] = "bfs", + enable_cache: bool = True, ) -> Iterator[tuple[dict, list[dict]]]: - yield from self.param_schema.outputs(inputs, self.step_schema, output_template) + yield from self.param_schema.outputs( + inputs, + self.step_schema, + output_template, + method=method, + enable_cache=enable_cache, + ) diff --git a/pproc-core/tests/ppcore/schema/test_config_schema.py b/pproc-core/tests/ppcore/schema/test_config_schema.py index 02b76489..e0106382 100644 --- a/pproc-core/tests/ppcore/schema/test_config_schema.py +++ b/pproc-core/tests/ppcore/schema/test_config_schema.py @@ -39,6 +39,14 @@ def test_reconstruct_cache(): assert len(config_schema._matching_cache) == 0 +def test_reconstruct_dfs(): + config_schema = ConfigSchema(schema("config")) + dps_cfgs = list(config_schema.reconstruct(entrypoint="pproc-ensms", method="dps", enable_cache=False)) + bfs_cfgs = list(config_schema.reconstruct(entrypoint="pproc-ensms", method="bfs", enable_cache=False)) + assert dps_cfgs[0] == bfs_cfgs[0] + assert len(dps_cfgs) == len(bfs_cfgs) + + @pytest.mark.parametrize( "out_request, expected_config", [ From 918ce9864e2f4353da3594311bdc23a1e460f958 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 8 Jul 2026 11:28:00 +0000 Subject: [PATCH 47/95] Fix typo --- pproc-core/src/ppcore/schema/base.py | 10 +++++----- pproc-core/src/ppcore/schema/input.py | 4 ++-- pproc-core/src/ppcore/schema/schema.py | 2 +- pproc-core/tests/ppcore/schema/test_config_schema.py | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pproc-core/src/ppcore/schema/base.py b/pproc-core/src/ppcore/schema/base.py index 9f8b3a77..483ae5c9 100644 --- a/pproc-core/src/ppcore/schema/base.py +++ b/pproc-core/src/ppcore/schema/base.py @@ -235,7 +235,7 @@ def _find_matching( yield cfg @classmethod - def _find_matching_dps( + def _find_matching_dfs( cls, schema: dict, configs: list[dict], @@ -310,7 +310,7 @@ def reconstruct( self, output_template: Optional[dict] = None, initial_config: Optional[dict] = None, - method: Literal["dps", "bfs"] = "bfs", + method: Literal["dfs", "bfs"] = "bfs", enable_cache: bool = True, **matching, ) -> Iterator[tuple[dict, dict]]: @@ -319,10 +319,10 @@ def reconstruct( cache_key = self._matching_cache_key(output_template, matching) configs = self._get_cached_matching(cache_key) - if method not in ["dps", "bfs"]: - raise ValueError(f"Invalid method '{method}'. Must be 'dps' or 'bfs'.") + if method not in ["dfs", "bfs"]: + raise ValueError(f"Invalid method '{method}'. Must be 'dfs' or 'bfs'.") method_func = ( - self._find_matching_dps if method == "dps" else self._find_matching + self._find_matching_dfs if method == "dfs" else self._find_matching ) if configs is None: diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index c0d5dc53..595a1482 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -398,7 +398,7 @@ def inputs(self, output_request: dict, step_schema: StepSchema) -> Iterator[dict def reconstruct( self, output_template: dict[str, Any] = {}, - method: Literal["dps", "bfs"] = "bfs", + method: Literal["dfs", "bfs"] = "bfs", enable_cache: bool = True, **matching, ) -> Iterator[tuple[dict, InputConfig]]: @@ -447,7 +447,7 @@ def outputs( input_requests: list[dict], step_schema: Optional[StepSchema] = None, output_template: dict[str, Any] = {}, - method: Literal["dps", "bfs"] = "bfs", + method: Literal["dfs", "bfs"] = "bfs", enable_cache: bool = True, ) -> Iterator[tuple[dict, list[dict]]]: """ diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index 09e6f14a..a1efd25c 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -107,7 +107,7 @@ def outputs_from_inputs( self, inputs: list[dict], output_template: Optional[dict] = None, - method: Literal["dps", "bfs"] = "bfs", + method: Literal["dfs", "bfs"] = "bfs", enable_cache: bool = True, ) -> Iterator[tuple[dict, list[dict]]]: yield from self.param_schema.outputs( diff --git a/pproc-core/tests/ppcore/schema/test_config_schema.py b/pproc-core/tests/ppcore/schema/test_config_schema.py index e0106382..c734e88c 100644 --- a/pproc-core/tests/ppcore/schema/test_config_schema.py +++ b/pproc-core/tests/ppcore/schema/test_config_schema.py @@ -41,10 +41,10 @@ def test_reconstruct_cache(): def test_reconstruct_dfs(): config_schema = ConfigSchema(schema("config")) - dps_cfgs = list(config_schema.reconstruct(entrypoint="pproc-ensms", method="dps", enable_cache=False)) + dfs_cfgs = list(config_schema.reconstruct(entrypoint="pproc-ensms", method="dfs", enable_cache=False)) bfs_cfgs = list(config_schema.reconstruct(entrypoint="pproc-ensms", method="bfs", enable_cache=False)) - assert dps_cfgs[0] == bfs_cfgs[0] - assert len(dps_cfgs) == len(bfs_cfgs) + assert dfs_cfgs[0] == bfs_cfgs[0] + assert len(dfs_cfgs) == len(bfs_cfgs) @pytest.mark.parametrize( From df3102720a7a08e322d1d60214c6bd4fdcc51bcb Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 21 Jul 2026 13:26:19 +0100 Subject: [PATCH 48/95] Modify forecast definition --- .github/workflows/ci.yml | 7 - pproc-core/pyproject.toml | 1 + .../workflows/plugins/pproc/fluent.py | 99 +- .../plugins/pproc/metadata/accumulation.py | 7 +- .../workflows/plugins/pproc/utils/request.py | 9 +- pproc-core/src/ppcore/config.py | 105 +- pproc-core/src/ppcore/configs/__init__.py | 62 +- .../src/ppcore/configs/common/accumulation.py | 6 +- pproc-core/src/ppcore/configs/common/input.py | 6 +- .../src/ppcore/configs/common/output.py | 6 +- .../src/ppcore/configs/common/target.py | 4 +- .../src/ppcore/configs/product/__init__.py | 4 +- .../src/ppcore/configs/product/ensemble.py | 8 +- pproc-core/src/ppcore/product.py | 6 +- pproc-core/src/ppcore/products/__init__.py | 48 +- pproc-core/src/ppcore/products/ensemble.py | 4 +- pproc-core/src/ppcore/schema/base.py | 31 +- pproc-core/src/ppcore/schema/deriver.py | 156 +- pproc-core/src/ppcore/schema/forecast.py | 277 ++ pproc-core/src/ppcore/schema/input.py | 682 ++- pproc-core/src/ppcore/schema/schema.py | 77 +- pproc-core/src/ppcore/schema/step.py | 15 +- pproc-core/src/ppcore/utils/io.py | 2 +- pproc-core/src/ppcore/utils/qube.py | 23 + pproc-core/src/ppcore/utils/requests.py | 23 +- .../ppcore/configs/entrypoint/test_log.py | 6 +- .../ppcore/products/templates/quantiles.yaml | 1 - .../tests/ppcore/products/test_products.py | 12 +- .../tests/ppcore/schema/test_config_schema.py | 13 +- .../tests/ppcore/schema/test_deriver.py | 109 +- .../tests/ppcore/schema/test_input_schema.py | 795 ++-- pproc-core/tests/ppcore/schema/test_schema.py | 61 +- .../tests/ppcore/schema/test_step_schema.py | 25 +- pproc-core/tests/schema.yaml | 3875 ++++++----------- pproc-core/uv.lock | 2333 +++++----- 35 files changed, 3978 insertions(+), 4920 deletions(-) create mode 100644 pproc-core/src/ppcore/schema/forecast.py create mode 100644 pproc-core/src/ppcore/utils/qube.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 675d846c..8f3d8b39 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,12 +12,6 @@ on: pull_request: ~ jobs: - quality_assurance: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - run: pip install ruff - - run: ruff check ppruntime_test: runs-on: ubuntu-latest strategy: @@ -31,7 +25,6 @@ jobs: run: | cd pproc-runtime export UV_FROZEN=1 - export SETUPTOOLS_SCM_PRETEND_VERSION=0.0.0 uv sync --prerelease allow --python "${{ matrix.python_version }}" --all-packages uv run --prerelease allow prek --directory . --config ../.pre-commit-config.yaml uv run --prerelease allow ty check diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 85e64332..d6280ac1 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -37,6 +37,7 @@ dependencies = [ "numpy", "pandas", "pydantic", + "qubed<=0.3.1", ] scripts.ppcore-config = "ppcore.config:main" diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 56b843a8..ba8b9724 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -6,9 +6,10 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. +from __future__ import annotations import inspect -from typing import Optional, Union +from typing import Optional, Union, Any import numpy as np from earthkit.workflows.backends.earthkit import FieldListBackend @@ -39,7 +40,7 @@ class Action(fluent.Action): # TODO: migrate to schema - _THERMAL_CONFIG = { + _THERMAL_CONFIG: dict[str, dict[str, Any]] = { "utci": { "operation": "ppruntime.thermal_indices.calc_utci", "params": ["2t", "2d", "10si", "mrt"], @@ -102,7 +103,7 @@ def _reduction_with_metadata( batch_size: int = 0, keep_dim: bool = False, metadata: dict | None = None, - ) -> "Action": + ) -> Action: batched = batch_size > 1 and self.nodes.sizes[dim] > batch_size if not batched or metadata is None: @@ -157,7 +158,7 @@ def sum( batch_size: int = 0, keep_dim: bool = False, metadata: dict | None = None, - ) -> "Action": + ) -> Action: return self._reduction_with_metadata( "sum", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata ) @@ -168,7 +169,7 @@ def mean( batch_size: int = 0, keep_dim: bool = False, metadata: dict | None = None, - ) -> "Action": + ) -> Action: return self._reduction_with_metadata( "mean", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata ) @@ -179,7 +180,7 @@ def std( batch_size: int = 0, keep_dim: bool = False, metadata: dict | None = None, - ) -> "Action": + ) -> Action: return self._reduction_with_metadata( "std", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata ) @@ -190,7 +191,7 @@ def max( batch_size: int = 0, keep_dim: bool = False, metadata: dict | None = None, - ) -> "Action": + ) -> Action: return self._reduction_with_metadata( "max", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata ) @@ -203,7 +204,7 @@ def min( batch_size: int = 0, keep_dim: bool = False, metadata: dict | None = None, - ) -> "Action": + ) -> Action: return self._reduction_with_metadata( "min", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata ) @@ -216,7 +217,7 @@ def prod( batch_size: int = 0, keep_dim: bool = False, metadata: dict | None = None, - ) -> "Action": + ) -> Action: return self._reduction_with_metadata( "prod", dim=dim, batch_size=batch_size, keep_dim=keep_dim, metadata=metadata ) @@ -227,7 +228,7 @@ def norm( batch_size: int = 0, keep_dim: bool = False, metadata: dict | None = None, - ) -> "Action": + ) -> Action: return self._reduction_with_metadata( fluent.Payload(FieldListBackend.norm), dim=dim, @@ -237,24 +238,28 @@ def norm( ) def subtract( - self, other: "Action | float", metadata: dict | None = None - ) -> "Action": + self, other: Union[Action, float], metadata: dict | None = None + ) -> Action: return super().subtract(other, backend_kwargs={"metadata": metadata}) - def divide(self, other: "Action | float", metadata: dict | None = None) -> "Action": + def divide( + self, other: Union[Action, float], metadata: dict | None = None + ) -> Action: return super().divide(other, backend_kwargs={"metadata": metadata}) - def add(self, other: "Action | float", metadata: dict | None = None) -> "Action": + def add(self, other: Union[Action, float], metadata: dict | None = None) -> Action: return super().add(other, backend_kwargs={"metadata": metadata}) def multiply( - self, other: "Action | float", metadata: dict | None = None - ) -> "Action": + self, other: Union[Action, float], metadata: dict | None = None + ) -> Action: return super().multiply(other, backend_kwargs={"metadata": metadata}) scale = multiply - def power(self, other: "Action | float", metadata: dict | None = None) -> "Action": + def power( + self, other: Union[Action, float], metadata: dict | None = None + ) -> Action: return super().power(other, backend_kwargs={"metadata": metadata}) def extreme( @@ -265,7 +270,7 @@ def extreme( ensemble_dim: str = "number", step_dim: str = "step", **kwargs, - ) -> "Action": + ) -> Action: return self.concatenate(ensemble_dim).__getattribute__(operation)( climatology, step_ranges, dim=step_dim, **kwargs ) @@ -277,7 +282,7 @@ def efi( eps: float, dim: str = "step", metadata: dict | None = None, - ) -> "Action": + ) -> Action: """ Create nodes computing the EFI for each window. Expects ensemble member dimension to already be concatenated into a single array. @@ -303,14 +308,14 @@ def efi( kwargs={"metadata": metadata}, metadata={"environment": ENVIRONMENT["ppruntime"]}, ) - return self.join(climatology, "**datatype**").reduce(payload) + return self.join(climatology, "**datatype**").reduce(payload) # type: ignore join = self.join(climatology, "**datatype**", match_coord_values=True) return join.transform( _efi_window_transform, [({dim: srange}, eps, metadata) for srange in step_ranges], dim, - ) + ) # type: ignore def sot( self, @@ -321,7 +326,7 @@ def sot( dim: str = "step", new_dim: str = "sot", metadata: dict | None = None, - ) -> "Action": + ) -> Action: """ Create nodes computing the SOT for each window. Expects ensemble member dimension to already be concatenated into a single array. @@ -360,7 +365,7 @@ def sot( ret = self.join( climatology, "**datatype**", match_coord_values=True ).transform(_sot_window_transform, params, dim) - return ret + return ret # type: ignore def threshold_probability( self, @@ -369,8 +374,8 @@ def threshold_probability( batch_size: int = 0, metadata: Optional[dict] = None, clim_metadata: Optional[dict] = None, - ) -> "Action": - combined = None + ) -> Action: + combined: Action = None for threshold in thresholds: if isinstance(threshold, dict): threshold = Threshold(**threshold) @@ -380,7 +385,7 @@ def threshold_probability( "ppruntime.stats.mask", (fluent.Node.input_name(0),), threshold.model_dump( - exclude=("select", "lower_scale_factor", "upper_scale_factor") + exclude={"select", "lower_scale_factor", "upper_scale_factor"} ), metadata={"environment": ENVIRONMENT["ppruntime"]}, ) @@ -388,7 +393,7 @@ def threshold_probability( if combined is None: combined = selected else: - combined = combined.join(dim="param").reduce( + combined = combined.join(selected, dim="param").reduce( # type: ignore fluent.Payload( "ppruntime.stats.logical_and", metadata={"environment": ENVIRONMENT["ppruntime"]}, @@ -414,11 +419,11 @@ def anomaly( clim_std: fluent.Action, std_anomaly: bool = False, metadata: dict | None = None, - ) -> "Action": - anom = self.subtract(clim_mean, metadata=metadata) + ) -> Action: + anom = self.subtract(clim_mean, metadata=metadata) # type: ignore if not std_anomaly: return anom - return anom.divide(clim_std) + return anom.divide(clim_std) # type: ignore def quantiles( self, @@ -426,7 +431,7 @@ def quantiles( dim: str = "number", new_dim: str = "quantile", metadata: dict | None = None, - ) -> "Action": + ) -> Action: """ Compute quantiles over the specified dimension. If quantiles is an integer, it will compute that many evenly spaced quantiles. If quantiles is a string, it should be in the format "q_number:total_number". @@ -454,14 +459,14 @@ def quantiles( params = [(x, total_number, new_dim, metadata) for x in q_numbers] ret = self.concatenate(dim).transform(_quantiles_transform, params, new_dim) - return ret + return ret # type: ignore def _wrapped_reduction( self, operation: str | fluent.Payload | None, dim: str, **kwargs, - ) -> "Action": + ) -> Action: if operation is None: return self @@ -484,14 +489,14 @@ def _wrapped_reduction( op_function, ) # Fallback on applying reduction operation during payload - return self.reduce(operation, dim=dim, **kwargs) + return self.reduce(operation, dim=dim, **kwargs) # type: ignore def preprocessing( self, operation: str | fluent.Payload | None, dim: str = "param", **kwargs, - ) -> "Action": + ) -> Action: """ Pre-processing operation across different parameters @@ -512,8 +517,8 @@ def preprocessing( # intermediate parameters def thermal_index( self, param: str, dim: str = "param", metadata: dict | None = None - ) -> "Action": - config = self._THERMAL_CONFIG[param] + ) -> Action: + config: dict[str, Any] = self._THERMAL_CONFIG[param] new_action = self for inp in config["params"]: if ( @@ -527,12 +532,14 @@ def thermal_index( selection = new_action.sel(param=(config["params"])) except IndexError: selection = new_action - config_metadata = config.get("metadata", {}) + config_metadata: dict[str, str] = config.get("metadata", {}) new_metadata = ( config_metadata if not metadata else {**metadata, **config_metadata} ) ret = selection._wrapped_reduction( - fluent.Payload(config["operation"], kwargs={"metadata": new_metadata}), + fluent.Payload( + func=str(config["operation"]), kwargs={"metadata": new_metadata} + ), dim=dim, ) return ret @@ -544,7 +551,7 @@ def mask( replacement: float = 0.0, dim: str = "param", metadata: dict | None = None, - ) -> "Action": + ) -> Action: if isinstance(mask, dict): mask = MaskExpression(**mask) mask_action = self.sel(mask.select, drop=True) if select else self @@ -574,7 +581,7 @@ def ensemble_statistics( dim: str = "number", metadata: dict | None = None, **kwargs, - ) -> "Action": + ) -> Action: """ Reduction operation across ensemble members. If batch_size > 1 and less than the size of the named dimension, the reduction will be computed first in @@ -618,7 +625,7 @@ def accumulation( deaccumulate: bool = False, name: Union[Default, Monthly, dict] = Default(), **kwargs, - ) -> "Action": + ) -> Action: """ Reduction operation across a dimension. If batch_size > 1 and less than the size of the named dimension, the reduction will be computed first in @@ -652,16 +659,16 @@ def accumulation( ) for coord in coords ] - return self.transform(_accum_transform, params, dim) + return self.transform(_accum_transform, params, dim) # type: ignore - def write(self, targets: list[dict], metadata: Optional[dict] = None) -> "Action": + def write(self, targets: list[dict], metadata: Optional[dict] = None) -> Action: if len(targets) == 0: raise ValueError("No targets provided for write") return self.transform( _write_transform, [(target, metadata) for target in targets], dim="target", - ) + ) # type: ignore def _write_transform( @@ -784,7 +791,7 @@ def _accum_transform( def from_source( sources: list[Union[str, dict]], - requests: list[dict | Request | MultiSourceRequest], + requests: Union[list[dict[str, Any]], list[Request], list[MultiSourceRequest]], dtype: Optional[str] = None, join_key: str = "", ): diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py index 1f35ea4b..2676c954 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py @@ -16,7 +16,9 @@ def accumulation_metadata( start = coords[0] end = start - if end > start: + if end != start: + assert isinstance(start, int) and isinstance(end, int) + assert end > start, "Start step can not be greater than end step" steprange = f"{start}-{end}" if end >= 256 and metadata.get("edition", 1) == 1: # The range is encoded as two 8-bit integers @@ -27,8 +29,9 @@ def accumulation_metadata( ) # Don't override if set in config metadata["stepRange"] = steprange else: - assert end == start, "Start step can not be greater than end step" + assert end == start if "timeRangeIndicator" not in metadata: + assert isinstance(end, int) if end >= 256: metadata["timeRangeIndicator"] = 10 elif end == 0: diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py index a5013c17..0a2421ca 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py @@ -9,16 +9,17 @@ import copy import itertools +from typing import Optional from collections import OrderedDict import numpy as np class Request: - def __init__(self, request: dict, no_expand: tuple[str] = ()): + def __init__(self, request: dict, no_expand: Optional[tuple[str]] = None): self.request = request.copy() self.fake_dims = [] - self.no_expand = no_expand + self.no_expand = no_expand or tuple() self.ignore = ["interpolate"] @property @@ -50,7 +51,7 @@ def pop(self, key, default=None): def make_dim(self, key, value=None): if key in self: - assert type(self[key], (str, int, float)) + assert isinstance(self[key], (str, int, float)) self[key] = [self[key]] else: self[key] = [value] @@ -72,7 +73,7 @@ def expand(self): class MultiSourceRequest(Request): - def __init__(self, requests: list[dict], no_expand: tuple[str] = ()): + def __init__(self, requests: list[dict], no_expand: Optional[tuple[str]] = None): super().__init__(requests[0], no_expand) self.requests = requests diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py index ca6a07b8..f3f83e9b 100644 --- a/pproc-core/src/ppcore/config.py +++ b/pproc-core/src/ppcore/config.py @@ -15,6 +15,7 @@ import yaml import json +from pydantic import TypeAdapter from earthkit.workflows.visualise import visualise @@ -24,6 +25,7 @@ from ppcore.products import product_from_config, graph_from_configs from ppcore.utils import mars from ppcore.utils.requests import datacubes, expand +from ppcore.schema.forecast import DatasetDefinition logging.basicConfig( format="%(asctime)s; %(name)s; %(levelname)s - %(message)s", @@ -40,8 +42,27 @@ def from_outputs(args): with open(args.outputs, "r") as f: output_requests = yaml.safe_load(f) + forecast = args.forecast + if os.path.exists(forecast): + with open(forecast, "r") as f: + forecast = TypeAdapter(DatasetDefinition).validate_python( + **yaml.safe_load(f) + ) + + climatology = args.climatology + if climatology and os.path.exists(climatology): + with open(climatology, "r") as f: + climatology = TypeAdapter(DatasetDefinition).validate_python( + **yaml.safe_load(f) + ) + entrypoint_config = EntrypointConfig( - products=list(config_from_outputs(output_requests, args.schema)), **overrides + products=list( + config_from_outputs( + output_requests, args.schem, forecast=forecast, climatology=climatology + ) + ), + **overrides, ) with open(args.config, "w") as f: yaml.dump( @@ -57,15 +78,38 @@ def from_inputs(args): with open(args.overrides, "r") as f: overrides = yaml.safe_load(f) - with open(args.inputs, "r") as f: - input_requests = yaml.safe_load(f) + forecast = args.forecast + if os.path.exists(forecast): + with open(forecast, "r") as f: + forecast = TypeAdapter(DatasetDefinition).validate_python( + **yaml.safe_load(f) + ) + + climatology = args.climatology + if climatology and os.path.exists(climatology): + with open(climatology, "r") as f: + climatology = TypeAdapter(DatasetDefinition).validate_python( + **yaml.safe_load(f) + ) - configs = config_from_inputs( - input_requests, args.schema, args.restriction, **overrides + entrypoint_config = EntrypointConfig( + products=list( + config_from_inputs( + args.restriction, + args.schem, + forecast, + climatology=climatology, + **overrides, + ) + ), + **overrides, ) - config_dict = configs.model_dump(exclude_none=True, by_alias=True) with open(args.config, "w") as f: - yaml.dump(config_dict, f, sort_keys=False) + yaml.dump( + entrypoint_config.model_dump(exclude_none=True, by_alias=True), + f, + sort_keys=False, + ) def _to_mars(requests: list[dict]) -> str: @@ -152,13 +196,26 @@ def main(args: List[str] = sys.argv[1:]): "--outputs", type=str, required=True, help="Path to output request file" ) output_parser.add_argument( - "--overrides", + "--schema", type=str, required=True, help="Path to products schema" + ) + output_parser.add_argument( + "--forecast", + type=str, + required=True, + help="Path to forecast definition, or name of preset definition in schema", + ) + output_parser.add_argument( + "--climatology", type=str, required=False, - help="Path to configuration template for overriding default configuration", + default=None, + help="Path to climatology definition, or name of preset definition in schema", ) output_parser.add_argument( - "--schema", type=str, required=True, help="Path to products schema" + "--overrides", + type=str, + required=False, + help="Path to configuration template for overriding default configuration", ) output_parser.set_defaults(func=from_outputs) @@ -166,19 +223,29 @@ def main(args: List[str] = sys.argv[1:]): "from_inputs", help="Generate configuration from input requests" ) input_parser.add_argument( - "--restriction", - type=str, - required=False, - help="Restriction to place on output requests e.g. type=em", + "--inputs", type=str, required=True, help="Path to input request file" ) input_parser.add_argument( - "--inputs", type=str, required=True, help="Path to input request file" + "--schema", type=str, required=True, help="Path to products schema" ) input_parser.add_argument( - "--schema", + "--forecast", type=str, required=True, - help="Path to products schema", + help="Path to forecast definition, or name of preset definition in schema", + ) + input_parser.add_argument( + "--climatology", + type=str, + required=False, + default=None, + help="Path to climatology definition, or name of preset definition in schema", + ) + input_parser.add_argument( + "--restriction", + type=str, + required=False, + help="Restriction to place on output requests e.g. type=em", ) input_parser.add_argument( "--overrides", @@ -225,8 +292,8 @@ def main(args: List[str] = sys.argv[1:]): ) plot_parser.set_defaults(func=plot) - args = parser.parse_args(args) - args.func(args) + parsed = parser.parse_args(args) + parsed.func(parsed) if __name__ == "__main__": diff --git a/pproc-core/src/ppcore/configs/__init__.py b/pproc-core/src/ppcore/configs/__init__.py index 62b6dab7..551f0ba1 100644 --- a/pproc-core/src/ppcore/configs/__init__.py +++ b/pproc-core/src/ppcore/configs/__init__.py @@ -2,6 +2,11 @@ from typing import Iterator, Optional, Union from ppcore.schema.schema import Schema +from ppcore.schema.forecast import ( + ForecastDefinition, + ReforecastDefinition, + ClimatologyDefinition, +) from ppcore.configs.product import from_schema, ProductConfig from ppcore.utils.requests import expand @@ -9,7 +14,8 @@ def config_from_output( request: dict, pproc_schema: Union[str, os.PathLike, Schema], - inputs: Optional[list[dict]] = None, + forecast: Union[ForecastDefinition, ReforecastDefinition], + climatology: Optional[ClimatologyDefinition] = None, metadata: Optional[dict] = None, **overrides, ) -> ProductConfig: @@ -17,24 +23,15 @@ def config_from_output( schema = pproc_schema else: schema = Schema.from_file(pproc_schema) - if inputs is None: - schema_config = schema.config_from_output(request) - else: - schema_configs = list( - schema.config_from_input(input_requests=inputs, output_template=request) - ) - if len(schema_configs) != 1: - raise ValueError( - f"Expected a single schema configuration from input requests, got {len(schema_configs)} for output request {request}" - ) - schema_config = schema_configs[0] + schema_config = schema.config_from_output(request, forecast, climatology) return from_schema(schema_config, request, metadata, **overrides) def from_outputs( requests: list[dict], pproc_schema: Union[str, os.PathLike, Schema], - inputs: Optional[list[dict]] = None, + forecast: Union[str, ForecastDefinition, ReforecastDefinition], + climatology: Optional[Union[str, ClimatologyDefinition]] = None, metadata: Optional[dict] = None, **overrides, ) -> Iterator[ProductConfig]: @@ -45,28 +42,35 @@ def from_outputs( schema = pproc_schema else: schema = Schema.from_file(pproc_schema) + if isinstance(forecast, str): + forecast = schema.datasets.definition(forecast) + if isinstance(climatology, str): + climatology = schema.datasets.definition(climatology) for request in expand(requests): - if inputs is None: - schema_config = schema.config_from_output(request) - else: - schema_configs = list( - schema.config_from_input(input_requests=inputs, output_template=request) - ) - if len(schema_configs) != 1: - raise ValueError( - f"Expected a single schema configuration from input requests, got {len(schema_configs)} for output request {request}" - ) - schema_config = schema_configs[0] + schema_config = schema.config_from_output(request, forecast, climatology) yield from_schema(schema_config, request, metadata, **overrides) def from_inputs( - requests: list[dict], + template: dict, pproc_schema: Union[str, os.PathLike, Schema], - inputs: Optional[list[dict]] = None, + forecast: Union[str, ForecastDefinition, ReforecastDefinition], + climatology: Optional[Union[str, ClimatologyDefinition]] = None, metadata: Optional[dict] = None, **overrides, ) -> Iterator[ProductConfig]: - raise NotImplementedError( - "Generation of configuration from input requests not yet implemented" - ) + """ + Returns product configuration from input forecast, template for the output request and PProc schema + """ + if isinstance(pproc_schema, Schema): + schema = pproc_schema + else: + schema = Schema.from_file(pproc_schema) + if isinstance(forecast, str): + forecast = schema.datasets.definition(forecast) + if isinstance(climatology, str): + climatology = schema.datasets.definition(climatology) + for schema_config in schema.config_from_input( + forecast, climatology, output_template=template + ): + yield from_schema(schema_config, template, metadata, **overrides) diff --git a/pproc-core/src/ppcore/configs/common/accumulation.py b/pproc-core/src/ppcore/configs/common/accumulation.py index 8cf8a687..02e08f75 100644 --- a/pproc-core/src/ppcore/configs/common/accumulation.py +++ b/pproc-core/src/ppcore/configs/common/accumulation.py @@ -59,7 +59,7 @@ class MinAccumulation(BaseAccumulation): class MaxAccumulation(BaseAccumulation): - operation: Literal["maximum"] = "minimum" + operation: Literal["maximum"] = "maximum" payload: Literal["max"] = "max" @@ -85,7 +85,7 @@ class DifferenceAccumulation(BaseAccumulation): @field_validator("coords", mode="after") @classmethod - def validate_num_coords(cls, coords: Coords) -> Coords: + def validate_num_coords(cls, coords: list[Coords]) -> list[Coords]: if any([len(coord) > 2 for coord in coords]): raise ValueError("difference accumulation accepts only 1 or 2 coordinates") return coords @@ -100,7 +100,7 @@ class DifferenceRateAccumulation(BaseAccumulation): @field_validator("coords", mode="after") @classmethod - def validate_num_coords(cls, coords: Coords) -> Coords: + def validate_num_coords(cls, coords: list[Coords]) -> list[Coords]: if any([len(coord) > 2 for coord in coords]): raise ValueError( "difference_rate accumulation accepts only 1 or 2 coordinates" diff --git a/pproc-core/src/ppcore/configs/common/input.py b/pproc-core/src/ppcore/configs/common/input.py index 38e69a63..17cc631c 100644 --- a/pproc-core/src/ppcore/configs/common/input.py +++ b/pproc-core/src/ppcore/configs/common/input.py @@ -63,14 +63,14 @@ class InputsCollection(PProcBaseModel): def create_input_model( name: str, inputs: list[str], optional: list[str] = [], **kwargs -) -> InputsCollection: +) -> type[InputsCollection]: field_definitions = {input: (Input, ...) for input in inputs} for input in optional: - field_definitions[input] = (Input, Input(source={"type": "null"})) + field_definitions[input] = (Input, Input(requests=[])) return create_model( f"{name}InputModel", names=(ClassVar[list[str]], inputs + optional), **field_definitions, __base__=InputsCollection, **kwargs, - ) + ) # type: ignore diff --git a/pproc-core/src/ppcore/configs/common/output.py b/pproc-core/src/ppcore/configs/common/output.py index 8a614b06..c9d250d7 100644 --- a/pproc-core/src/ppcore/configs/common/output.py +++ b/pproc-core/src/ppcore/configs/common/output.py @@ -29,7 +29,7 @@ def validate_targets(cls, data: Any) -> Any: for index, target in enumerate(data): if isinstance(target, str): name, loc = split_location(target, default="file") - config = {"name": name} + config: dict[str, Any] = {"name": name} if loc: if name == "fdb": config["config"] = loc @@ -51,7 +51,7 @@ class OutputsCollection(PProcBaseModel): def create_output_model( name: str, outputs: Union[list[str], dict[str, dict]], **kwargs -): +) -> type[OutputsCollection]: field_definitions = {output: (Output, ...) for output in outputs} names = outputs if isinstance(outputs, list) else list(outputs.keys()) return create_model( @@ -60,4 +60,4 @@ def create_output_model( **field_definitions, __base__=OutputsCollection, **kwargs, - ) + ) # type: ignore diff --git a/pproc-core/src/ppcore/configs/common/target.py b/pproc-core/src/ppcore/configs/common/target.py index ac1bda54..37e98771 100644 --- a/pproc-core/src/ppcore/configs/common/target.py +++ b/pproc-core/src/ppcore/configs/common/target.py @@ -37,8 +37,8 @@ class FDBTarget(PProcBaseModel): class ZarrTarget(PProcBaseModel): name: Literal["zarr"] = "zarr" - earthkit_to_xarray_kwargs: Optional[dict] = None - xarray_to_zarr_kwargs: Optional[dict] = None + earthkit_to_xarray_kwargs: Optional[dict[str, str]] = None + xarray_to_zarr_kwargs: Optional[dict[str, str]] = None Target = Annotated[ diff --git a/pproc-core/src/ppcore/configs/product/__init__.py b/pproc-core/src/ppcore/configs/product/__init__.py index 5d546871..bb93242d 100644 --- a/pproc-core/src/ppcore/configs/product/__init__.py +++ b/pproc-core/src/ppcore/configs/product/__init__.py @@ -51,5 +51,5 @@ def from_schema( config["accumulations"] = accums logger.info(f"Schema config: {config}") - base = ProductConfig(**config) - return ProductConfig(**{**base.model_dump(), **overrides}) + base = ProductConfig(**config) # type: ignore + return ProductConfig(**{**base.model_dump(), **overrides}) # type: ignore diff --git a/pproc-core/src/ppcore/configs/product/ensemble.py b/pproc-core/src/ppcore/configs/product/ensemble.py index 33f8173f..3942322f 100644 --- a/pproc-core/src/ppcore/configs/product/ensemble.py +++ b/pproc-core/src/ppcore/configs/product/ensemble.py @@ -12,7 +12,7 @@ from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.configs.common.preprocessing import PreprocessingConfig -from ppcore.configs.common.input import create_input_model +from ppcore.configs.common.input import create_input_model, InputsCollection from ppcore.configs.common.output import Output from ppcore.configs.common.accumulation import Accumulation from ppcore.configs.common.stats import ( @@ -24,7 +24,9 @@ from ppcore.utils.mars import extract_mars -EnsembleInputModel = create_input_model("EnsembleInputsModel", inputs=["fc"]) +EnsembleInputModel: type[InputsCollection] = create_input_model( + "EnsembleInputsModel", inputs=["fc"] +) class Ensemble(PProcBaseModel): @@ -35,7 +37,7 @@ class Ensemble(PProcBaseModel): Union[Mean, StandardDeviation, Quantiles, ThresholdProbability], Field(discriminator="operation"), ] - inputs: EnsembleInputModel + inputs: EnsembleInputModel # type: ignore output: Output @model_validator(mode="before") diff --git a/pproc-core/src/ppcore/product.py b/pproc-core/src/ppcore/product.py index c9aea713..f29f58d6 100644 --- a/pproc-core/src/ppcore/product.py +++ b/pproc-core/src/ppcore/product.py @@ -32,8 +32,10 @@ def main(): - sys.stdout.reconfigure(line_buffering=True) - cfg = Conflator(app_name="pproc-product", model=EntrypointConfig).load() + sys.stdout.reconfigure(line_buffering=True) # type: ignore + cfg: EntrypointConfig = Conflator( + app_name="pproc-product", model=EntrypointConfig + ).load() # type: ignore logger.info(cfg.dump()) graph = graph_from_configs(cfg.products, cfg.input_overrides, cfg.output_overrides) run_locally( diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index 22849a6c..5b449631 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -9,6 +9,11 @@ from ppcore.configs import from_outputs as config_from_outputs from ppcore.configs.product import ProductConfig from ppcore.schema.schema import Schema +from ppcore.schema.forecast import ( + ForecastDefinition, + ReforecastDefinition, + ClimatologyDefinition, +) from ppcore.products.base import Product from ppcore.products.ensemble import Ensemble @@ -31,7 +36,8 @@ def product_from_config( def product_from_output( request: dict, pproc_schema: Union[str, os.PathLike, Schema], - inputs: Optional[list[dict]] = None, + forecast: Union[str, ForecastDefinition, ReforecastDefinition], + climatology: Optional[Union[str, ClimatologyDefinition]] = None, metadata: Optional[dict] = None, ) -> Product: """ @@ -44,7 +50,9 @@ def product_from_output( f"Expected a single request after expansion, got {len(requests)}" ) config = list( - config_from_outputs(requests, pproc_schema, inputs, metadata=metadata) + config_from_outputs( + requests, pproc_schema, forecast, climatology, metadata=metadata + ) )[0] return product_from_config(config) @@ -52,17 +60,33 @@ def product_from_output( def action_from_outputs( requests: list[dict], pproc_schema: Union[str, os.PathLike, Schema], - sources: Optional[Action] = None, + forecast: Union[str, Action, ForecastDefinition, ReforecastDefinition], + climatology: Optional[Union[str, Action, ClimatologyDefinition]] = None, metadata: Optional[dict] = None, ) -> Action: - inputs = None if sources is None else datacubes(sources.nodes) + action_kwargs = {} + if isinstance(forecast, Action): + action_kwargs["forecast"] = forecast + dataset = ForecastDefinition(datacubes=datacubes(forecast.nodes)) + else: + action_kwargs["forecast"] = None + dataset = forecast + if isinstance(climatology, Action): + action_kwargs["climatology"] = climatology + clim_dataset = ClimatologyDefinition(datacubes=datacubes(climatology.nodes)) + else: + clim_dataset = climatology nodes = [] for request in expand(requests): nodes.append( product_from_output( - request, pproc_schema=pproc_schema, inputs=inputs, metadata=metadata + request, + pproc_schema=pproc_schema, + forecast=dataset, + climatology=clim_dataset, + metadata=metadata, ) - .action(forecast=sources) + .action(**action_kwargs) .nodes ) return Action(combine_by_coords(nodes)) @@ -71,8 +95,10 @@ def action_from_outputs( def graph_from_outputs( requests: list[dict], pproc_schema: Union[str, os.PathLike, Schema], + forecast: Union[str, ForecastDefinition, ReforecastDefinition], + climatology: Optional[Union[str, ClimatologyDefinition]] = None, metadata: Optional[dict] = None, -) -> Product: +) -> Graph: """ Returns fluent.Action for computing the product specified by the output request and PProc schema @@ -80,7 +106,13 @@ def graph_from_outputs( graph = Graph([]) for request in expand(requests): graph += ( - product_from_output(request, pproc_schema=pproc_schema, metadata=metadata) + product_from_output( + request, + pproc_schema=pproc_schema, + forecast=forecast, + climatology=climatology, + metadata=metadata, + ) .action() .graph() ) diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index d09e4fae..eb52d0a4 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -35,7 +35,7 @@ def source(self, ensemble_dim: Optional[str] = None) -> Action: if len(input_config.sources) == 0: raise ValueError("No sources provided for ensemble config") - action = None + action: Action = None # type: ignore for x in [dict(x, **self.input_overrides) for x in input_config.requests]: req = Request( validate_request(x), no_expand=("number", *input_config.expand_exclude) @@ -57,7 +57,7 @@ def source(self, ensemble_dim: Optional[str] = None) -> Action: if action is None: action = new_action else: - action = action.join(new_action, dim=ensemble_dim) + action = action.join(new_action, dim=ensemble_dim) # type: ignore return action def action( diff --git a/pproc-core/src/ppcore/schema/base.py b/pproc-core/src/ppcore/schema/base.py index 483ae5c9..15601d86 100644 --- a/pproc-core/src/ppcore/schema/base.py +++ b/pproc-core/src/ppcore/schema/base.py @@ -17,6 +17,7 @@ from typing import Literal import yaml +import json from typing_extensions import Self from ppcore.utils.dicts import deep_update @@ -54,36 +55,11 @@ def __init__( self.matching_cache_size = max(0, matching_cache_size) self._matching_cache: OrderedDict[tuple, tuple[dict, ...]] = OrderedDict() - @classmethod - def _freeze_cache_value(cls, value: Any) -> Any: - if isinstance(value, (str, int, float, bool, type(None))): - return value - if isinstance(value, dict): - return tuple( - sorted( - (key, cls._freeze_cache_value(item)) for key, item in value.items() - ) - ) - if isinstance(value, (list, tuple)): - return tuple(cls._freeze_cache_value(item) for item in value) - if isinstance(value, set): - frozen = [cls._freeze_cache_value(item) for item in value] - return ("__set__", tuple(sorted(frozen, key=repr))) - - model_dump = getattr(value, "model_dump", None) - if callable(model_dump): - return ( - "__model__", - cls._freeze_cache_value(model_dump(exclude_none=False, by_alias=True)), - ) - - return ("__repr__", repr(value)) - def _matching_cache_key(self, output_template: dict, matching: dict) -> tuple: return ( id(self.schema), - self._freeze_cache_value(output_template), - self._freeze_cache_value(matching), + json.dumps(output_template, sort_keys=True), + json.dumps(matching, sort_keys=True), ) def clear_matching_cache(self) -> None: @@ -335,5 +311,6 @@ def reconstruct( self._set_cached_matching(cache_key, list(configs)) configs = self._get_cached_matching(cache_key) + assert configs is not None, "Configs should not be None after reconstruction" for cfg in configs: yield cfg.pop("recon_req"), cfg diff --git a/pproc-core/src/ppcore/schema/deriver.py b/pproc-core/src/ppcore/schema/deriver.py index 448978d0..537a37cb 100644 --- a/pproc-core/src/ppcore/schema/deriver.py +++ b/pproc-core/src/ppcore/schema/deriver.py @@ -22,10 +22,10 @@ from pydantic import BaseModel from pydantic import ConfigDict from pydantic import Field -from pydantic import model_validator from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.utils.stepseq import fcmonth_to_steprange +from ppcore.schema.forecast import Dataset, Climatology class BaseDeriver(BaseModel): @@ -33,7 +33,7 @@ class BaseDeriver(BaseModel): class DefaultStepDeriver(BaseDeriver): - type_: Literal["default"] = Field("default", alias="type") + name: Literal["step_default"] = Field("step_default") by: Optional[int] = None include_start: bool = False allow_missing_zero: bool = False @@ -43,7 +43,7 @@ def _inst_step(self, step: int, fc_steps: list[int]) -> list[int]: raise ValueError(f"Required step {step} not in forecast steps") return [step] - def _range(self, start: int, end: int, fc_steps: list[int]) -> tuple[int]: + def _range(self, start: int, end: int, fc_steps: list[int]) -> list[int]: if self.by: fc_steps = [ x @@ -65,15 +65,16 @@ def _range(self, start: int, end: int, fc_steps: list[int]) -> tuple[int]: raise ValueError(f"Required step {end} not in forecast steps") return fc_steps[start_index : fc_steps.index(end) + 1] - def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: - steps = list(map(int, str(output_request["step"]).split("-"))) + def derive(self, request: dict, forecast: Dataset) -> list[int]: + steps = list(map(int, str(request["step"]).split("-"))) + fc_steps = list(map(int, forecast.steps(request))) if len(steps) == 1: return self._inst_step(int(steps[0]), fc_steps) - return self._range(*steps, fc_steps) + return self._range(*steps, fc_steps=fc_steps) class DeaccumulateStepDeriver(BaseDeriver): - type_: Literal["deaccumulate"] = Field("deaccumulate", alias="type") + name: Literal["step_deaccumulate"] = Field("step_deaccumulate") by: int = 0 allow_missing_zero: bool = False @@ -96,33 +97,35 @@ def _range(self, start: int, end: int, fc_steps: list[int]) -> list[int]: raise ValueError(f"Required step {start} not in forecast steps") return [start, end] - def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: - steps = list(map(int, str(output_request["step"]).split("-"))) + def derive(self, request: dict, forecast: Dataset) -> list[int]: + steps = list(map(int, str(request["step"]).split("-"))) + fc_steps = list(map(int, forecast.steps(request))) if len(steps) == 1: return self._inst_step(int(steps[0]), fc_steps) - return self._range(*steps, fc_steps) + return self._range(*steps, fc_steps=fc_steps) class PrecomputedStepDeriver(BaseDeriver): - type_: Literal["precomputed"] = Field("precomputed", alias="type") + name: Literal["step_precomputed"] = Field("step_precomputed") - def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: - if not isinstance(output_request["step"], str): + def derive(self, request: dict, forecast: Dataset) -> list[int]: + if not isinstance(request["step"], str): raise ValueError( - f"Step {output_request['step']} must be step range for pre-computed steps" + f"Step {request['step']} must be step range for pre-computed steps" ) - return [output_request["step"]] + return [request["step"]] class FcmonthStepDeriver(DefaultStepDeriver): - type_: Literal["monthly"] = Field("monthly", alias="type") + name: Literal["step_monthly"] = Field("step_monthly") - def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: - fcmonth = int(output_request["fcmonth"]) + def derive(self, request: dict, forecast: Dataset) -> list[int]: + fcmonth = int(request["fcmonth"]) + fc_steps = list(map(int, forecast.steps(request))) start, end = map( int, fcmonth_to_steprange( - datetime.datetime.strptime(str(output_request["date"]), "%Y%m%d"), + datetime.datetime.strptime(str(request["date"]), "%Y%m%d"), fcmonth, ).split("-"), ) @@ -130,55 +133,39 @@ def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: class SelectionStepDeriver(DefaultStepDeriver): - type_: Literal["select"] = Field("select", alias="type") + name: Literal["step_select"] = Field("step_select") index: int - def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: - steps = list(map(int, str(output_request["step"]).split("-"))) + def derive(self, request: dict, forecast: Dataset) -> list[int]: + steps = list(map(int, str(request["step"]).split("-"))) if len(steps) == 1: - assert ValueError("SelectionStepDeriver can not be used for single steps") - selection_range = self._range(*steps, fc_steps) + raise ValueError("SelectionStepDeriver can not be used for single steps") + fc_steps = list(map(int, forecast.steps(request))) + selection_range = self._range(*steps, fc_steps=fc_steps) return [selection_range[self.index]] class StaticStepDeriver(BaseDeriver): - type_: Literal["static"] = Field("static", alias="type") + name: Literal["step_static"] = Field("step_static") values: Union[int, list[int]] - def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: + def derive(self, request: dict, forecast: Dataset) -> list[int]: steps = [self.values] if isinstance(self.values, int) else self.values + fc_steps = forecast.steps(request) if not all([x in fc_steps for x in steps]): raise ValueError(f"Values {steps}, must be contained in forecast steps") return steps -ForecastStepDeriver = Annotated[ - Union[ - DefaultStepDeriver, - DeaccumulateStepDeriver, - PrecomputedStepDeriver, - FcmonthStepDeriver, - SelectionStepDeriver, - StaticStepDeriver, - ], - Field(default_factory=DefaultStepDeriver, discriminator="type_"), -] - - -class ClimStepDeriver(BaseDeriver): - type_: Literal["range", "instantaneous"] = Field("range", alias="type") +class ClimStepRangeDeriver(BaseDeriver): + name: Literal["clim_step_range"] = Field("clim_step_range") - @model_validator(mode="before") - @classmethod - def set_type(cls, data: Any) -> Any: - if isinstance(data, str): - return {"type": data} - return data - - @staticmethod - def _range(fc_request: dict, clim_steps: list[int]) -> str: - time = int(fc_request["time"]) // 100 - req_steps = fc_request["step"] + def derive(self, request: dict, climatology: Climatology) -> str: + time = int(request["time"]) // 100 + req_steps = request["step"] + if isinstance(req_steps, (int, str)): + req_steps = [req_steps] + clim_steps = list(map(str, climatology.steps(request))) if len(req_steps) == 1 and isinstance(req_steps[0], str): req_steps = list(map(int, req_steps[0].split("-"))) @@ -220,10 +207,16 @@ def _range(fc_request: dict, clim_steps: list[int]) -> str: return f"{clim_start}-{clim_start + width}" return f"{start}-{end}" - @staticmethod - def _instantaneous(fc_request: dict, clim_steps: list[int]) -> list[int]: - time = int(fc_request["time"]) // 100 - steps = fc_request["step"] + +class ClimStepInstantaneousDeriver(BaseDeriver): + name: Literal["clim_step_inst"] = Field("clim_step_inst") + + def derive(self, request: dict, climatology: Climatology) -> list[int]: + time = int(request["time"]) // 100 + steps = request["step"] + if isinstance(steps, (int, str)): + steps = [steps] + clim_steps = climatology.steps(request) # Match on valid time. Reforecast assumed to run at 00UTC only matched_steps = [] for step in steps: @@ -236,23 +229,20 @@ def _instantaneous(fc_request: dict, clim_steps: list[int]) -> list[int]: matched_steps.append(valid_time) return matched_steps - def derive(self, request: dict, clim_steps: list[str]) -> int | str: - return getattr(ClimStepDeriver, f"_{self.type_}")(request, clim_steps) - class ClimDateDeriver(PProcBaseModel): model_config = ConfigDict(extra="allow") - + name: Literal["clim_date"] = Field("clim_date") option: str sequence: Optional[dict] = None - def derive(self, fc_request: dict, scheme: str) -> str | list[str]: - date = datetime.datetime.strptime(str(fc_request["date"]), "%Y%m%d") + def derive(self, request: dict, climatology: Climatology) -> str | list[str]: + date = datetime.datetime.strptime(str(request["date"]), "%Y%m%d") if self.sequence is not None: seq = Sequence.from_dict(self.sequence) else: - seq = Sequence.from_resource(scheme) - kwargs = self.model_dump(exclude={"option", "sequence"}) + seq = Sequence.from_resource(climatology.scheme) + kwargs = self.model_dump(exclude={"option", "sequence", "name"}) clim_date = getattr(seq, self.option)(date.date(), **kwargs) if isinstance(clim_date, datetime.date): return datetime.datetime.strftime(clim_date, "%Y%m%d") @@ -260,13 +250,14 @@ def derive(self, fc_request: dict, scheme: str) -> str | list[str]: class HindcastDatesDeriver(PProcBaseModel): + name: Literal["hindcast_dates"] = Field("hindcast_dates") rstart: int rend: int recurrence: str = "yearly" include_endpoint: bool = False - def derive(self, fc_request: dict) -> list[str]: - date = datetime.datetime.strptime(str(fc_request["date"]), "%Y%m%d").date() + def derive(self, request: dict, forecast: Dataset) -> list[str]: + date = datetime.datetime.strptime(str(request["date"]), "%Y%m%d").date() start = RelativeYear(self.rstart).relative_to(date) end = RelativeYear(self.rend).relative_to(date) return [ @@ -275,3 +266,36 @@ def derive(self, fc_request: dict) -> list[str]: date, start, end, self.recurrence, self.include_endpoint ) ] + + +class OutputDeriver(PProcBaseModel): + name: Literal["from_output"] = Field("from_output") + key: str + + def derive(self, request: dict, forecast: Dataset) -> Any: + return request[self.key] + + +ForecastDeriver = Annotated[ + Union[ + DefaultStepDeriver, + DeaccumulateStepDeriver, + PrecomputedStepDeriver, + FcmonthStepDeriver, + SelectionStepDeriver, + StaticStepDeriver, + HindcastDatesDeriver, + OutputDeriver, + ], + Field(discriminator="name"), +] + +ClimatologyDeriver = Annotated[ + Union[ + ClimStepRangeDeriver, + ClimStepInstantaneousDeriver, + ClimDateDeriver, + OutputDeriver, + ], + Field(discriminator="name"), +] diff --git a/pproc-core/src/ppcore/schema/forecast.py b/pproc-core/src/ppcore/schema/forecast.py new file mode 100644 index 00000000..3c90b4d0 --- /dev/null +++ b/pproc-core/src/ppcore/schema/forecast.py @@ -0,0 +1,277 @@ +from typing import Optional, Annotated, Union, Literal, Self +from dataclasses import dataclass +from functools import cached_property +from qubed import Qube +from pydantic import Field, model_validator, field_validator +import bisect +import logging + +from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel +from ppcore.utils.requests import validate_request + +logger = logging.getLogger(__name__) + + +class BaseDefinition(PProcBaseModel): + datacubes: list[dict] + wave: Optional[list[dict]] = None + + +class ForecastDefinition(BaseDefinition): + dataset_type: Literal["forecast"] = "forecast" + unperturbed: Optional[dict] = None + + @field_validator("datacubes", mode="before") + def populate_request(cls, data: list[dict]) -> list[dict]: + data = data.copy() + for index, cube in enumerate(data): + if members := cube.pop("members", None): + cube["number"] = list(range(members["start"], members["end"] + 1)) + steps = [] + cube_step = cube.pop("step", []) + if isinstance(cube_step, (int, str)): + cube_step = [cube_step] + for step in cube_step: + if isinstance(step, dict): + steps.extend(range(step["from"], step["to"] + 1, step.get("by", 1))) + else: + steps.append(step) + cube["step"] = steps + if quantile := cube.pop("quantile", None): + cube["quantile"] = [f"{x}:{quantile}" for x in range(0, quantile + 1)] + data[index] = validate_request(cube) + return data + + @model_validator(mode="after") + def validate_qube(self) -> Self: + if self.wave is None and any(["param" not in cube for cube in self.datacubes]): + raise ValueError( + "Forecast must contain a list of parameters or a wave configuration" + ) + return self + + +class ReforecastDefinition(ForecastDefinition): + dataset_type: Literal["reforecast"] = "reforecast" + scheme: str + + +class ClimatologyDefinition(BaseDefinition): + dataset_type: Literal["climatology"] = "climatology" + scheme: str + + +DatasetDefinition = Annotated[ + Union[ForecastDefinition, ReforecastDefinition, ClimatologyDefinition], + Field(discriminator="dataset_type"), +] + + +@dataclass(kw_only=True) +class Dataset: + datacubes: list[dict] + wave: Optional[list[dict]] = None + + @cached_property + def qube(self) -> Qube: + dataqube = Qube.empty() + for cube in self.datacubes: + dataqube = dataqube | Qube.from_datacube(cube) + return dataqube + + @cached_property + def wave_qube(self) -> Qube: + if self.wave is None: + raise ValueError("No wave configuration defined for this forecast") + wave_qube = Qube.empty() + for condition in self.wave: + wave_qube = wave_qube | self.qube.select(condition) + return wave_qube + + @cached_property + def atmos_qube(self) -> Qube: + if self.wave is None: + raise ValueError("No wave configuration defined for this forecast") + return self.qube - self.wave_qube + + def stream(self, request: dict) -> str: + if self.wave is None: + raise ValueError("No wave configuration defined for this forecast") + for condition in self.wave: + if all([request[key] == value for key, value in condition.items()]): + return "wave" + return "atmos" + + def stream_qube(self, stream: Optional[str]) -> Qube: + if stream is None: + return self.qube + if stream == "wave": + return self.wave_qube + if stream == "atmos": + return self.atmos_qube + return self.qube.select({"stream": stream}) + + def type_qube(self, tp: Optional[str], number: Optional[str]) -> Qube: + qube = self.qube if tp is None else self.qube.select({"type": tp}) + if number is None or number == "{number}" or "number" not in qube.axes(): + return qube + + if isinstance(number, int): + number = [number] + number_axes = sorted(qube.axes()["number"]) + start = bisect.bisect_left(number, number_axes[0]) + end = bisect.bisect_right(number, number_axes[-1]) + return qube.select({"number": number[start:end]}) + + def select( + self, selection: dict, select_to_override: bool = False + ) -> tuple[Qube, dict]: + stream = selection.pop("stream", None) + tp = selection.pop("type", None) + number = selection.pop("number", None) + stream_qube = self.stream_qube(stream) + type_qube = self.type_qube(tp, number) + qube = stream_qube & type_qube + overrides = {} + for key, vals in selection.items(): + logger.debug(f"Selecting {key}:{vals} from {qube}") + if key in qube.axes(): + qube = qube.select({key: vals}) + elif select_to_override: + overrides[key] = vals + else: + return Qube.empty(), {} + return qube, overrides + + def steps(self, request: dict) -> list[int] | list[str]: + time = request.get("time", None) + qube = self.qube + if time is not None and len(qube.axes().get("time", [])) > 1: + qube = self.qube.select({"time": time}) + if qube.n_leaves == 0: + raise ValueError(f"No datacubes available for time {time}") + steps = list(qube.axes()["step"]) + return sorted( + steps, key=lambda x: int(x.split("-")[0]) if isinstance(x, str) else x + ) + + def sample_datacube(self, qube: Optional[Qube] = None) -> dict: + qube = qube or self.qube + if qube.n_leaves == 0: + raise ValueError("No datacubes available for this forecast") + return validate_request(list(qube.datacubes())[0]) + + +@dataclass(kw_only=True) +class Forecast(Dataset): + fc_type: Literal["forecast"] = "forecast" + unperturbed: Optional[dict] = None + + @cached_property + def unperturbed_qube(self) -> Qube: + if self.unperturbed is None: + return Qube.empty() + return self.qube.select(self.unperturbed) + + @cached_property + def perturbed_qube(self) -> Qube: + return self.qube - self.unperturbed_qube + + @cached_property + def is_ensemble(self) -> bool: + n_perturbed = len(self.qube.axes().get("number", [])) + n_unperturbed = 0 + if self.unperturbed is not None: + n_unperturbed = 1 if self.type_qube("unperturbed").n_leaves > 0 else 0 + return (n_perturbed + n_unperturbed) > 1 + + def type_qube(self, tp: Optional[str], number: Optional[str] = None) -> Qube: + if tp is None: + qube = self.qube + elif tp == "unperturbed": + if self.unperturbed is None: + raise ValueError( + "No unperturbed configuration defined for this forecast" + ) + qube = self.unperturbed_qube + elif tp == "perturbed": + if self.unperturbed is None: + raise ValueError( + "No unperturbed configuration defined for this forecast" + ) + qube = self.perturbed_qube + else: + qube = self.qube.select({"type": tp}) + + if number is None or number == "{number}" or "number" not in qube.axes(): + return qube + + if isinstance(number, int): + number = [number] + number_axes = sorted(qube.axes()["number"]) + start = bisect.bisect_left(number, number_axes[0]) + end = bisect.bisect_right(number, number_axes[-1]) + return qube.select({"number": number[start:end]}) + + def select( + self, selection: dict, select_to_override: bool = False + ) -> tuple[Qube, dict]: + ensemble = selection.pop("ensemble", None) + if ensemble is not None and ensemble != self.is_ensemble: + return Qube.empty(), {} + return super().select(selection, select_to_override=select_to_override) + + def sample_datacube(self, qube: Optional[Qube] = None, pop: list[str] = []) -> dict: + qube = qube or self.qube + if qube.n_leaves == 0: + raise ValueError("No datacubes available for this forecast") + if self.is_ensemble and "number" in qube.axes(): + number_axes = sorted(map(int, qube.axes()["number"])) + qube = qube.select({"number": [str(number_axes[0])]}) + out = validate_request(list(qube.datacubes())[0]) + for key in pop: + out.pop(key, None) + return out + + +@dataclass(kw_only=True) +class Reforecast(Forecast): + scheme: str + + +@dataclass(kw_only=True) +class Climatology(Dataset): + scheme: str + + +class DatasetDefinitions(PProcBaseModel): + definitions: dict[str, DatasetDefinition] + + def definition(self, name: str) -> DatasetDefinition: + if name not in self.definitions: + raise ValueError(f"Dataset {name} not defined") + return self.definitions[name] + + +def definition_to_dataset(definition: DatasetDefinition) -> Dataset: + if isinstance(definition, ForecastDefinition): + return Forecast( + datacubes=definition.datacubes, + wave=definition.wave, + unperturbed=definition.unperturbed, + ) + elif isinstance(definition, ReforecastDefinition): + return Reforecast( + datacubes=definition.datacubes, + wave=definition.wave, + unperturbed=definition.unperturbed, + scheme=definition.scheme, + ) + elif isinstance(definition, ClimatologyDefinition): + return Climatology( + datacubes=definition.datacubes, + wave=definition.wave, + scheme=definition.scheme, + ) + else: + raise ValueError(f"Unknown dataset definition type: {type(definition)}") diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index 595a1482..94ced799 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -7,33 +7,33 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -import copy import logging +import itertools from typing import Any from typing import Iterator from typing import Optional from typing import Union from typing import Literal -import numpy as np -import pandas as pd from pydantic import field_validator -from pydantic import model_validator -from typing_extensions import Self +from qubed import Qube from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel +from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values from ppcore.schema.base import BaseSchema from ppcore.schema.step import StepSchema -from ppcore.utils.dicts import deep_update from ppcore.utils.helpers import to_list -from ppcore.utils.mars import extract_mars -from ppcore.schema.deriver import ( - ClimDateDeriver, - ClimStepDeriver, - DefaultStepDeriver, - ForecastStepDeriver, - HindcastDatesDeriver, +from ppcore.schema.forecast import ( + Dataset, + Forecast, + Reforecast, + Climatology, + ForecastDefinition, + ReforecastDefinition, + ClimatologyDefinition, + definition_to_dataset, ) +from ppcore.schema.deriver import ForecastDeriver, ClimatologyDeriver from ppcore.schema.filters import ( _members, _selection, @@ -41,301 +41,300 @@ _steptype, ) from ppcore.utils.requests import ( - expand, - squeeze, - update_request, validate_request, + update_request, ) +from ppcore.utils.mars import extract_mars +from ppcore.utils.qube import union logger = logging.getLogger(__name__) +INHERIT_FROM_OUTPUT = [ + "class", + "expver", + "date", + "time", + "levtype", + "levelist", + "param", + "step", + "model", + "method", + "origin", + "system", +] + + class ForecastInput(PProcBaseModel): - members: Optional[dict] = None - request: dict - derive_step: ForecastStepDeriver - derive_date: Optional[list[ClimDateDeriver]] = None - derive_hdate: Optional[HindcastDatesDeriver] = None + select: dict = {} + derive: dict[str, list[ForecastDeriver]] = {} + override: dict = {} + select_to_override: bool = False - @field_validator("derive_date", mode="before") + @field_validator("derive", mode="before") @classmethod - def format_derive_date(cls, data: Any) -> Any: + def format_derivers(cls, data: Any) -> Any: if isinstance(data, dict): - return [data] + for key, derivers in data.items(): + if isinstance(derivers, dict): + data[key] = [derivers] return data - @model_validator(mode="after") - def populate_request(self) -> Self: - if self.members: - if "number" in self.request: - number = np.asarray(self.request["number"]) - number = number[ - (number >= self.members["start"]) & (number <= self.members["end"]) - ].tolist() - else: - number = list(range(self.members["start"], self.members["end"] + 1)) - self.request["number"] = number - else: - self.request.pop("number", None) - return self - - def populate_derived( - self, base_request: dict, steps: list[int], scheme: Optional[str] = None - ): - for k, v in self.request.items(): - self.request[k] = v if v != f"{{{k}}}" else base_request[k] - self.request["step"] = self.derive_step.derive(base_request, steps) - if self.derive_date: - request = base_request.copy() - for deriver in self.derive_date: - request["date"] = deriver.derive(request, scheme) - self.request["date"] = request["date"] - if self.derive_hdate: - self.request["hdate"] = self.derive_hdate.derive(base_request) - - def mars(self) -> dict: - req = extract_mars(self.request, additional=["target_grid"]) - for key in list(req.keys()): - if req[key] == f"{{{key}}}": - req.pop(key) - return req - - -class ClimatologyInput(ForecastInput): - derive_step: Optional[ClimStepDeriver] = None - - @model_validator(mode="after") - def populate_request(self) -> Self: - super().populate_request() - if self.request.get("type", None) == "cd": - self.request["quantile"] = [f"{x}:100" for x in range(0, 101)] - return self - - def populate_derived(self, base_request: dict, steps: list[int | str], scheme: str): - assert ( - self.derive_step and self.derive_date - ), "Both step and date derivers required" - super().populate_derived(base_request, steps, scheme) - - -class ForecastConfig(PProcBaseModel): - inputs: list[ForecastInput] - scheme: Optional[str] = None - - @model_validator(mode="after") - def simplify_requests(self) -> Self: - if len(self.inputs) == 1: - return self - base_input = self.inputs[0].model_dump(exclude="members") - number = set(base_input["request"].pop("number", [])) - for input in self.inputs[1:]: - input_dict = input.model_dump(exclude="members") - input_number = input_dict["request"].pop("number", []) - if base_input != input_dict: - return self - number = number.union(input_number) - number = sorted(list(number)) - diff = set(np.diff(number)) - if len(diff) != 0 and diff != {1}: - return self - members = None - if len(number) != 0: - base_input["request"]["number"] = number - members = {"start": number[0], "end": number[-1]} - self.inputs = [ForecastInput(**base_input, members=members)] - return self - - def steps(self) -> list[int]: - out = set() - for inp in self.inputs: - steps = inp.request["step"] - assert isinstance(steps, list), f"Expected list of steps, got {steps}" - out.update(steps) - out = list(out) - out.sort() - return out - - def base_request(self, *exclude) -> dict: + def _from_output(self, request: dict, pop: list[str] = []) -> dict: out = {} - if len(self.inputs) == 0: - return out - - for key in set.intersection(*[set(inp.request.keys()) for inp in self.inputs]): - if all( - [inp.request[key] == self.inputs[0].request[key] for inp in self.inputs] - ): - if key not in exclude: - out[key] = self.inputs[0].request[key] + inherit = set(INHERIT_FROM_OUTPUT) + for key in self.derive.keys(): + if key in inherit: + inherit.remove(key) + for key in inherit: + if key in request: + out[key] = request[key] return out - def match(self, input_requests: list[dict]) -> Iterator[Self]: - paramless = ["param" not in inp.mars() for inp in self.inputs] + def derived_selection(self, base_request: dict, forecast: Dataset) -> dict: + derived_selection = {} + request = base_request.copy() + for key, derivers in self.derive.items(): + for deriver in derivers: + request[key] = deriver.derive(request, forecast) + derived_selection[key] = request[key] + return derived_selection - if any(paramless): - assert all(paramless), "All or none of the inputs must specify param" + def requests( + self, + base_request: dict, + forecast: Dataset, + **extra, + ) -> Iterator[dict]: + select_criteria = self.create_selection(base_request, forecast) + selection, select_overrides = forecast.select( + select_criteria, select_to_override=self.select_to_override + ) + logger.debug( + "Selected cubes: %s, select overrides: %s", selection, select_overrides + ) + override = self.override.copy() + override.update(select_overrides) + if "target_grid" in base_request: + override["target_grid"] = base_request["target_grid"] + pop = [] + for key, value in override.items(): + if value is None: + override.pop(key) + pop.append(key) + + # Order outputs by unperturbed first, if present + datacubes = [] + if ( + getattr(forecast, "unperturbed", None) is not None + and selection.select(forecast.unperturbed).n_leaves > 0 + ): + datacubes.extend(selection.select(forecast.unperturbed).datacubes()) + datacubes.extend( + cube for cube in selection.datacubes() if cube not in datacubes + ) + else: + datacubes = list(selection.datacubes()) + for cube in datacubes: + cube.update(override) + for key in pop: + cube.pop(key, None) + if cube["type"] in ["fcmean", "fcmax", "fcstdev", "fcmin"]: + cube.setdefault("number", 0) + cube.update(extra) + yield validate_request(cube) + # yield {key: val if len(val) > 1 else val[0] for key, val in cube.items()} + + def create_selection( + self, base_request: dict, forecast: Dataset, include_derived: bool = True + ) -> dict: + selection = self.select.copy() + if include_derived: + selection.update(self.derived_selection(base_request, forecast)) + selection = fill_template_values(selection, base_request) + if forecast.wave is not None and "stream" not in selection: + selection["stream"] = forecast.stream(base_request) + return validate_request({**self._from_output(base_request), **selection}) + + def match( + self, request: dict, forecast: Union[Forecast, Reforecast] + ) -> Iterator[Qube]: + if "param" not in self.select: groupby = ["param", "levtype"] - squeeze_dims = ["step", "number", "levelist", "quantile"] else: - groupby = "levtype" - squeeze_dims = ["step", "number", "levelist", "param", "quantile"] - for _, group in pd.DataFrame(input_requests).groupby(groupby, sort=False): - updated_reqs = [] - for inp in self.inputs: - req = inp.mars() - require = expand(req) - intersection = _intersect(require, group.to_dict("records")) - reqs = list(squeeze(intersection.to_dict("records"), squeeze_dims)) - if len(reqs) == 0: - break - assert len(reqs) == 1, f"Expected single request, got {reqs} for {req}" - updated_reqs.append(reqs[0]) - if len(updated_reqs) == 0: - continue - yield type(self)( - **self.model_dump(exclude=("inputs",), by_alias=True), - inputs=[ - { - **inp.model_dump(exclude=("request",), by_alias=True), - "request": updated_reqs[i], - } - for i, inp in enumerate(self.inputs) - ], - ) + groupby = ["levtype"] + selection = self.create_selection(request, forecast, include_derived=False) + request_qube, _ = forecast.select(selection) + logger.debug( + "Selected %s from forecast using selection %s", request_qube, selection + ) + seen = set() + for cube in request_qube.datacubes(): + for selection in zip(*[cube[axis] for axis in groupby if axis in cube]): + selection_key = str(selection) + if selection_key in seen: + continue + seen.add(selection_key) + selected = request_qube.select(dict(zip(groupby, selection))) + if selected.n_leaves == 0: + raise KeyError( + f"No datacubes available for selection {selection} from request {request_qube}" + ) + yield selected -class ClimatologyConfig(ForecastConfig): - scheme: str = "" - inputs: list[ClimatologyInput] - required: bool = False - def match(self, input_requests: list[dict]) -> Iterator[Self]: - assert all(["param" in inp.mars() for inp in self.inputs]) - yield from super().match(input_requests) +class ClimatologyInput(ForecastInput): + derive: dict[str, list[ClimatologyDeriver]] = {} + + @field_validator("select", mode="after") + @classmethod + def populate_request(cls, select: dict) -> dict: + if select.get("type", None) == "cd": + select["quantile"] = [f"{x}:100" for x in range(0, 101)] + return select + + @field_validator("derive", mode="after") + @classmethod + def validate_derivers( + cls, derive: dict[str, list[ClimatologyDeriver]] + ) -> dict[str, list[ClimatologyDeriver]]: + if "step" not in derive: + raise ValueError("Step driver required for climatology input") + if "date" not in derive: + raise ValueError("Date driver required for climatology input") + return derive + + def create_selection( + self, base_request: dict, forecast: Dataset, include_derived: bool = True + ) -> dict: + selection = self.select.copy() + if include_derived: + selection.update(self.derived_selection(base_request, forecast)) + selection = fill_template_values(selection, base_request) + if forecast.wave is not None and "stream" not in selection: + selection["stream"] = forecast.stream(base_request) + return validate_request( + {**self._from_output(base_request, pop=["number", "date"]), **selection} + ) class InputConfig(PProcBaseModel): - forecast: ForecastConfig - climatology: ClimatologyConfig + fc_inputs: list[ForecastInput] + clim_inputs: Optional[list[ClimatologyInput]] = None from_inputs: bool = True - def populate_derived( + @field_validator("fc_inputs", mode="before") + @classmethod + def format_fc_inputs(cls, data: Any) -> Any: + if isinstance(data, dict): + data = [data] + return data + + @field_validator("clim_inputs", mode="before") + @classmethod + def format_clim_inputs(cls, data: Any) -> Any: + if isinstance(data, dict): + data = [data] + return data + + def inputs( self, output_request: dict, - fc_steps: list[int], - clim_steps: Optional[list[int | str]] = None, - ): - for input in self.forecast.inputs: - input.populate_derived(output_request, fc_steps, self.forecast.scheme) - - if self.climatology.required: - for input in self.climatology.inputs: - input.populate_derived( - self.forecast.base_request(), - clim_steps, - self.climatology.scheme, + forecast: Union[Forecast], + climatology: Optional[Climatology] = None, + ) -> Iterator[dict]: + sample_input = None + for inp in self.fc_inputs: + inputs = list(inp.requests(output_request, forecast)) + if len(inputs) == 0: + raise ValueError( + f"No forecast inputs matched for {output_request}, requiring {inp}" ) + if sample_input is None: + sample_input = inputs[0] + yield from inputs - def inputs(self) -> Iterator[dict]: - for inp in self.forecast.inputs: - yield inp.mars() - if self.climatology.required: - for inp in self.climatology.inputs: - yield {**inp.mars(), "climatology": True} - - def match(self, input_requests: list[dict]) -> Iterator[Self]: - fc_inputs = list(self.forecast.match(input_requests)) - - if self.climatology.required: + if self.clim_inputs: assert ( - len(fc_inputs) == 1 - ), "Climatology should be uniquely tied to forecast" - - fc_config = fc_inputs[0] - for clim_inp in self.climatology.inputs: - assert ( - len(clim_inp.derive_date) == 1 - ), "Climatology can only have a single date" - clim_inp.request["date"] = clim_inp.derive_date[0].derive( - fc_config.base_request(), self.climatology.scheme + climatology is not None + ), "Climatology input defined but no climatology provided" + for inp in self.clim_inputs: + yield from inp.requests( + validate_request(sample_input), climatology, climatology=True ) - try: - clim_inputs = list(self.climatology.match(input_requests)) - except AssertionError: - logger.warning("Could not find required climatology in requests") - return iter([]) - - yield InputConfig( - forecast=fc_inputs[0], - climatology=clim_inputs[0], - ) - else: - for fc_input in fc_inputs: - yield InputConfig( - forecast=fc_input, - climatology=self.climatology, - from_inputs=self.from_inputs, - ) - -def _update_config(config: dict, update: dict[str, dict]) -> dict: - for fc_type, fc_update in update.items(): - fc_update = fc_update.copy() - fc_config = config[fc_type].model_dump(exclude_none=True, by_alias=True) - current_inputs = fc_config.pop("inputs") - update_inputs = fc_update.pop("inputs", []) - method = fc_update.get("update_request_method", "map") - inputs = update_request(current_inputs, update_inputs, method=method) - config[fc_type] = type(config[fc_type])( - **deep_update(fc_config, fc_update), inputs=inputs + def matched_outputs( + self, + request: dict, + forecast: Union[Forecast, Reforecast], + climatology: Optional[Climatology] = None, + step_schema: Optional[StepSchema] = None, + ) -> Iterator[dict]: + fc_inputs = [ + union(paired_inputs) + for paired_inputs in zip( + *[list(inp.match(request, forecast)) for inp in self.fc_inputs] + ) + ] + if len(fc_inputs) == 0: + logger.debug("No inputs for request %s", request) + return iter([]) + + if self.clim_inputs and len(fc_inputs) > 1: + raise ValueError("Climatology should be uniquely tied to forecast") + # Determine output steps that can be generated + step_schema = step_schema or StepSchema({}) + fc_steps = list(fc_inputs[0].axes()["step"]) + if len(fc_steps) > 1: + if any("-" in str(x) for x in fc_steps): + raise ValueError("Combining different step ranges is not supported") + fc_steps = sorted(list(map(int, fc_steps))) + + sample = forecast.sample_datacube(fc_inputs[0], pop=["step", "number"]) + step_dim, out_steps = step_schema.out_steps({**sample, **request}, fc_steps) + logger.debug( + "Obtained values %s from forecast steps %s for dim %s", + out_steps, + fc_steps, + step_dim, ) - return config + + for fc_input, step in itertools.product(fc_inputs, out_steps): + sample_datacube = forecast.sample_datacube(fc_input, pop=["step", "number"]) + out = {**sample_datacube, **request, step_dim: step} + # Determine climatology is present + if self.clim_inputs: + assert ( + climatology is not None + ), "Climatology input defined but no climatology provided" + clim_input = [ + union(paired_inputs) + for paired_inputs in zip( + *[ + list(inp.match(request, climatology)) + for inp in self.clim_inputs + ] + ) + ] + if len(clim_input) == 0: + continue + if len(clim_input) > 1: + raise ValueError("Climatology should be uniquely tied to forecast") + yield out -def _intersect( - lista: list[dict], listb: list[dict], how: str = "inner" -) -> pd.DataFrame: - dfa = pd.DataFrame(lista) - dfa.drop(columns="number", errors="ignore", inplace=True) - dfa.drop_duplicates(inplace=True) - dfb = pd.DataFrame(listb) - merged = dfa.merge(dfb, how=how, on=dfa.columns.tolist()) - - num_expected = len(dfa) - restricted = merged.drop( - columns=["number"] + [x for x in dfb.columns if x not in dfa.columns], - errors="ignore", - ) - restricted.drop_duplicates(inplace=True) - return merged if len(restricted) == num_expected else pd.DataFrame() - - -def _match_forecast( - out: dict, forecast: Union[ForecastConfig, ClimatologyConfig], match: dict -) -> bool: - for key, value in match.items(): - if key == "inputs": - if not getattr(forecast, "required", True) or len(forecast.inputs) == 0: - continue - require = [] - for inp in forecast.inputs: - for key in list(inp.request.keys()): - if inp.request[key] == f"{{{key}}}": - if key not in out: - return True - inp.request[key] = out[key] - require.extend(expand(inp.request)) - merged = _intersect(require, value) - if len(merged) == 0: - return False - elif getattr(forecast, key, value) != value: - return False - return True +def _update_inputs(config, update) -> dict: + for key, val in update.items(): + config[key] = update_request(config.get(key, {}), val) + return config class InputSchema(BaseSchema): custom_update = { - "forecast": _update_config, - "climatology": _update_config, + "fc_inputs": _update_inputs, + "clim_inputs": _update_inputs, } custom_filter = { "steptype": _steptype, @@ -343,86 +342,21 @@ class InputSchema(BaseSchema): "selection": _selection, "members": _members, } - custom_match = {"forecast": _match_forecast, "climatology": _match_forecast} - - @classmethod - def _format_output_request(cls, request: dict, pop: list[str] = []) -> dict: - out = copy.deepcopy(request) - ignore_inheritance = { - "number": lambda req: ( - req["type"] - not in ["pf", "fcmean", "fcmax", "fcstdev", "fcmin", "fc", "gwt"] - ), - "step": None, - "fcmonth": None, - "quantile": None, - } - ignore_inheritance.update({x: None for x in pop}) - for key, condition in ignore_inheritance.items(): - if condition is None or condition(request): - out.pop(key, None) - return out - def inputs(self, output_request: dict, step_schema: StepSchema) -> Iterator[dict]: + def inputs( + self, + output_request: dict, + forecast: Union[ForecastDefinition, ReforecastDefinition], + climatology: Optional[Climatology] = None, + ) -> Iterator[dict]: output_request = validate_request(output_request) - initial = { - "forecast": ForecastConfig.model_construct( - inputs=[ - ForecastInput.model_construct( - request=self._format_output_request(output_request), - derive_step=DefaultStepDeriver(), - ) - ], - ), - "climatology": ClimatologyConfig.model_construct( - inputs=[ - ClimatologyInput.model_construct( - request=self._format_output_request( - output_request, pop=["date"] - ) - ) - ], - ), - } - config = InputConfig(**self.traverse(output_request, initial)) - fc_steps = step_schema.in_steps(output_request) - clim_steps = ( - None - if not config.climatology.required - else step_schema.out_steps(config.climatology.inputs[0].request)[1] - ) - config.populate_derived(output_request, fc_steps, clim_steps) - for inp in config.inputs(): - yield validate_request(inp) + config = InputConfig(**self.traverse(output_request)) + forecast = definition_to_dataset(forecast) + if climatology is not None: + climatology = definition_to_dataset(climatology) - def reconstruct( - self, - output_template: dict[str, Any] = {}, - method: Literal["dfs", "bfs"] = "bfs", - enable_cache: bool = True, - **matching, - ) -> Iterator[tuple[dict, InputConfig]]: - inherit = ["levelist", "levtype"] - base_request = { - key: output_template[key] for key in inherit if key in output_template - } - for out, cfg in super().reconstruct( - output_template or {}, - { - "forecast": ForecastConfig.model_construct( - inputs=[ForecastInput.model_construct(request=base_request)] - ), - "climatology": ClimatologyConfig.model_construct( - inputs=[ClimatologyInput.model_construct(request=base_request)] - ), - }, - **matching, - method=method, - enable_cache=enable_cache, - ): - input_config = InputConfig(**cfg) - logger.info("Reconstructed output %s, with config %s", out, input_config) - yield out, input_config + for inp in config.inputs(output_request, forecast, climatology): + yield inp def _set_defaults(cls, output_request: dict, input_requests: list[dict]) -> dict: output_request = validate_request(output_request) @@ -444,46 +378,44 @@ def _set_defaults(cls, output_request: dict, input_requests: list[dict]) -> dict def outputs( self, - input_requests: list[dict], + forecast: Union[ForecastDefinition, ReforecastDefinition], + climatology: Optional[ClimatologyDefinition] = None, step_schema: Optional[StepSchema] = None, - output_template: dict[str, Any] = {}, + output_template: Optional[dict[str, Any]] = None, method: Literal["dfs", "bfs"] = "bfs", enable_cache: bool = True, ) -> Iterator[tuple[dict, list[dict]]]: """ Assumes inputs are from the same forecast for a single date and time """ - input_requests = list(expand([validate_request(req) for req in input_requests])) - output_template = validate_request(output_template) + output_template = validate_request(output_template or {}) + forecast = definition_to_dataset(forecast) + if climatology is not None: + climatology = definition_to_dataset(climatology) + # Check that the output template contains the required keys to derive outputs from inputs + # To avoid generating outputs across different streams + # TODO: consider splitting schema by dataset definers to avoid this requirement + dataset_definers = {"class", "stream", "model"} + required = set.intersection(dataset_definers, self.all_filters) + if any(key not in output_template for key in required): + raise ValueError( + f"Output template must contain {required} to derive outputs from inputs" + ) + # Derive output requests and corresponding input configs that match the template for base_output, config in self.reconstruct( output_template=output_template, - forecast={"inputs": input_requests}, - climatology={"inputs": input_requests}, from_inputs=True, method=method, enable_cache=enable_cache, ): - for mconfig in config.match(input_requests): - logger.debug("Matched config: %s", mconfig) - mout = { - **mconfig.forecast.base_request("step", "number"), - **base_output, - } - - step_schema = step_schema or StepSchema({}) - step_dim, out_steps = step_schema.out_steps( - mout, mconfig.forecast.steps() - ) - clim_steps = ( - None - if not mconfig.climatology.required - else mconfig.climatology.steps() - ) - - for step in out_steps: - out = {**mout, step_dim: step} - sconfig = mconfig.model_copy(deep=True) - sconfig.populate_derived(out, sconfig.forecast.steps(), clim_steps) - out, inputs = out, [validate_request(x) for x in sconfig.inputs()] - logger.info("Output %s, requiring inputs %s", out, inputs) - yield self._set_defaults(out, inputs), inputs + logger.debug("Reconstructed output %s", base_output) + config = InputConfig(**config) + # Perform intersection with the forecast and climatology qubes to determine + # the actual output requests that can be generated from the inputs + for mout in config.matched_outputs( + base_output, forecast, climatology, step_schema + ): + inputs = list(config.inputs(mout, forecast, climatology)) + mout = extract_mars(self._set_defaults(mout, inputs)) + logger.info("Output %s, requiring inputs %s", mout, inputs) + yield mout, inputs diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index a1efd25c..30728e11 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -8,30 +8,41 @@ # nor does it submit to any jurisdiction. import os -from typing import Iterator, Optional, Union, Literal +from typing import Iterator, Optional, Union, Literal, Any import numpy as np -import pandas as pd import yaml from typing_extensions import Self from ppcore.schema.config import ConfigSchema from ppcore.schema.input import InputSchema from ppcore.schema.step import StepSchema +from ppcore.schema.forecast import ( + DatasetDefinitions, + DatasetDefinition, + ForecastDefinition, + ReforecastDefinition, + ClimatologyDefinition, +) from ppcore.utils.mars import METADATA_KEYS -from ppcore.utils.requests import VALUE_TYPES -from ppcore.utils.requests import validate_request +from ppcore.utils.requests import VALUE_TYPES, expand class Schema: def __init__( - self, config: dict, inputs: dict, windows: dict, matching_cache_size: int = 0 + self, + config: dict, + inputs: dict, + windows: dict, + datasets: dict, + matching_cache_size: int = 0, ): self.config_schema = ConfigSchema( config, matching_cache_size=matching_cache_size ) self.param_schema = InputSchema(inputs, matching_cache_size=matching_cache_size) self.step_schema = StepSchema(windows, matching_cache_size=matching_cache_size) + self.datasets = DatasetDefinitions(definitions=datasets) @classmethod def from_file( @@ -41,9 +52,14 @@ def from_file( schema = yaml.safe_load(f) return cls(**schema, matching_cache_size=matching_cache_size) - def config_from_output(self, output_request: dict) -> dict: + def config_from_output( + self, + output_request: dict[str, Any], + forecast: Union[ForecastDefinition, ReforecastDefinition], + climatology: Optional[ClimatologyDefinition] = None, + ) -> dict: config = self.config_schema.config(output_request) - inputs = list(self.param_schema.inputs(output_request, self.step_schema)) + inputs = list(self.param_schema.inputs(output_request, forecast, climatology)) # Set metadata base_request = inputs[0] @@ -65,55 +81,34 @@ def config_from_output(self, output_request: dict) -> dict: def config_from_input( self, - input_requests: list[dict], + forecast: Union[ForecastDefinition, ReforecastDefinition], + climatology: Optional[ClimatologyDefinition] = None, output_template: Optional[dict] = None, - entrypoint: Optional[str] = None, ) -> Iterator[dict]: - # If entrypoint is provided, find output templates provided by that entrypoint - if entrypoint is not None: - reconstructed = self.config_schema.reconstruct( - output_template=( - None - if output_template is None - else validate_request(output_template) - ), - **({} if entrypoint is None else {"entrypoint": entrypoint}), - ) - matching_types = pd.DataFrame([x for x, _ in reconstructed]) - output_keys = ( - [] if output_template is None else list(output_template.keys()) - ) - drop = [ - x - for x in self.config_schema.all_filters.difference( - ["type"] + output_keys - ) - ] - matching_types.drop(columns=drop, inplace=True, errors="ignore") - matching_types.drop_duplicates(inplace=True) - output_templates = matching_types.to_dict(orient="records") - else: - output_templates = [output_template] - - for template in output_templates: + for output_template in expand(output_template) if output_template else [None]: for output, inputs in self.outputs_from_inputs( - input_requests, output_template=template + forecast, climatology, output_template=output_template ): - out_config = self.config_from_output(output) + out_config = self.config_from_output(output, forecast, climatology) out_config["inputs"] = inputs yield out_config def outputs_from_inputs( self, - inputs: list[dict], - output_template: Optional[dict] = None, + forecast: Union[ForecastDefinition, ReforecastDefinition], + climatology: Optional[ClimatologyDefinition] = None, + output_template: Optional[dict[str, Any]] = None, method: Literal["dfs", "bfs"] = "bfs", enable_cache: bool = True, ) -> Iterator[tuple[dict, list[dict]]]: yield from self.param_schema.outputs( - inputs, + forecast, + climatology, self.step_schema, output_template, method=method, enable_cache=enable_cache, ) + + def definition(self, name: str) -> DatasetDefinition: + return self.datasets.definition(name) diff --git a/pproc-core/src/ppcore/schema/step.py b/pproc-core/src/ppcore/schema/step.py index fbefd572..03c39f45 100644 --- a/pproc-core/src/ppcore/schema/step.py +++ b/pproc-core/src/ppcore/schema/step.py @@ -52,14 +52,14 @@ class Range(PProcBaseModel): width: int dim: Literal["step"] = "step" - def generate_steps(self, steps: list[int] | list[str]) -> list[str]: + def generate_steps(self, steps: Union[list[int], list[str]]) -> list[str]: if all(isinstance(x, str) for x in steps): - return steps + return steps # type: ignore assert all( isinstance(x, int) for x in steps ), "Steps can not be a mix of strings and integers" - start = self.start or steps[0] - end = min((self.end or steps[-1]), steps[-1]) - self.width + start: int = self.start or steps[0] # type: ignore + end: int = min((self.end or steps[-1]), steps[-1]) - self.width # type: ignore rstarts = set(range(start, end + 1, self.interval)) rstarts.intersection_update(steps) return [f"{rstart}-{rstart + self.width}" for rstart in sorted(rstarts)] @@ -104,19 +104,14 @@ def _create_steps(cls, step_config: list[dict]) -> list[int]: ) return sorted(steps) - def in_steps(self, request: dict) -> list[int]: - config = self.traverse(request) - return self._create_steps(config.get("in_steps", [])) - def out_steps( - self, request: dict, steps: Optional[list[int]] = None + self, request: dict, in_steps: list[int] ) -> tuple[str, list[Union[int, str]]]: for dim in ["step", "fcmonth"]: if dim in request: return dim, [request[dim]] config = self.traverse(request, {}) - in_steps: list[int] = steps or self._create_steps(config.get("in_steps", [])) step_configs = config.get("out_steps", None) if step_configs is None: raise ValueError(f"No output steps defined {request}") diff --git a/pproc-core/src/ppcore/utils/io.py b/pproc-core/src/ppcore/utils/io.py index 86a2a769..1539a5de 100644 --- a/pproc-core/src/ppcore/utils/io.py +++ b/pproc-core/src/ppcore/utils/io.py @@ -10,4 +10,4 @@ def split_location( m = _LOCATION_RE.fullmatch(loc) if m is None: return (default, loc) - return m.groups() + return m.groups() # type: ignore diff --git a/pproc-core/src/ppcore/utils/qube.py b/pproc-core/src/ppcore/utils/qube.py new file mode 100644 index 00000000..32c74ee1 --- /dev/null +++ b/pproc-core/src/ppcore/utils/qube.py @@ -0,0 +1,23 @@ +from typing import Iterable + +from qubed import Qube + + +def union(qubes: Iterable[Qube]) -> Qube: + """ + Return the union of a list of Qubes + """ + out = Qube.empty() + for qube in qubes: + out = out | qube + return out + + +def qube_from_datacubes(datacubes: Iterable[dict]) -> Qube: + """ + Return a Qube from a list of datacubes + """ + out = Qube.empty() + for cube in datacubes: + out = out | Qube.from_datacube(cube) + return out diff --git a/pproc-core/src/ppcore/utils/requests.py b/pproc-core/src/ppcore/utils/requests.py index e1c15c88..4f8a5802 100644 --- a/pproc-core/src/ppcore/utils/requests.py +++ b/pproc-core/src/ppcore/utils/requests.py @@ -1,7 +1,6 @@ import copy import itertools -from typing import Iterator -from typing import Optional +from typing import Iterator, Optional, Iterable, Any import numpy as np import pandas as pd @@ -45,22 +44,24 @@ def validate_request(request: dict) -> dict: pass out[key] = value # Format time - if time := out.get("time", None): - if isinstance(time, list): - raise ValueError("Only single value of time supported per request") - if isinstance(time, int): - time = f"{time:02d}" - out["time"] = time.ljust(4, "0") + if times := out.get("time", None): + if isinstance(times, (int, str)): + times = [times] + out_times = [] + for ti in times: + out_times.append(f"{int(ti):02d}".ljust(4, "0")) + out["time"] = out_times if len(out_times) > 1 else out_times[0] return out def expand( - requests: dict | list[dict], + requests: dict[str, Any] | Iterable[dict[str, Any]], dim: Optional[str | list[str]] = None, exclude: list[str] = [], ) -> Iterator[dict]: - if isinstance(requests, dict): - requests = [requests] + requests: Iterable[dict[str, Any]] = ( + [requests] if isinstance(requests, dict) else requests + ) # type: ignore for request in requests: request = copy.deepcopy(request) diff --git a/pproc-core/tests/ppcore/configs/entrypoint/test_log.py b/pproc-core/tests/ppcore/configs/entrypoint/test_log.py index 9b735cb2..012317d3 100644 --- a/pproc-core/tests/ppcore/configs/entrypoint/test_log.py +++ b/pproc-core/tests/ppcore/configs/entrypoint/test_log.py @@ -31,7 +31,7 @@ def test_logging_app_default(): with patch("sys.argv", ["test_script.py"]): conflator = Conflator("pproc", LoggingConfig, nested={}) - config = conflator.load() + config: LoggingConfig = conflator.load() # type: ignore assert config.level == "INFO" assert config.format == "%(asctime)s; %(name)s; %(levelname)s - %(message)s" @@ -55,7 +55,7 @@ def test_logging_model_env_var(monkeypatch): monkeypatch.setenv("PPROC_LOG", "WARNING") with patch("sys.argv", ["test_script.py"]): conflator = Conflator("pproc", LoggingConfig, nested={}) - config = conflator.load() + config: LoggingConfig = conflator.load() # type: ignore assert config.level == "WARNING" @@ -68,7 +68,7 @@ def test_logging_model_cli_arg(): with patch("sys.argv", ["test_script.py"] + ["--log", "ERROR"]): conflator = Conflator("pproc", LoggingConfig, nested={}) - config = conflator.load() + config: LoggingConfig = conflator.load() # type: ignore assert config.level == "ERROR" diff --git a/pproc-core/tests/ppcore/products/templates/quantiles.yaml b/pproc-core/tests/ppcore/products/templates/quantiles.yaml index f13408c6..e54a1db2 100644 --- a/pproc-core/tests/ppcore/products/templates/quantiles.yaml +++ b/pproc-core/tests/ppcore/products/templates/quantiles.yaml @@ -10,7 +10,6 @@ step: [0, 3, 6] quantile: ['0:100', '25:100', '50:100', '75:100', '100:100'] sources: "fdb:" - sources: "fdb:" - class: od stream: enfo type: pb diff --git a/pproc-core/tests/ppcore/products/test_products.py b/pproc-core/tests/ppcore/products/test_products.py index 0de59cdb..10394f54 100644 --- a/pproc-core/tests/ppcore/products/test_products.py +++ b/pproc-core/tests/ppcore/products/test_products.py @@ -17,6 +17,7 @@ from earthkit.workflows.plugins.pproc.fluent import from_source from earthkit.workflows.plugins.pproc.utils.request import Request +from ppcore.schema.forecast import ForecastDefinition from ppcore.products import product_from_output, graph_from_outputs, action_from_outputs from ppcore.utils.requests import expand from conftest import SCHEMA @@ -37,13 +38,13 @@ def test_graph_construction(requests): with open(requests, "r") as f: output_requests = yaml.safe_load(f) - graph_from_outputs(output_requests, SCHEMA) + graph_from_outputs(output_requests, SCHEMA, forecast="enfo") def test_action_construction(): with open(os.path.join(ROOT_DIR, "templates", "ensms.yaml"), "r") as f: output_requests = yaml.safe_load(f) - action_from_outputs(output_requests, SCHEMA) + action_from_outputs(output_requests, SCHEMA, forecast="enfo") @pytest.mark.parametrize( @@ -95,7 +96,12 @@ def test_custom_source(requests): }, ] product = product_from_output( - req, SCHEMA, inputs=inputs, metadata={"edition": 2} + req, + SCHEMA, + forecast=ForecastDefinition( + datacubes=inputs, unperturbed={"stream": "oper", "type": "fc"} + ), + metadata={"edition": 2}, ) source_actions = {} for levtype in ["sfc", "pl"]: diff --git a/pproc-core/tests/ppcore/schema/test_config_schema.py b/pproc-core/tests/ppcore/schema/test_config_schema.py index c734e88c..44a6383e 100644 --- a/pproc-core/tests/ppcore/schema/test_config_schema.py +++ b/pproc-core/tests/ppcore/schema/test_config_schema.py @@ -31,6 +31,7 @@ def test_reconstruct_cache(): matching_cache_size=2, ) cfgs_a = list(config_schema.reconstruct(entrypoint="pproc-ensms")) + cfgs_b = list(config_schema.reconstruct(entrypoint="pproc-ensms")) assert cfgs_a == cfgs_b assert len(config_schema._matching_cache) == 1 @@ -41,8 +42,16 @@ def test_reconstruct_cache(): def test_reconstruct_dfs(): config_schema = ConfigSchema(schema("config")) - dfs_cfgs = list(config_schema.reconstruct(entrypoint="pproc-ensms", method="dfs", enable_cache=False)) - bfs_cfgs = list(config_schema.reconstruct(entrypoint="pproc-ensms", method="bfs", enable_cache=False)) + dfs_cfgs = list( + config_schema.reconstruct( + entrypoint="pproc-ensms", method="dfs", enable_cache=False + ) + ) + bfs_cfgs = list( + config_schema.reconstruct( + entrypoint="pproc-ensms", method="bfs", enable_cache=False + ) + ) assert dfs_cfgs[0] == bfs_cfgs[0] assert len(dfs_cfgs) == len(bfs_cfgs) diff --git a/pproc-core/tests/ppcore/schema/test_deriver.py b/pproc-core/tests/ppcore/schema/test_deriver.py index f654fda5..b1b72e8f 100644 --- a/pproc-core/tests/ppcore/schema/test_deriver.py +++ b/pproc-core/tests/ppcore/schema/test_deriver.py @@ -1,106 +1,106 @@ import pytest from pydantic import TypeAdapter -from ppcore.schema.deriver import ClimDateDeriver -from ppcore.schema.deriver import ClimStepDeriver -from ppcore.schema.deriver import ForecastStepDeriver +from ppcore.schema.forecast import Dataset, Climatology +from ppcore.schema.deriver import ClimDateDeriver, ClimatologyDeriver, ForecastDeriver -FcStepDeriver = TypeAdapter(ForecastStepDeriver) +FcDeriver = TypeAdapter(ForecastDeriver) +ClimDeriver = TypeAdapter(ClimatologyDeriver) @pytest.mark.parametrize( "config, output_request, fc_steps, expected", [ - pytest.param({"type": "default"}, {"step": 6}, [0, 6, 12], [6], id="inst"), + pytest.param({"name": "step_default"}, {"step": 6}, [0, 6, 12], [6], id="inst"), pytest.param( - {"type": "default"}, {"step": "0-6"}, [0, 3, 6, 12], [3, 6], id="range" + {"name": "step_default"}, {"step": "0-6"}, [0, 3, 6, 12], [3, 6], id="range" ), pytest.param( - {"type": "default", "include_start": True}, + {"name": "step_default", "include_start": True}, {"step": "0-6"}, [0, 3, 6, 12], [0, 3, 6], id="range-with-start", ), pytest.param( - {"type": "default", "include_start": True, "allow_missing_zero": True}, + {"name": "step_default", "include_start": True, "allow_missing_zero": True}, {"step": "0-6"}, [0, 3, 6, 12], [0, 3, 6], id="range-allow-missing", ), pytest.param( - {"type": "default", "include_start": True, "allow_missing_zero": True}, + {"name": "step_default", "include_start": True, "allow_missing_zero": True}, {"step": "0-6"}, [3, 6, 12], [3, 6], id="range-missing-zero", ), pytest.param( - {"type": "default", "by": 6}, + {"name": "step_default", "by": 6}, {"step": "0-6"}, [0, 3, 6, 12], [6], id="range-with-by", ), pytest.param( - {"type": "deaccumulate"}, + {"name": "step_deaccumulate"}, {"step": "0-6"}, [0, 6, 9, 12], [0, 6], id="deacc-range", ), pytest.param( - {"type": "deaccumulate", "allow_missing_zero": True}, + {"name": "step_deaccumulate", "allow_missing_zero": True}, {"step": "0-6"}, [6, 9, 12], [6], id="deacc-missing-zero", ), pytest.param( - {"type": "deaccumulate"}, + {"name": "step_deaccumulate"}, {"step": 6}, [0, 6, 9, 12], [0, 6], id="deacc-inst", ), pytest.param( - {"type": "deaccumulate", "allow_missing_zero": True}, + {"name": "step_deaccumulate", "allow_missing_zero": True}, {"step": 6}, [6, 9, 12], [6], id="deacc-inst-missing-zero", ), pytest.param( - {"type": "deaccumulate", "by": 12}, + {"name": "step_deaccumulate", "by": 12}, {"step": 12}, [0, 6, 9, 12], [0, 12], id="deacc-inst-by", ), pytest.param( - {"type": "deaccumulate", "by": 24, "allow_missing_zero": True}, + {"name": "step_deaccumulate", "by": 24, "allow_missing_zero": True}, {"step": "0-12"}, [12, 18, 24], [24], id="deacc-range-by", ), pytest.param( - {"type": "precomputed"}, + {"name": "step_precomputed"}, {"step": "0-12"}, [6, 9, 12], ["0-12"], id="precomputed", ), pytest.param( - {"type": "monthly"}, + {"name": "step_monthly"}, {"fcmonth": 1, "date": "20250601"}, list(range(0, 745, 6)), list(range(6, 721, 6)), id="monthly", ), pytest.param( - {"type": "monthly", "include_start": True}, + {"name": "step_monthly", "include_start": True}, {"fcmonth": 1, "date": "20250601"}, list(range(0, 745, 6)), list(range(0, 721, 6)), @@ -108,7 +108,7 @@ ), pytest.param( { - "type": "monthly", + "name": "step_monthly", "include_start": True, "allow_missing_zero": True, "by": 24, @@ -119,14 +119,14 @@ id="monthly-missing-zero", ), pytest.param( - {"type": "select", "index": 1}, + {"name": "step_select", "index": 1}, {"step": "0-24"}, [0, 12, 24], [24], id="select", ), pytest.param( - {"type": "select", "index": 0, "include_start": True}, + {"name": "step_select", "index": 0, "include_start": True}, {"step": "0-24"}, [0, 12, 24], [0], @@ -134,7 +134,7 @@ ), pytest.param( { - "type": "select", + "name": "step_select", "index": 0, "include_start": True, "allow_missing_zero": True, @@ -145,7 +145,7 @@ id="select-missing-zero", ), pytest.param( - {"type": "static", "values": [0, 12]}, + {"name": "step_static", "values": [0, 12]}, {"step": "0-24"}, [0, 12, 24], [0, 12], @@ -154,105 +154,125 @@ ], ) def test_forecast_step_deriver(config, output_request, fc_steps, expected): - deriver = FcStepDeriver.validate_python(config) - assert expected == deriver.derive(output_request, fc_steps) + deriver = FcDeriver.validate_python(config) + assert expected == deriver.derive( + output_request, Dataset(datacubes=[{"step": fc_steps}]) + ) @pytest.mark.parametrize( "step_type, times, step, clim_steps, expected", [ [ - "instantaneous", + "clim_step_inst", ["0000"], [0, 6, 12, 18, 24, 354, 360], list(range(0, 361, 6)), [0, 6, 12, 18, 24, 354, 360], ], [ - "instantaneous", + "clim_step_inst", ["0600"], [0, 6, 12, 18, 24, 138], list(range(0, 361, 6)), [6, 12, 18, 24, 30, 144], ], [ - "instantaneous", + "clim_step_inst", ["1200"], [0, 6, 12, 18, 24, 354, 360], list(range(0, 361, 6)), [12, 18, 24, 30, 36, 342, 348], ], [ - "instantaneous", + "clim_step_inst", ["1800"], [0, 6, 12, 18, 24, 138], list(range(0, 361, 6)), [18, 24, 30, 36, 42, 156], ], [ - "range", + "clim_step_range", ["0000", "0600"], list(range(0, 25, 12)), ["0-24", "12-36", "24-28", "0-240"], "0-24", ], [ - "range", + "clim_step_range", ["0000", "0600"], list(range(0, 241, 12)), ["0-24", "12-36", "24-28", "0-240"], "0-240", ], [ - "range", + "clim_step_range", ["0000", "0600"], list(range(12, 25, 12)), ["0-24", "12-36", "24-28", "0-240"], "0-24", ], [ - "range", + "clim_step_range", ["0000", "0600"], [24], ["0-24", "12-36", "24-28", "0-240"], "0-24", ], [ - "range", + "clim_step_range", ["1200", "1800"], list(range(0, 25, 12)), ["0-24", "12-36", "24-28", "0-240"], "12-36", ], [ - "range", + "clim_step_range", ["1200", "1800"], list(range(0, 241, 12)), ["0-24", "12-36", "24-28", "0-240"], "0-240", ], [ - "range", + "clim_step_range", ["1200", "1800"], list(range(12, 25, 12)), ["0-24", "12-36", "24-28", "0-240"], "12-36", ], [ - "range", + "clim_step_range", ["1200", "1800"], [240], ["0-24", "12-36", "24-28", "0-240"], "0-240", ], - ["range", ["0000"], ["0-168"], ["0-168", "24-192", "48-216"], "0-168"], - ["range", ["0000"], ["24-192"], ["0-168", "24-192", "48-216"], "24-192"], + [ + "clim_step_range", + ["0000"], + ["0-168"], + ["0-168", "24-192", "48-216"], + "0-168", + ], + [ + "clim_step_range", + ["0000"], + ["24-192"], + ["0-168", "24-192", "48-216"], + "24-192", + ], ], ) def test_clim_step_deriver(step_type, times, step, clim_steps, expected): - deriver = ClimStepDeriver(type=step_type) + deriver = ClimDeriver.validate_python({"name": step_type}) # type: ignore for time in times: - assert deriver.derive({"time": time, "step": step}, clim_steps) == expected + assert ( + deriver.derive( + {"time": time, "step": step}, + Climatology(datacubes=[{"step": clim_steps}], scheme="ecmwf-4days"), + ) + == expected + ) @pytest.mark.parametrize( @@ -271,4 +291,7 @@ def test_clim_step_deriver(step_type, times, step, clim_steps, expected): ) def test_clim_date_deriver(config, date, expected): deriver = ClimDateDeriver(**config) - assert deriver.derive({"date": date}, "ecmwf-2days") == expected + assert ( + deriver.derive({"date": date}, Climatology(datacubes=[], scheme="ecmwf-2days")) + == expected + ) diff --git a/pproc-core/tests/ppcore/schema/test_input_schema.py b/pproc-core/tests/ppcore/schema/test_input_schema.py index 72d96ae5..cf9218a7 100644 --- a/pproc-core/tests/ppcore/schema/test_input_schema.py +++ b/pproc-core/tests/ppcore/schema/test_input_schema.py @@ -10,314 +10,286 @@ import pytest from conftest import schema -from ppcore.schema.input import ForecastConfig -from ppcore.schema.input import ForecastInput from ppcore.schema.input import InputSchema from ppcore.schema.step import StepSchema +from ppcore.schema.forecast import ( + ForecastDefinition, + ClimatologyDefinition, + DatasetDefinitions, + definition_to_dataset, +) from ppcore.schema.schema import Schema -from ppcore.utils.requests import expand from ppcore.utils.requests import update_request +from ppcore.utils.mars import extract_mars +from ppcore.utils.qube import qube_from_datacubes INPUTS = { "ensms": [ - { - "class": "od", - "stream": "oper", - "levtype": "sfc", - "param": "167", - "step": 3, - "type": "fc", - "time": "0000", - }, - { - "class": "od", - "stream": "enfo", - "levtype": "sfc", - "param": "167", - "step": 3, - "type": "pf", - "number": list(range(1, 51)), - "time": "0000", - }, + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "oper", + "levtype": "sfc", + "param": "167", + "step": 3, + "type": "fc", + "time": "0000", + }, + { + "class": "od", + "stream": "enfo", + "levtype": "sfc", + "param": "167", + "step": 3, + "type": "pf", + "number": list(range(1, 51)), + "time": "0000", + }, + ], + unperturbed={"stream": "oper", "type": "fc"}, + ), + None, ], "thermofeel": [ - { - "class": "od", - "stream": "oper", - "levtype": "sfc", - "param": ["169", "175", "176", "177", "228021", "47"], - "step": [2, 3], - "type": "fc", - "time": "0000", - }, - { - "class": "od", - "stream": "oper", - "levtype": "sfc", - "param": ["165", "166", "167", "168"], - "step": 3, - "type": "fc", - "time": "0000", - }, + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "oper", + "levtype": "sfc", + "param": ["169", "175", "176", "177", "228021", "47"], + "step": [2, 3], + "type": "fc", + "time": "0000", + }, + { + "class": "od", + "stream": "oper", + "levtype": "sfc", + "param": ["165", "166", "167", "168"], + "step": 3, + "type": "fc", + "time": "0000", + }, + ], + unperturbed={"stream": "oper", "type": "fc"}, + ), + None, ], "thermo_pf": [ - { - "class": "od", - "stream": "enfo", - "levtype": "sfc", - "param": ["169", "175", "176", "177", "228021", "47"], - "step": [2, 3], - "type": "pf", - "time": "0000", - "number": [1, 2, 3], - }, - { - "class": "od", - "stream": "enfo", - "levtype": "sfc", - "param": ["165", "166", "167", "168"], - "step": 3, - "type": "pf", - "time": "0000", - "number": [1, 2, 3], - }, + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "enfo", + "levtype": "sfc", + "param": ["169", "175", "176", "177", "228021", "47"], + "step": [2, 3], + "type": "pf", + "time": "0000", + "number": [1, 2, 3], + }, + { + "class": "od", + "stream": "enfo", + "levtype": "sfc", + "param": ["165", "166", "167", "168"], + "step": 3, + "type": "pf", + "time": "0000", + "number": [1, 2, 3], + }, + ], + unperturbed={"stream": "oper", "type": "fc"}, + ), + None, ], "t850": [ - { - "class": "od", - "stream": "oper", - "param": "130", - "step": list(range(120, 169, 6)), - "type": "fc", - "date": "20250314", - "time": "1200", - "levtype": "pl", - "levelist": 250, - }, - { - "class": "od", - "stream": "enfo", - "param": "130", - "step": list(range(120, 169, 6)), - "type": "pf", - "number": list(range(1, 51)), - "date": "20250314", - "time": "1200", - "levtype": "pl", - "levelist": 250, - }, - { - "class": "od", - "stream": "efhs", - "param": "130", - "step": list(range(132, 181, 6)), - "type": "em", - "date": "20250313", - "time": "0000", - "levtype": "pl", - "levelist": 250, - "climatology": True, - }, - { - "class": "od", - "stream": "efhs", - "param": "130", - "step": list(range(132, 181, 6)), - "type": "es", - "date": "20250313", - "time": "0000", - "levtype": "pl", - "levelist": 250, - "climatology": True, - }, + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "oper", + "param": "130", + "step": list(range(120, 169, 6)), + "type": "fc", + "date": "20250314", + "time": "1200", + "levtype": "pl", + "levelist": 250, + }, + { + "class": "od", + "stream": "enfo", + "param": "130", + "step": list(range(120, 169, 6)), + "type": "pf", + "number": list(range(1, 51)), + "date": "20250314", + "time": "1200", + "levtype": "pl", + "levelist": 250, + }, + ], + unperturbed={"stream": "oper", "type": "fc"}, + ), + ClimatologyDefinition( + datacubes=[ + { + "class": "od", + "stream": "efhs", + "param": "130", + "step": list(range(132, 181, 6)), + "type": "em", + "date": "20250313", + "time": "0000", + "levtype": "pl", + "levelist": 250, + }, + { + "class": "od", + "stream": "efhs", + "param": "130", + "step": list(range(132, 181, 6)), + "type": "es", + "date": "20250313", + "time": "0000", + "levtype": "pl", + "levelist": 250, + }, + ], + scheme="ecmwf-4days", + ), ], "efi": [ - { - "class": "od", - "stream": "eefo", - "levtype": "sfc", - "param": "167", - "step": "0-168", - "type": "fcmean", - "date": "20250315", - "number": list(range(0, 101)), - "time": "0000", - }, - { - "class": "od", - "stream": "eehs", - "levtype": "sfc", - "param": "228004", - "step": "0-168", - "type": "cd", - "date": "20250315", - "time": "0000", - "quantile": [f"{x}:100" for x in range(0, 101)], - "climatology": True, - }, + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "eefo", + "levtype": "sfc", + "param": "167", + "step": "0-168", + "type": "fcmean", + "date": "20250315", + "number": list(range(0, 101)), + "time": "0000", + }, + ], + unperturbed={"stream": "eefo", "type": "cf"}, + ), + ClimatologyDefinition( + datacubes=[ + { + "class": "od", + "stream": "eehs", + "levtype": "sfc", + "param": "228004", + "step": "0-168", + "type": "cd", + "date": "20250315", + "time": "0000", + "quantile": [f"{x}:100" for x in range(0, 101)], + }, + ], + scheme="ecmwf-2days", + ), ], "monthly": [ - { - "class": "od", - "stream": "mmsf", - "levtype": "sfc", - "param": ["165", "166"], - "step": list(range(6, 745, 6)), - "type": "fc", - "number": list(range(0, 51)), - "date": "20241001", - "time": "0000", - }, + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "mmsf", + "levtype": "sfc", + "param": ["165", "166"], + "step": list(range(6, 745, 6)), + "type": "fc", + "number": list(range(0, 51)), + "date": "20241001", + "time": "0000", + }, + ], + ), + None, ], "prob": [ - { - "class": "od", - "stream": "oper", - "levtype": "sfc", - "param": "228", - "step": [0, 24], - "type": "fc", - "time": "0000", - }, - { - "class": "od", - "stream": "enfo", - "levtype": "sfc", - "param": "228", - "step": [0, 24], - "type": "pf", - "number": list(range(1, 51)), - "time": "0000", - }, + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "oper", + "levtype": "sfc", + "param": "228", + "step": [0, 24], + "type": "fc", + "time": "0000", + }, + { + "class": "od", + "stream": "enfo", + "levtype": "sfc", + "param": "228", + "step": [0, 24], + "type": "pf", + "number": list(range(1, 51)), + "time": "0000", + }, + ], + unperturbed={"stream": "oper", "type": "fc"}, + ), + None, ], "sfc-pl": [ - { - "class": "od", - "stream": "oper", - "levtype": "pl", - "levelist": [250, 850], - "param": "130", - "step": 6, - "type": "fc", - "time": "0000", - }, - { - "class": "od", - "stream": "enfo", - "levtype": "pl", - "levelist": [250, 850], - "param": "130", - "step": 6, - "type": "pf", - "number": list(range(1, 51)), - "time": "0000", - }, - { - "class": "od", - "stream": "oper", - "levtype": "sfc", - "param": "167", - "step": 6, - "type": "fc", - "time": "0000", - }, - { - "class": "od", - "stream": "enfo", - "levtype": "sfc", - "param": "167", - "step": 6, - "type": "pf", - "number": list(range(1, 51)), - "time": "0000", - }, - ], -} - - -@pytest.mark.parametrize( - "inputs, expected_num_inputs", - [ - [ - [ - ForecastInput(request={"type": "em"}), - ForecastInput(request={"type": "es"}), - ], - 2, - ], - [ - [ - ForecastInput(request={"type": "cf"}), - ForecastInput( - request={"type": "pf", "number": [0, 1]}, - members={"start": 0, "end": 1}, - ), - ], - 2, - ], - [ - [ - ForecastInput( - request={"type": "fcmean", "number": [0, 1]}, - members={"start": 0, "end": 1}, - ), - ForecastInput( - request={"type": "pf", "number": [4, 5]}, - members={"start": 4, "end": 5}, - ), - ], - 2, - ], - [ - [ - ForecastInput( - request={"type": "fcmean", "number": [0]}, - members={"start": 0, "end": 0}, - ), - ForecastInput( - request={"type": "fcmean", "number": [1, 2]}, - members={"start": 0, "end": 2}, - ), - ], - 1, - ], - [ - [ - ForecastInput( - request={"type": "cf"}, - ), - ForecastInput( - request={"type": "cf"}, - ), - ], - 1, - ], - [ - [ - ForecastInput( - request={"type": "pf", "number": [0, 1]}, - members={"start": 0, "end": 1}, - ), - ForecastInput( - request={"type": "pf", "number": [0, 1]}, - members={"start": 0, "end": 1}, - ), + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "oper", + "levtype": "pl", + "levelist": [250, 850], + "param": "130", + "step": 6, + "type": "fc", + "time": "0000", + }, + { + "class": "od", + "stream": "enfo", + "levtype": "pl", + "levelist": [250, 850], + "param": "130", + "step": 6, + "type": "pf", + "number": list(range(1, 51)), + "time": "0000", + }, + { + "class": "od", + "stream": "oper", + "levtype": "sfc", + "param": "167", + "step": 6, + "type": "fc", + "time": "0000", + }, + { + "class": "od", + "stream": "enfo", + "levtype": "sfc", + "param": "167", + "step": 6, + "type": "pf", + "number": list(range(1, 51)), + "time": "0000", + }, ], - 1, - ], + unperturbed={"stream": "oper", "type": "fc"}, + ), + None, ], - ids=[ - "diff-type", - "diff-with-number", - "number-discontinous", - "merge", - "same-type", - "same-type-with-number", - ], -) -def test_forecast_config(inputs, expected_num_inputs): - config = ForecastConfig(inputs=inputs) - assert len(config.inputs) == expected_num_inputs +} @pytest.mark.parametrize( @@ -361,6 +333,7 @@ def test_forecast_config(inputs, expected_num_inputs): "time": "1200", "levtype": "pl", "levelist": 250, + "selection": "default", }, { "class": "od", @@ -391,53 +364,85 @@ def test_forecast_config(inputs, expected_num_inputs): "param": "131060", "step": "0-24", "time": "0000", + "selection": "default", }, ], ids=["ensms", "thermofeel", "thermo_pf", "t850", "efi", "monthly", "prob"], ) def test_inputs(request, output): - expected_inputs = INPUTS[request.node.callspec.id] + forecast, climatology = INPUTS[request.node.callspec.id] input_schema = InputSchema(schema("inputs")) step_schema = StepSchema(schema("windows")) - inputs = input_schema.inputs(output, step_schema) - assert list(inputs) == expected_inputs + all_inputs = list(input_schema.inputs(output, forecast, climatology)) + for dataset, clim in [(forecast, False), (climatology, True)]: + if dataset is None: + continue + generated_inputs = list( + qube_from_datacubes( + [ + extract_mars(x) + for x in all_inputs + if x.get("climatology", False) == clim + ] + ).datacubes() + ) + expected_inputs = list(definition_to_dataset(dataset).qube.datacubes()) + assert expected_inputs == generated_inputs - expanded_inputs = sum([list(expand(x)) for x in expected_inputs], []) generated = list( - input_schema.outputs(expanded_inputs, step_schema, output_template=output) + input_schema.outputs( + forecast, climatology, step_schema=step_schema, output_template=output + ) ) assert len(generated) == 1 - assert generated[0][0] == output - assert generated[0][1] == expected_inputs + assert generated[0][0] == extract_mars(output) + for dataset, clim in [(forecast, False), (climatology, True)]: + if dataset is None: + continue + generated_inputs = list( + qube_from_datacubes( + [ + extract_mars(x) + for x in generated[0][1] + if x.get("climatology", False) == clim + ] + ).datacubes() + ) + expected_inputs = list(definition_to_dataset(dataset).qube.datacubes()) + assert expected_inputs == generated_inputs @pytest.mark.parametrize( - "out_type, num_outputs", - [["em", 1], ["fc", 11], ["ep", 52], ["efi", 1], ["fcmean", 3], ["ep", 7]], + "template, num_outputs", + [ + [{"stream": "enfo", "type": "em"}, 1], + [{"stream": "oper", "type": "fc"}, 12], + [{"stream": "enfo", "type": "ep", "selection": "default"}, 52], + [{"stream": "eefo", "type": "efi"}, 1], + [{"stream": "msmm", "type": "fcmean"}, 3], + [{"stream": "enfo", "type": "ep", "selection": "default"}, 7], + ], ids=["ensms", "thermofeel", "t850", "efi", "monthly", "prob"], ) -def test_outputs(request, out_type, num_outputs): - expanded_inputs = sum( - [list(expand(x)) for x in INPUTS[request.node.callspec.id]], [] - ) +def test_outputs(request, template, num_outputs): test_schema = Schema(**schema()) + forecast, climatology = INPUTS[request.node.callspec.id] generated = list( - test_schema.outputs_from_inputs( - expanded_inputs, output_template={"type": out_type} - ) + test_schema.outputs_from_inputs(forecast, climatology, output_template=template) ) assert len(generated) == num_outputs def test_input_format(): - expanded_inputs = sum( - [list(expand(x, exclude=["levelist", "number"])) for x in INPUTS["sfc-pl"]], [] - ) input_schema = InputSchema(schema("inputs")) step_schema = StepSchema(schema("windows")) + dataset, _ = INPUTS["sfc-pl"] generated = list( input_schema.outputs( - expanded_inputs, step_schema, output_template={"type": "em"} + dataset, + step_schema=step_schema, + output_template={"stream": "enfo", "type": "em"}, + enable_cache=False, ) ) expected_outputs = [ @@ -464,110 +469,117 @@ def test_input_format(): for out, inputs in generated: assert out in expected_outputs for inp in inputs: - assert inp in expanded_inputs + selection, _ = definition_to_dataset(dataset).select(inp) + assert selection.n_leaves > 0 @pytest.mark.parametrize( "inputs, template, num_outputs", [ - [INPUTS["t850"], {"type": "em", "step": 120}, 1], + [INPUTS["t850"][0], {"stream": "enfo", "type": "em", "step": 120}, 1], [ - [ - { - "class": "od", - "stream": "oper", - "param": [ - "165", - "166", - "167", - "168", - "169", - "175", - "176", - "177", - "228021", - "47", - "228", - ], - "step": [2, 3], - "type": "fc", - "levtype": "sfc", - "time": "0000", - } - ], - {"type": "fc"}, + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "oper", + "param": [ + "165", + "166", + "167", + "168", + "169", + "175", + "176", + "177", + "228021", + "47", + "228", + ], + "step": [2, 3], + "type": "fc", + "levtype": "sfc", + "time": "0000", + } + ], + ), + {"stream": "oper", "type": "fc"}, 20, ], [ - [ - { - "class": "od", - "stream": "oper", - "param": ["228246", "228247"], - "type": "fc", - "levtype": "sfc", - "time": "0000", - "step": 3, - } - ], - {"type": "fc"}, + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "oper", + "param": ["228246", "228247"], + "type": "fc", + "levtype": "sfc", + "time": "0000", + "step": 3, + } + ], + ), + {"stream": "oper", "type": "fc"}, 0, ], [ - [ - { - "class": "od", - "stream": "oper", - "param": "129", - "type": "fc", - "levtype": "sfc", - "step": 3, - "time": "0000", - }, - { - "class": "od", - "stream": "enfo", - "param": "129", - "type": "pf", - "levtype": "sfc", - "number": list(range(1, 51)), - "step": 3, - "time": "0000", - }, - { - "class": "od", - "stream": "oper", - "param": "129", - "type": "fc", - "levtype": "pl", - "levelist": [50, 100], - "step": 3, - "time": "0000", - }, - { - "class": "od", - "stream": "enfo", - "param": "129", - "type": "pf", - "levtype": "pl", - "number": list(range(1, 51)), - "levelist": [50, 100], - "step": 3, - "time": "0000", - }, - ], - {"levtype": "pl", "levelist": 50, "type": "em"}, + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "oper", + "param": "129", + "type": "fc", + "levtype": "sfc", + "step": 3, + "time": "0000", + }, + { + "class": "od", + "stream": "enfo", + "param": "129", + "type": "pf", + "levtype": "sfc", + "number": list(range(1, 51)), + "step": 3, + "time": "0000", + }, + { + "class": "od", + "stream": "oper", + "param": "129", + "type": "fc", + "levtype": "pl", + "levelist": [50, 100], + "step": 3, + "time": "0000", + }, + { + "class": "od", + "stream": "enfo", + "param": "129", + "type": "pf", + "levtype": "pl", + "number": list(range(1, 51)), + "levelist": [50, 100], + "step": 3, + "time": "0000", + }, + ], + unperturbed={"stream": "oper", "type": "fc"}, + ), + {"stream": "enfo", "levtype": "pl", "levelist": 50, "type": "em"}, 1, ], ], ids=["redundant-steps", "redundant-params", "not-from-inputs", "levels"], ) def test_redundant_inputs(inputs, template, num_outputs): - expanded_inputs = sum([list(expand(x)) for x in inputs], []) input_schema = InputSchema(schema("inputs")) step_schema = StepSchema(schema("windows")) generated = list( - input_schema.outputs(expanded_inputs, step_schema, output_template=template) + input_schema.outputs(inputs, step_schema=step_schema, output_template=template) ) assert len(generated) == num_outputs @@ -577,13 +589,13 @@ def test_redundant_inputs(inputs, template, num_outputs): [ [0, {"type": "cf"}], [[0, 1], [{"type": "cf"}, {"type": "pf", "number": 1}]], - [1, {"type": "pf", "number": 1}], + [[1, 2], {"type": "pf", "number": [1, 2]}], ], ids=["cf", "cf-and-pf", "pf"], ) def test_fcstat_inputs(number, updates): input_schema = InputSchema(schema("inputs")) - step_schema = StepSchema(schema("windows")) + datasets = DatasetDefinitions(definitions=schema("datasets")) output = { "class": "od", "stream": "eefo", @@ -593,8 +605,9 @@ def test_fcstat_inputs(number, updates): "step": "0-168", "time": "0000", "levtype": "sfc", + "domain": "g", } - inputs = input_schema.inputs(output, step_schema) + inputs = input_schema.inputs(output, datasets.definition("eefo")) # type: ignore base_input = output.copy() base_input.pop("number") expected = update_request({**base_input, "step": list(range(6, 169, 6))}, updates) diff --git a/pproc-core/tests/ppcore/schema/test_schema.py b/pproc-core/tests/ppcore/schema/test_schema.py index 144906ae..bc7a8a30 100644 --- a/pproc-core/tests/ppcore/schema/test_schema.py +++ b/pproc-core/tests/ppcore/schema/test_schema.py @@ -11,11 +11,12 @@ import pytest from conftest import schema +from ppcore.schema.forecast import ForecastDefinition from ppcore.schema.schema import Schema @pytest.mark.parametrize( - "req, config, num_generated", + "req, dataset, config, num_generated", [ [ { @@ -29,7 +30,9 @@ "time": "0", "fcmonth": 1, "type": "fcmean", + "number": 0, }, + "seasonal", { "entrypoint": "pproc-monthly-stats", "name": "167_sfc", @@ -51,7 +54,7 @@ "time": "0000", "type": "fc", "step": list(range(6, 745, 6)), - "number": list(range(0, 51)), + "number": 0, }, ], "accumulations": { @@ -82,6 +85,7 @@ "type": "fcmean", "number": [0, 1, 2, 3], }, + "eefo", { "entrypoint": "pproc-accumulate", "name": "228_sfc", @@ -163,6 +167,7 @@ "type": "em", "target_grid": "O640", }, + "enfo", { "entrypoint": "pproc-ensms", "name": "130_pl", @@ -224,27 +229,31 @@ ], ids=["2t", "tp", "T"], ) -def test_schema_from_output(req, config, num_generated): +def test_schema_from_output(req, dataset, config, num_generated): test_schema = Schema(**schema()) - test_config = test_schema.config_from_output(req) + print("REQ", req) + test_config = test_schema.config_from_output(req, test_schema.definition(dataset)) # type: ignore test_config.pop("metadata", None) assert config == test_config generated = test_schema.config_from_input( - config["inputs"], {k: req[k] for k in ["stream", "type", "param"]} + ForecastDefinition( + datacubes=config["inputs"], + unperturbed={x: config["inputs"][0][x] for x in ["stream", "type"]}, + ), + output_template={x: req[x] for x in ["stream", "type"]}, # type: ignore ) assert len(list(generated)) == num_generated @pytest.mark.parametrize( - "entrypoint, req, num_expected, expected", + "inputs, out_template, num_expected, expected", [ [ - "pproc-accumulate", [ { "class": "od", - "stream": "enfo", + "stream": "oper", "expver": "0001", "levtype": "sfc", "domain": "g", @@ -252,12 +261,11 @@ def test_schema_from_output(req, config, num_generated): "date": "20241001", "time": "0", "step": list(range(0, 169, 6)), - "type": "pf", - "number": list(range(1, 11)), + "type": "fc", }, { "class": "od", - "stream": "oper", + "stream": "enfo", "expver": "0001", "levtype": "sfc", "domain": "g", @@ -265,10 +273,12 @@ def test_schema_from_output(req, config, num_generated): "date": "20241001", "time": "0", "step": list(range(0, 169, 6)), - "type": "fc", + "type": "pf", + "number": list(range(1, 11)), }, ], - 8, + {"stream": "enfo", "type": "fcmean"}, + 2, { "entrypoint": "pproc-accumulate", "name": "167_sfc", @@ -314,7 +324,6 @@ def test_schema_from_output(req, config, num_generated): }, ], [ - "pproc-monthly-stats", [ { "class": "od", @@ -330,7 +339,8 @@ def test_schema_from_output(req, config, num_generated): "type": "fc", } ], - 21, + {"stream": "msmm", "type": "fcmean"}, + 7, { "entrypoint": "pproc-monthly-stats", "name": "228_sfc", @@ -380,11 +390,10 @@ def test_schema_from_output(req, config, num_generated): }, ], [ - "pproc-ensms", [ { "class": "od", - "stream": "enfo", + "stream": "oper", "expver": "0001", "levtype": "pl", "levelist": [250, 850], @@ -393,12 +402,11 @@ def test_schema_from_output(req, config, num_generated): "date": "20241001", "time": "0", "step": [0, 6, 12, 18, 24], - "type": "pf", - "number": list(range(1, 51)), + "type": "fc", }, { "class": "od", - "stream": "oper", + "stream": "enfo", "expver": "0001", "levtype": "pl", "levelist": [250, 850], @@ -407,9 +415,11 @@ def test_schema_from_output(req, config, num_generated): "date": "20241001", "time": "0", "step": [0, 6, 12, 18, 24], - "type": "fc", + "type": "pf", + "number": list(range(1, 51)), }, ], + {"stream": "enfo", "type": ["em", "es"]}, 10, { "entrypoint": "pproc-ensms", @@ -469,9 +479,14 @@ def test_schema_from_output(req, config, num_generated): ], ids=["2t", "tp", "T"], ) -def test_schema_from_input(entrypoint, req, num_expected, expected): +def test_schema_from_input(inputs, out_template, num_expected, expected): test_schema = Schema(**schema()) - configs = list(test_schema.config_from_input(req, entrypoint=entrypoint)) + forecast = ForecastDefinition( + datacubes=inputs, unperturbed={x: inputs[0][x] for x in ["stream", "type"]} + ) + configs = list( + test_schema.config_from_input(forecast, output_template=out_template) + ) assert len(configs) == num_expected test_config = configs[0] test_config.pop("metadata", None) diff --git a/pproc-core/tests/ppcore/schema/test_step_schema.py b/pproc-core/tests/ppcore/schema/test_step_schema.py index 7ec0c736..c0abbadf 100644 --- a/pproc-core/tests/ppcore/schema/test_step_schema.py +++ b/pproc-core/tests/ppcore/schema/test_step_schema.py @@ -12,6 +12,7 @@ from ppcore.schema.step import StepSchema from ppcore.schema.step import StepType +from ppcore.schema.forecast import DatasetDefinitions, definition_to_dataset @pytest.mark.parametrize( @@ -52,36 +53,30 @@ def test_step_type(config, steps, expected): assert step_type.generate_steps(steps) == expected -def test_in_steps(): - test_schema = StepSchema(schema("windows")) - in_steps = test_schema.in_steps( - {"stream": "enfo", "type": "em", "param": "167", "time": "0000"} - ) - assert in_steps == ( - list(range(0, 91)) + list(range(93, 145, 3)) + list(range(150, 361, 6)) - ) - - @pytest.mark.parametrize( - "out, expected, in_steps", + "out, dataset, expected, in_steps", [ [ {"stream": "enfo", "type": "em", "param": "167", "time": "0000"}, + "enfo", list(range(0, 145, 3)) + list(range(150, 361, 6)), None, ], [ {"stream": "enfo", "type": "em", "param": "167", "time": "0000"}, + "enfo", list(range(0, 361, 12)), list(range(0, 361, 12)), ], [ {"stream": "enfo", "type": "cf", "param": "261001", "time": "0000"}, + "enfo", list(range(1, 91)) + list(range(93, 145, 3)) + list(range(150, 361, 6)), None, ], [ {"stream": "eefo", "type": "fcmean", "param": "167", "time": "0000"}, + "eefo", [f"{x}-{x+168}" for x in list(range(0, 1104 - 168 + 1, 24))], None, ], @@ -93,16 +88,19 @@ def test_in_steps(): "date": "20241001", "time": "0000", }, + "seasonal", list(range(1, 8)), None, ], [ {"stream": "enfo", "type": "ep", "param": "131064", "time": "0000"}, + "enfo", ["120-240", "240-360", "120-168", "168-240"], None, ], [ {"stream": "oper", "type": "fc", "param": "207", "time": "0000"}, + "enfo", list(range(1, 91)), list(range(1, 91)), ], @@ -117,7 +115,10 @@ def test_in_steps(): "fc", ], ) -def test_out_steps(out, expected, in_steps): +def test_out_steps(out, dataset, expected, in_steps): + datasets = DatasetDefinitions(definitions=schema("datasets")) test_schema = StepSchema(schema("windows")) + if in_steps is None: + in_steps = definition_to_dataset(datasets.definition(dataset)).steps(out) _, out_steps = test_schema.out_steps(out, in_steps) assert out_steps == expected diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index d2e7bdcb..59a3ab21 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -53,11 +53,7 @@ config: msmm: preprocessing: - operation: norm - "*": - forecast: - inputs: - request: - param: "{param}" + "*": {} "140249": filter:type: fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: @@ -2055,75 +2051,6 @@ config: deterministic_is_control: true compute_spread: true windows: - defs: - width6: - - type: range - width: 6 - interval: 3 - end: 144 - - type: range - width: 6 - interval: 6 - start: 144 - width12: - - type: range - width: 12 - interval: 3 - end: 144 - - type: range - width: 12 - interval: 6 - start: 144 - width24: - - type: range - width: 24 - interval: 3 - end: 144 - - type: range - width: 24 - interval: 6 - start: 144 - filter:stream: - oper/wave: - filter:time: - "0000/1200": &mr_steps - in_steps: - - from: 0 - to: 90 - by: 1 - - from: 90 - to: 144 - by: 3 - - from: 144 - to: 360 - by: 6 - "0600/1800": &bc_steps - in_steps: - - from: 0 - to: 90 - by: 1 - - from: 90 - to: 144 - by: 3 - enfo/waef: - filter:time: - "0000/1200": *mr_steps - "0600/1800": *bc_steps - eefo/weef/eefh/weeh/eehs: - in_steps: - - from: 0 - to: 1104 - by: 6 - msmm/swmm: - in_steps: - - from: 0 - to: 5160 - by: 6 - enfh/enwh/efhs/wehs: - in_steps: - - from: 0 - to: 360 - by: 6 filter:type: em/es/pb: filter:stream: @@ -2147,7 +2074,7 @@ windows: eefo/weef: type: instantaneous efhs/wehs/eehs: - out_steps: + out_steps: &efhs_em_steps type: instantaneous interval: 6 fc/cf/pf: @@ -2180,7 +2107,6 @@ windows: width: 72 end: 240 interval: 24 - end: 216 - type: range width: 120 end: 240 @@ -2252,17 +2178,15 @@ windows: filter:param: 131074/131075/131076/131077/131078/131079/131080/131081: out_steps: + - type: instantaneous + start: 12 + interval: 12 - type: range width: 120 start: 120 interval: 120 - "120-168" - "168-240" - 131074/131075/131076/131077/131078/131079/131080/131081: - out_steps: - type: instantaneous - start: 12 - interval: 12 efi/efic/sot: filter:stream: "eefo/weef": @@ -2286,7 +2210,6 @@ windows: end: 240 width: 72 interval: 24 - end: 216 - type: range start: 12 end: 240 @@ -2308,7 +2231,6 @@ windows: width: 72 end: 240 interval: 24 - end: 216 - type: range width: 120 end: 240 @@ -2348,24 +2270,7 @@ windows: efhs/wehs: filter:param: "*": - out_steps: - - type: range - width: 24 - interval: 12 - - type: range - width: 72 - end: 240 - interval: 12 - end: 216 - - type: range - width: 120 - end: 240 - interval: 12 - - "0-240" - - "0-360" - - "240-360" - "228004/228": - out_steps: + out_steps: &efhs_cd_steps - type: range width: 24 interval: 12 @@ -2373,14 +2278,10 @@ windows: width: 72 end: 240 interval: 12 - end: 216 - type: range width: 120 end: 240 interval: 12 - - type: range - width: 168 - interval: 24 - "0-240" - "0-360" - "240-360" @@ -2389,7 +2290,7 @@ windows: type: range width: 24 interval: 12 - eehs: + eehs: &eehs_cd_steps out_steps: type: range width: 168 @@ -2404,2360 +2305,1168 @@ windows: cm/cr: filter:stream: enfo: - in_steps: - - from: 0 - to: 360 - by: 12 out_steps: - "72-96" - "120-168" - "192-240" - "240-360" -inputs: - filter:stream: - oper: - filter:type: - fc/fcmean/fcstdev/fcmin/fcmax/pfc/gwt: - forecast: - inputs: - request: &oper_fc - stream: oper - type: fc +datasets: + enfo: + dataset_type: forecast + unperturbed: + type: fc + datacubes: + - class: od + stream: oper + type: fc + time: ["0000", "1200"] + step: &mr_steps + - from: 0 + to: 90 + by: 1 + - from: 93 + to: 144 + by: 3 + - from: 150 + to: 360 + by: 6 + domain: g + - class: od + stream: wave + type: fc + time: ["0000", "1200"] + step: *mr_steps + domain: g + - class: od + stream: enfo + type: pf + members: + start: 1 + end: 50 + time: ["0000", "1200"] + step: *mr_steps + domain: g + - class: od + stream: waef + type: pf + members: + start: 1 + end: 50 + time: ["0000", "1200"] + step: *mr_steps + domain: g + - class: od + stream: oper + type: fc + time: ["0600", "1800"] + step: &bc_steps + - from: 0 + to: 90 + by: 1 + - from: 93 + to: 144 + by: 3 + domain: g + - class: od + stream: wave + type: fc + time: ["0600", "1800"] + step: *bc_steps + domain: g + - class: od + stream: enfo + type: pf + members: + start: 1 + end: 50 + time: ["0600", "1800"] + step: *bc_steps + domain: g + - class: od + stream: waef + type: pf + members: + start: 1 + end: 50 + time: ["0600", "1800"] + step: *bc_steps + domain: g wave: + - stream: wave + - stream: waef + eefo: + dataset_type: forecast + unperturbed: + type: cf + datacubes: + - class: od + stream: eefo + type: cf + time: "0000" + levtype: sfc + step: &subs_steps + - from: 0 + to: 1104 + by: 6 + domain: g + - class: od + stream: weef + type: cf + time: "0000" + levtype: sfc + step: *subs_steps + domain: g + - class: od + stream: eefo + type: pf + time: "0000" + levtype: sfc + members: + start: 1 + end: 100 + step: *subs_steps + domain: g + - class: od + stream: weef + type: pf + time: "0000" + levtype: sfc + members: + start: 1 + end: 100 + step: *subs_steps + domain: g + wave: + - stream: weef + seasonal: + dataset_type: forecast + datacubes: + - class: od + stream: mmsf + type: fc + members: + start: 0 + end: 50 + step: &seas_steps + - from: 0 + to: 5160 + by: 6 + domain: g + - class: od + stream: wasf + type: fc + members: + start: 0 + end: 50 + step: *seas_steps + domain: g + wave: + - stream: wasf + enfh: + dataset_type: reforecast + unperturbed: + type: cf + datacubes: + - stream: enfh + type: cf + step: &mr_hind_steps + - from: 0 + to: 360 + by: 6 + - stream: enwh + type: cf + step: *mr_hind_steps + - stream: enfh + type: pf + members: + start: 1 + end: 10 + step: *mr_hind_steps + - stream: enwh + type: pf + members: + start: 1 + end: 10 + step: *mr_hind_steps + wave: + - stream: enwh + scheme: ecmwf-4days + eefh: + dataset_type: reforecast + unperturbed: + type: cf + datacubes: + - stream: eefh + type: cf + step: &subs_hind_steps + - from: 0 + to: 1104 + by: 6 + - stream: weeh + type: cf + step: *subs_hind_steps + - stream: eefh + type: pf + members: + start: 1 + end: 10 + step: *subs_hind_steps + - stream: weeh + type: pf + members: + start: 1 + end: 10 + step: *subs_hind_steps + wave: + - stream: weeh + scheme: ecmwf-2days + efhs-cd: + dataset_type: climatology + datacubes: + - stream: efhs + type: cd + quantile: 100 + step: *efhs_cd_steps + - stream: wehs + type: cd + quantile: 100 + step: *efhs_cd_steps + wave: + - stream: wehs + scheme: ecmwf-4days + eehs-cd: + dataset_type: climatology + datacubes: + - stream: efhs + type: cd + quantile: 100 + step: *eehs_cd_steps + scheme: ecmwf-4days + efhs-em: + dataset_type: climatology + datacubes: + - stream: efhs + type: em + step: *efhs_em_steps + - stream: efhs + type: es + step: *efhs_em_steps + scheme: ecmwf-4days +inputs: + fc_inputs: + select_to_override: true + filter:type: + fc/cf/pf: filter:type: - fc/fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: &wave_fc - stream: wave - type: fc - enfo: - filter:type: - "em/pb/efi/sot/ep": - forecast: - inputs: - - request: *oper_fc - - request: &enfo_pf - stream: enfo - type: "pf" - members: &enfo_members - start: 1 - end: 50 - "es": - filter:selection: + pf: + fc_inputs: + select: + type: pf + number: "{number}" + "*": + fc_inputs: + select: + type: "{type}" + filter:param: + "*": + fc_inputs: + select: + param: "{param}" + type: "{type}" + "10/131/132": + fc_inputs: + select: + param: ["138", "155"] + "207": + fc_inputs: + select: + param: ["165", "166"] + "260290": + filter:levtype: + "fl": + fc_inputs: + - select: + levtype: ml + levelist: [58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137] + param: 260290 + - select: + levtype: ml + levelist: 1 + param: 152 "*": - forecast: - inputs: - - request: *oper_fc - - request: *enfo_pf - members: *enfo_members - "clust-warmup-50r1-bc": - filter:time: - "0600/1800": - from_inputs: false - forecast: - inputs: - - request: - stream: scda - type: fc - - request: *enfo_pf - members: *enfo_members - cm/cr: - forecast: - inputs: - - request: - <<: *oper_fc - domain: "g" - target_grid: 1.5/1.5 - derive_step: - type: default - include_start: true - - request: - <<: *enfo_pf - domain: "g" - target_grid: 1.5/1.5 - derive_step: - type: default - include_start: true - members: *enfo_members - climatology: - inputs: - - request: - domain: "g" - stream: enfo - type: "es" - "efic": - forecast: - inputs: - request: *oper_fc - "pf/gwt": - forecast: - inputs: - request: *enfo_pf - members: *enfo_members - fcmean/fcstdev/fcmin/fcmax: - filter:members: - only_zero: - forecast: - inputs: - request: *oper_fc - no_zero: - forecast: - inputs: - request: *enfo_pf - members: *enfo_members - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *oper_fc - - request: *enfo_pf - members: *enfo_members - pfc: - forecast: - inputs: - request: - stream: enfo - type: fcmean - members: - start: 0 - end: 50 - climatology: - inputs: - request: - stream: "efhs" - time: "0000" - scheme: ecmwf-4days - waef: - filter:type: - em/es/pb/efi/sot/ep: - forecast: - inputs: - - request: *wave_fc - - request: &waef_pf - stream: waef - type: "pf" - members: *enfo_members - "efic": - forecast: - inputs: - request: *wave_fc - "pf": - forecast: - inputs: - request: *waef_pf - members: *enfo_members - fcmean/fcstdev/fcmin/fcmax: + fc_inputs: + select: + param: "{param}" + levtype: "{levtype}" + type: "{type}" + "261001": + fc_inputs: + - select: + param: ["169", "175", "176", "177", "228021", "47"] + derive: + step: + name: step_deaccumulate + - select: + param: ["165", "166", "167", "168"] + "261014": + fc_inputs: + - select: + param: ["169", "175", "176", "177", "228021", "47"] + derive: + step: + name: step_deaccumulate + - select: + param: ["165", "166", "167", "168"] + "261015": + fc_inputs: + - select: + param: ["169", "175", "176", "177", "228021", "47"] + derive: + step: + name: step_deaccumulate + - select: + param: ["165", "166", "167", "168"] + "260004": + fc_inputs: + select: + param: ["167", "168"] + "260242": + fc_inputs: + select: + param: ["167", "168"] + "261016": + fc_inputs: + select: + param: ["167", "168"] + "260005": + fc_inputs: + select: + param: ["165", "166", "167"] + "260255": + fc_inputs: + select: + param: ["165", "166", "167", "168"] + "261018": + fc_inputs: + select: + param: ["165", "166", "167", "168"] + "261002": + fc_inputs: + - select: + param: ["47", "228021", "169", "175", "176", "177"] + derive: + step: + name: step_deaccumulate + - select: + param: "167" # Required for metadata of cossza + "261023": + fc_inputs: + select: + param: ["167", "168"] + fcmean: + filter:stream: + enfo/waef/eefo/weef: filter:members: only_zero: - forecast: - inputs: - request: *wave_fc + fc_inputs: + select: + type: unperturbed no_zero: - forecast: - inputs: - request: *waef_pf - members: *enfo_members + fc_inputs: + select: + type: perturbed + number: "{number}" contains_zero: from_inputs: false - forecast: - inputs: - - request: *wave_fc - - request: *waef_pf - members: *enfo_members - climatology: - inputs: - request: - stream: "wehs" - time: "0000" - scheme: ecmwf-4days - eefo: - filter:type: - "em/es/pb": - forecast: - inputs: - - request: &eefo_cf - stream: eefo - type: "cf" - - request: &eefo_pf - stream: eefo - type: "pf" - members: &eefo_members - start: 1 - end: 100 - "cf": - forecast: - inputs: - request: *eefo_cf - "pf": - forecast: - inputs: - request: *eefo_pf - members: *eefo_members - fcmean/fcstdev/fcmin/fcmax: + fc_inputs: + - select: + type: unperturbed + - select: + type: perturbed + number: "{number}" filter:param: - "*": - filter:members: - only_zero: - forecast: - inputs: - request: *eefo_cf - no_zero: - forecast: - inputs: - request: *eefo_pf - members: *eefo_members - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *eefo_cf - - request: *eefo_pf - members: *eefo_members - 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: - filter:type: - fcmean: - forecast: - inputs: - request: - stream: eefo - type: fcmean - members: - start: 0 - end: 100 - "efi/sot/taem/taes": - forecast: - inputs: - - request: - stream: eefo - type: fcmean - members: - start: 0 - end: 100 - derive_step: - type: precomputed - climatology: - inputs: - request: - stream: "eehs" - time: "0000" - scheme: ecmwf-2days - weef: - filter:type: - "em/es/pb": - forecast: - inputs: - - request: &weef_cf - stream: weef - type: "cf" - - request: &weef_pf - stream: weef - type: "pf" - members: *eefo_members - "cf": - forecast: - inputs: - request: *weef_cf - "pf": - forecast: - inputs: - request: *weef_pf - members: *eefo_members - fcmean/fcstdev/fcmin/fcmax: - filter:members: - only_zero: - forecast: - inputs: - request: *weef_cf - no_zero: - forecast: - inputs: - request: *weef_pf - members: *eefo_members - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *weef_cf - - request: *weef_pf - members: *eefo_members - "efi/efic/sot/taem/taes": - forecast: - inputs: - - request: - stream: weef - type: fcmean - members: - start: 0 - end: 100 - derive_step: - type: precomputed - climatology: - inputs: - request: - stream: "wees" - time: "0000" - scheme: ecmwf-2days - msmm: - filter:type: - "fcmean/fcstdev/fcmin/fcmax": - forecast: - inputs: - request: - stream: mmsf - type: "fc" - members: - start: 0 - end: 50 - swmm: - filter:type: - "fcmean/fcstdev/fcmin/fcmax": - forecast: - inputs: - request: - stream: wasf - type: "fc" - members: - start: 0 - end: 50 - enfh: - filter:type: - "fcmean/fcstdev/fcmax/fcmin": - filter:members: - only_zero: - forecast: - inputs: - request: &enfh_cf - stream: enfh - type: "cf" - time: "0000" - scheme: &enfh_scheme ecmwf-4days - no_zero: - forecast: - inputs: - request: &enfh_pf - stream: enfh - type: "pf" - time: "0000" - members: &enfh_members - start: 1 - end: 10 - scheme: *enfh_scheme - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *enfh_cf - - request: *enfh_pf - members: *enfh_members - scheme: *enfh_scheme - enwh: - filter:type: - "fcmean/fcstdev/fcmax/fcmin": - filter:members: - only_zero: - forecast: - inputs: - request: &enwh_cf - stream: enwh - type: "cf" - time: "0000" - scheme: *enfh_scheme - no_zero: - forecast: - inputs: - request: &enwh_pf - stream: enwh - type: "pf" - time: "0000" - members: *enfh_members - scheme: *enfh_scheme - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *enwh_cf - - request: *enwh_pf - members: *enfh_members - scheme: *enfh_scheme - eefh: - filter:type: - "fcmean/fcstdev/fcmax/fcmin": - filter:members: - only_zero: - forecast: - inputs: - request: &eefh_cf - stream: eefh - type: "cf" - time: "0000" - scheme: &eefh_scheme ecmwf-2days - no_zero: - forecast: - inputs: - request: &eefh_pf - stream: eefh - type: "pf" - time: "0000" - members: &eefh_members - start: 1 - end: 10 - scheme: *eefh_scheme - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *eefh_cf - - request: *eefh_pf - members: *eefh_members - scheme: *eefh_scheme - weeh: + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": + fc_inputs: + select: + param: "{param}" + derive: + step: + name: step_default + 40/41/42/170/140229/140231/140232/140233/140245: + fc_inputs: + select: + param: "{param}" + derive: + step: + name: step_default + by: 24 + "172228": + fc_inputs: + select: + param: "228" + derive: + step: + name: step_default + include_start: true + by: 24 + 1/2/3/54/60/129/130/131/132/133/138/155/203: + fc_inputs: + select: + param: "{param}" + derive: + step: + name: step_default + by: 12 + msmm/swmm: + fc_inputs: + select: + number: "{number}" + filter:param: + "34/139/151/164/165/166/167/168/168/229/230": + fc_inputs: + select: + param: "{param}" + derive: + step: + name: step_monthly + 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: + fc_inputs: + select: + param: "{param}" + derive: + step: + name: step_monthly + by: 24 + "207": + fc_inputs: + select: + param: ["165", "166"] + derive: + step: + name: step_monthly + "172228": + fc_inputs: + select: + param: "228" + derive: + step: + name: step_monthly + include_start: true + allow_missing_zero: true + by: 24 + 129/130/133/138/155/203: + fc_inputs: + select: + param: "{param}" + derive: + step: + name: step_monthly + by: 12 + efi/efic/sot: filter:type: - "fcmean/fcstdev/fcmax/fcmin": - filter:members: - only_zero: - forecast: - inputs: - request: &weeh_cf - stream: weeh - type: "cf" - time: "0000" - scheme: *eefh_scheme - no_zero: - forecast: - inputs: - request: &weeh_pf - stream: weeh - type: "pf" - time: "0000" - members: *eefh_members - scheme: *eefh_scheme - contains_zero: - from_inputs: false - forecast: - inputs: - - request: *weeh_cf - - request: *weeh_pf - members: *eefh_members - scheme: *eefh_scheme - efhs: - forecast: - inputs: - - request: - stream: enfh - type: "cf" + efic: + fc_inputs: + select: + type: unperturbed + efi/sot: {} + filter:param: + "132044": + fc_inputs: + select: + param: ["228036", "228035"] + clim_inputs: + select: + param: "228044" + type: cd time: "0000" - - request: - stream: enfh - type: "pf" + filter:stream: + eefo: + clim_inputs: + derive: + date: + name: clim_date + option: nearest + step: + name: clim_step_range + enfo: + fc_inputs: + derive: + step: + name: step_default + by: 6 + clim_inputs: + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range + "132045": + fc_inputs: + select: + param: ["162071", "162072"] + clim_inputs: + select: + param: "162045" + type: cd time: "0000" - members: &efhs_members - start: 1 - end: 10 - scheme: *enfh_scheme - wehs: - forecast: - inputs: - - request: - stream: enwh - type: "cf" + filter:stream: + eefo: + clim_inputs: + derive: + date: + name: clim_date + option: nearest + step: + name: clim_step_range + enfo: + fc_inputs: + derive: + step: + name: step_default + by: 6 + clim_inputs: + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range + "132049": + fc_inputs: + select: + param: "123" + clim_inputs: + select: + param: "49" + type: cd time: "0000" - - request: - stream: enwh - type: "pf" + filter:stream: + eefo: + clim_inputs: + derive: + date: + name: clim_date + option: nearest + step: + name: clim_step_range + enfo: + fc_inputs: + derive: + step: + name: step_default + by: 6 + clim_inputs: + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range + "132059": + fc_inputs: + select: + param: "228035" + clim_inputs: + select: + param: "59" + type: cd time: "0000" - members: *efhs_members - scheme: *enfh_scheme - eehs: - forecast: - inputs: - - request: - stream: eefh - type: cf + filter:stream: + eefo: + clim_inputs: + derive: + date: + name: clim_date + option: nearest + step: + name: clim_step_range + enfo: + fc_inputs: + derive: + step: + name: step_default + by: 6 + clim_inputs: + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range + "132144": + fc_inputs: + select: + param: "144" + clim_inputs: + select: + param: "144" + type: cd time: "0000" - - request: - stream: eefh - type: pf + filter:stream: + eefo: + clim_inputs: + derive: + date: + name: clim_date + option: nearest + step: + name: clim_step_range + enfo: + fc_inputs: + derive: + step: + name: step_deaccumulate + clim_inputs: + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range + "132165": + fc_inputs: + select: + param: "207" + clim_inputs: + select: + param: "228005" + type: cd time: "0000" - members: - start: 1 - end: 10 - scheme: *eefh_scheme - filter:param: - "*": - filter:type: - "fc/cf/pf": - from_inputs: False - filter:levtype: - "fl": - forecast: - inputs: - - request: - levtype: ml - levelist: [58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137] - param: "{param}" - - request: - levtype: ml - levelist: 1 - param: 152 - "*": - forecast: - inputs: - request: - param: "{param}" - "em/es/pb/cd/fcmean/fcstdev/fcmin/fcmax/taem/taes/cm/cr": - forecast: - inputs: - request: - param: "{param}" - "ep": - filter:selection: - eccharts: - from_inputs: false - forecast: - inputs: - request: - param: "{param}" - "10": - filter:type: - fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: ["138", "155"] - "131/132": - filter:type: - fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: - filter:levtype: - pl: - forecast: - inputs: - request: - param: ["138", "155"] - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "121/122/123": - forecast: - inputs: - request: - param: "{param}" - filter:type: - em/es/pb: - forecast: - inputs: - derive_step: - type: default - by: 6 - "*": - from_inputs: false - "228": - filter:type: - "pfc/gwt": - from_inputs: false - "fc/cf/pf/fcmean": - from_inputs: False - forecast: - inputs: - request: - param: "{param}" - "em/es/pb/cd": - forecast: - inputs: - request: - param: "{param}" - "228026/228027": - filter:type: - em/es/pb: - forecast: - inputs: - request: - param: "{param}" - derive_step: - type: default - by: 3 - 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: - filter:type: - ep: - filter:param: - 131020/131021: - forecast: - inputs: - request: - param: "130" - derive_step: - type: default - include_start: true - by: 6 - "*": - forecast: - inputs: - request: - param: "130" - derive_step: - type: default + filter:stream: + eefo: + clim_inputs: + derive: + date: + name: clim_date + option: nearest + step: + name: clim_step_range + enfo: + fc_inputs: + derive: + step: + name: step_default by: 6 - climatology: - required: true - inputs: - - request: - param: "130" - type: "em" - derive_date: - option: previous - strict: False - derive_step: - type: instantaneous - - request: - param: "130" - type: "es" - derive_date: - option: previous - strict: False - derive_step: - type: instantaneous - 131060/131061/131062/131063/131064/131065/131066/131067/131098/131099/131085: - filter:type: - ep: - forecast: - inputs: - request: - param: "228" - derive_step: - type: deaccumulate - "131068/131069": - filter:type: - ep: - forecast: - inputs: - request: - param: ["165", "166"] - 131070/131071/131072/131100: - filter:type: - ep: - forecast: - inputs: - request: - param: "123" - derive_step: - type: default - by: 6 - "131073": - filter:type: - ep: - filter:steptype: - instantaneous: - forecast: - inputs: - request: - param: "167" - range: - forecast: - inputs: - request: - param: "122" - derive_step: - type: default + clim_inputs: + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range + "132167": + fc_inputs: + select: + param: "167" + clim_inputs: + select: + param: "228004" + type: cd + time: "0000" + filter:stream: + eefo: + clim_inputs: + derive: + date: + name: clim_date + option: nearest + step: + name: clim_step_range + enfo: + fc_inputs: + derive: + step: + name: step_default by: 6 - 131074/131075/131076/131077: - filter:type: - ep: - forecast: - inputs: - request: - param: "140229" - 131078/131079/131080/131081: - filter:type: - ep: - forecast: - inputs: - request: - param: "140232" - "132044": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: ["228036", "228035"] - climatology: - inputs: - request: - param: "228044" - "132045": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: ["162071", "162072"] - climatology: - inputs: - request: - param: "162045" - "132049": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "123" - climatology: - inputs: - request: - param: "49" - "132059": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "228035" - climatology: - inputs: - request: - param: "59" - "132144": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "144" - climatology: - inputs: - request: - param: "144" - "132165": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "207" - climatology: - inputs: - request: - param: "228005" - "132167": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "167" - climatology: - inputs: - request: - param: "228004" - "132201": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "121" - climatology: - inputs: - request: - param: "201" - "132202": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "122" - climatology: - inputs: - request: - param: "202" - "132216": - filter:type: - efi/efic/sot: - forecast: - inputs: - request: - param: "140229" - climatology: - inputs: - request: - param: "140200" - "132228": - filter:type: - efi/efic/sot: + clim_inputs: + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range + "132201": + fc_inputs: + select: + param: "121" + clim_inputs: + select: + param: "201" + type: cd + time: "0000" filter:stream: eefo: - forecast: - inputs: - request: - param: "172228" - climatology: - inputs: - request: - param: "228" + clim_inputs: + derive: + date: + name: clim_date + option: nearest + step: + name: clim_step_range enfo: - forecast: - inputs: - request: - param: "228" - climatology: - inputs: - request: - param: "228" - "171001": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "1" - climatology: - inputs: - request: - param: "1" - "171002": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "2" - climatology: - inputs: - request: - param: "2" - "171006": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "228246" - climatology: - inputs: - request: - param: "228246" - "171007": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "228247" - climatology: - inputs: - request: - param: "228247" - "171033": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "33" - climatology: - inputs: - request: - param: "33" - "171034": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "34" - climatology: - inputs: - request: - param: "34" - "171078": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "78" - climatology: - inputs: - request: - param: "78" - "171079": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "79" - climatology: - inputs: - request: - param: "79" - "171121": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "121" - climatology: - inputs: - request: - param: "121" - "171122": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "122" - climatology: - inputs: - request: - param: "122" - "171129": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "129" - climatology: - inputs: - request: - param: "129" - "171130": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "130" - climatology: - inputs: - request: - param: "130" - "171131": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "131" - climatology: - inputs: - request: - param: "131" - "171132": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "132" - climatology: - inputs: - request: - param: "132" - "171133": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "133" - climatology: - inputs: - request: - param: "133" - "171136": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "136" - climatology: - inputs: - request: - param: "136" - "171137": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "137" - climatology: - inputs: - request: - param: "137" - "171139": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "139" - climatology: - inputs: - request: - param: "139" - "171141": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "141" - climatology: - inputs: - request: - param: "141" - "171151": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "151" - climatology: - inputs: - request: - param: "151" - "171164": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "164" - climatology: - inputs: - request: - param: "164" - "171165": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "165" - climatology: - inputs: - request: - param: "165" - "171166": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "166" - climatology: - inputs: - request: - param: "166" - "171167": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "167" - climatology: - inputs: - request: - param: "167" - "171168": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "168" - climatology: - inputs: - request: - param: "168" - "171201": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "201" - climatology: - inputs: - request: - param: "201" - "171202": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "202" - climatology: - inputs: - request: - param: "202" - "173142": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "172142" - climatology: - inputs: - request: - param: "172142" - "173143": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "172143" - climatology: - inputs: - request: - param: "172143" - "173144": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "172144" - climatology: - inputs: - request: - param: "172144" - "173189": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "172189" - climatology: - inputs: - request: - param: "172189" - "173228": - filter:type: - taem/fcmean: - forecast: - inputs: - request: - param: "172228" - climatology: - inputs: - request: - param: "172228" - "172008": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "8" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172009": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "9" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172142": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "142" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172143": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "143" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172144": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "144" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172146": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "146" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172147": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "147" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172169": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "169" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172175": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "175" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172176": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "176" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172177": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "177" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172178": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "178" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172179": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "179" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172180": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "180" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172181": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "181" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172182": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "182" - "172189": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "189" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172205": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "205" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172212": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "212" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "172228": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "228" - taem/taes: - forecast: - inputs: - request: - param: "{param}" - "200142": - filter:type: - fc/cf/pf/em/es/pb: - forecast: - inputs: - request: - param: "142" - derive_step: - type: deaccumulate - "200143": - filter:type: - fc/cf/pf/em/es/pb: - forecast: - inputs: - request: - param: "143" - derive_step: - type: deaccumulate - "200144": - filter:type: - fc/cf/pf/em/es/pb: - forecast: - inputs: - request: - param: "144" - derive_step: - type: deaccumulate - "200189": - filter:type: - fc/cf/pf/em/es/pb: - forecast: - inputs: - request: - param: "189" - derive_step: - type: deaccumulate - "200228": - filter:type: - fc/cf/pf/em/es/pb: - forecast: - inputs: - request: - param: "228" - derive_step: - type: deaccumulate - "228216": - filter:type: - fc/cf/pf/em/es/pb: - forecast: - inputs: - request: - param: "228216" - derive_step: - type: deaccumulate - "201": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "121" - cd/em/es: # This case is handled below - filter:stream: - efhs/eehs: {} - pfc/gwt: - from_inputs: false - taem/taes: - filter:stream: - efhs/eehs/eefo: - forecast: - inputs: - request: - param: "{param}" - "202": - filter:type: - fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: "122" - pfc/gwt: - from_inputs: false - cd/em/es: + fc_inputs: + derive: + step: + name: step_default + by: 6 + clim_inputs: + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range + "132202": + fc_inputs: + select: + param: "122" + clim_inputs: + select: + param: "202" + type: cd + time: "0000" filter:stream: - efhs/eehs: {} - taem/taes: + eefo: + clim_inputs: + derive: + date: + name: clim_date + option: nearest + step: + name: clim_step_range + enfo: + fc_inputs: + derive: + step: + name: step_default + by: 6 + clim_inputs: + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range + "132216": + fc_inputs: + select: + param: "140229" + clim_inputs: + select: + param: "140200" + type: cd + time: "0000" filter:stream: - efhs/eehs/eefo: - forecast: - inputs: - request: - param: "{param}" - "140249": - from_inputs: false - filter:type: - fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: - forecast: - inputs: - request: - param: ["165", "166"] - cd: {} - "207": - filter:stream: - msmm: - forecast: - inputs: - request: - param: ["165", "166"] - "*": - forecast: - inputs: - request: - param: "{param}" - "234167": - filter:type: - taem: - forecast: - inputs: - request: - param: "171167" - climatology: - inputs: - request: - param: "167.128" - "234139": - filter:type: - taem: - forecast: - inputs: - request: - param: "171139" - climatology: - inputs: - request: - param: "139.128" - "234151": - filter:type: - taem: - forecast: - inputs: - request: - param: "171151" - climatology: - inputs: - request: - param: "151.128" - "234228": - filter:type: - taem: - forecast: - inputs: - request: - param: "173228" - climatology: - inputs: - request: - param: "228.172" - "235117": - filter:type: - fcmean: - forecast: - inputs: - request: - param: "228235" - taem/taes: - forecast: - inputs: - request: - param: "235117" - "237117": - filter:type: - fcmax: - forecast: - inputs: - request: - param: "228235" - "238117": - filter:type: - fcmin: - forecast: - inputs: - request: - param: "228235" - "239117": - filter:type: - fcstdev: - forecast: - inputs: - request: - param: "228235" - "260033": - from_inputs: false - forecast: - inputs: - request: - param: ["228220", "228218"] - "260053": - from_inputs: false - forecast: - inputs: - request: - param: ["228220", "228221"] - "261001": - filter:type: - cf/pf/fc: - forecast: - inputs: - - request: - param: ["169", "175", "176", "177", "228021", "47"] - derive_step: - type: deaccumulate - - request: - param: ["165", "166", "167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261001" - "261014": - filter:type: - cf/pf/fc: - forecast: - inputs: - - request: - param: ["169", "175", "176", "177", "228021", "47"] - derive_step: - type: deaccumulate - - request: - param: ["165", "166", "167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261014" - "261015": - filter:type: - cf/pf/fc: - forecast: - inputs: - - request: - param: ["169", "175", "176", "177", "228021", "47"] - derive_step: - type: deaccumulate - - request: - param: ["165", "166", "167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261015" - "260004": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "260004" - "260242": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "260242" - "261016": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261016" - "260005": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["165", "166", "167"] - "em/es/pb": - forecast: - inputs: - request: - param: "260005" - "260255": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["165", "166", "167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "260255" - "261018": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["165", "166", "167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261018" - "261002": - filter:type: - cf/pf/fc: - forecast: - inputs: - - request: - param: ["47", "228021", "169", "175", "176", "177"] - derive_step: - type: deaccumulate - - request: - param: "167" # Required for metadata of cossza - "em/es/pb": - forecast: - inputs: - request: - param: "261002" - "261023": - filter:type: - cf/pf/fc: - forecast: - inputs: - request: - param: ["167", "168"] - "em/es/pb": - forecast: - inputs: - request: - param: "261023" - filter:type: - fcmean: - filter:stream: - enfo/waef/eefo/weef: - filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": - forecast: - inputs: - derive_step: - type: default - 40/41/42/170/140229/140231/140232/140233/140245: - forecast: - inputs: - derive_step: - type: default - by: 24 - 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: - forecast: - inputs: - derive_step: - type: default - include_start: true - by: 24 - 1/2/3/54/60/129/130/131/132/133/138/155/203: - forecast: - inputs: - derive_step: - type: default - by: 12 - 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: - forecast: - inputs: - derive_step: - type: precomputed - climatology: - inputs: - request: - type: taem - derive_date: - - option: nearest - - option: bracket - num: 2 - strict: False - derive_step: - type: range - required: true - enfh/enwh/eefh/weeh: - filter:selection: - mclimate: - from_inputs: false - forecast: - inputs: - derive_step: - type: default - filter:type: - fcmean: - filter:param: - "162071": - forecast: - inputs: - request: - param: ["162071", "162072"] - "207": - forecast: - inputs: - request: - param: ["165", "166"] - "59": - forecast: - inputs: - request: - param: "228035" - "228044": - forecast: - inputs: - request: - param: ["228036", "228035"] - "167/228/144": - filter:steplength: - "*": - filter:param: - "228/144": - forecast: - inputs: - derive_step: - type: deaccumulate - "*": {} - "168": - forecast: - inputs: - - request: - type: fcmean - members: - start: 0 - end: 0 - derive_step: - type: precomputed - - request: - type: fcmean - derive_step: - type: precomputed - filter:param: - "228": - forecast: - inputs: - request: - param: "172228" - "167": - forecast: - inputs: - request: - param: "167" - "*": {} - "*": - filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": - forecast: - inputs: - derive_step: - type: default - 40/41/42/170/140229/140231/140232/140233/140245: - forecast: - inputs: - derive_step: - type: default - by: 24 - 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: - forecast: - inputs: - derive_step: - type: default - include_start: true - by: 24 - 1/2/3/54/60/129/130/131/132/133/138/155/203: - forecast: - inputs: - derive_step: - type: default - by: 12 - msmm/swmm: - filter:param: - "34/139/151/164/165/166/167/168/168/207/229/230": - forecast: - inputs: - derive_step: - type: monthly - 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: - forecast: - inputs: - derive_step: - type: monthly - by: 24 - 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: - forecast: - inputs: - derive_step: - type: monthly - include_start: true - allow_missing_zero: true - by: 24 - 129/130/133/138/155/203: - forecast: - inputs: - derive_step: - type: monthly - by: 12 - fcstdev/fcmax/fcmin: - filter:stream: - enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: - filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": - forecast: - inputs: - derive_step: - type: default - 40/41/42/170/140229/140231/140232/140233/140245: - forecast: - inputs: - derive_step: - type: default - by: 24 - 172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212: - forecast: - inputs: - derive_step: - type: default - include_start: true - by: 24 - 172142/172143/172144/172228: - filter:type: - fcmin: - from_inputs: false - "*": {} - forecast: - inputs: - derive_step: - type: default - include_start: true - by: 24 - 1/2/3/54/60/129/130/131/132/133/138/155/203: - from_inputs: false - forecast: - inputs: - derive_step: - type: default - by: 12 - msmm/swmm: - filter:param: - "34/139/151/164/165/166/167/168/168/207/229/230": - forecast: - inputs: - derive_step: - type: monthly - 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: - forecast: - inputs: - derive_step: - type: monthly - by: 24 - 172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212: - forecast: - inputs: - derive_step: - type: monthly - include_start: true - allow_missing_zero: true - by: 24 - 172142/172143/172144/172228: - filter:type: - fcmin: - from_inputs: false - "*": {} - forecast: - inputs: - derive_step: - type: monthly - include_start: true - allow_missing_zero: true - by: 24 - 133/203: - forecast: - inputs: - derive_step: - type: monthly - by: 12 - 129/130/138/155: - from_inputs: false - forecast: - inputs: - derive_step: - type: monthly - by: 12 - efi/efic/sot: - filter:stream: - "eefo/weef": - filter:param: - 132044/132049/132059/132144/132045/132165/132167/132201/132202/132216/132228: - climatology: - required: true - inputs: - request: - type: cd - derive_date: + eefo: + clim_inputs: + derive: + date: + name: clim_date option: nearest - derive_step: - type: range - "enfo/waef": - climatology: - required: true - inputs: - request: - type: cd - derive_date: - - option: next - sequence: - type: daily - - option: previous - strict: false - derive_step: - type: range - filter:param: - "132044/132049/132059/132045/132165/132167/132201/132202/132216": - forecast: - inputs: - derive_step: - type: default + step: + name: clim_step_range + enfo: + fc_inputs: + derive: + step: + name: step_default by: 6 - 132228/132144: - forecast: - inputs: - derive_step: - type: deaccumulate + clim_inputs: + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range + "132228": + filter:stream: + eefo: + fc_inputs: + select: + param: "172228" + clim_inputs: + select: + param: "228" + type: cd + time: "0000" + derive: + date: + name: clim_date + option: nearest + step: + name: clim_step_range + enfo: + fc_inputs: + select: + param: "228" + derive: + step: + name: step_deaccumulate + clim_inputs: + select: + param: "228" + derive: + date: + - name: clim_date + option: next + sequence: + type: daily + - name: clim_date + option: previous + strict: false + step: + name: clim_step_range taem/taes: + fc_inputs: + select: + ensemble: True filter:stream: eefo: filter:param: "*": {} 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: - forecast: - inputs: - derive_step: - type: precomputed - climatology: - inputs: - request: - type: taem - derive_date: - - option: nearest - - option: bracket + fc_inputs: + derive: + step: + name: step_precomputed + clim_inputs: + select: + type: taem + derive: + date: + - name: clim_date + option: nearest + - name: clim_date + option: bracket num: 2 strict: False - derive_step: - type: range - required: true + step: + name: clim_step_range 234167/234139/234151/234228: - forecast: - inputs: - derive_step: - type: precomputed - climatology: - inputs: - - request: - stream: eefh - type: fcmean - members: - start: 0 - end: 10 - derive_date: - - option: nearest - - option: bracket + fc_inputs: + derive: + step: + name: step_precomputed + clim_inputs: + - select: + type: fcmean + ensemble: True + derive: + date: + - name: clim_date + option: nearest + - name: clim_date + option: bracket num: 1 strict: False - derive_step: - type: range - - request: - type: taem - derive_date: - - option: nearest - - option: bracket + step: + name: clim_step_range + - select: + type: taem + derive: + date: + - name: clim_date + option: nearest + - name: clim_date + option: bracket num: 1 strict: False - derive_step: - type: range - required: true + step: + name: clim_step_range efhs/wehs/eehs: - forecast: - inputs: - - request: - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - derive_hdate: - rstart: -20 - rend: 0 - recurrence: "yearly" - include_endpoint: false - - request: - type: "fcmean" - derive_step: - type: precomputed - derive_hdate: - rstart: -20 - rend: 0 - recurrence: "yearly" - include_endpoint: false + fc_inputs: + select: + type: "fcmean" + derive: + step: + name: step_precomputed + hdate: + name: hindcast_dates + rstart: -20 + rend: 0 + recurrence: "yearly" + include_endpoint: false cd: filter:stream: efhs/eehs: from_inputs: false - forecast: - inputs: - - request: - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - - request: - type: "fcmean" - derive_step: - type: precomputed + fc_inputs: + - select: + type: "fcmean" + derive: + step: + name: step_precomputed filter:steplength: "*": filter:stream: efhs: - forecast: - inputs: - derive_date: - - option: bracket - num: 4 - strict: False + fc_inputs: + derive: + date: + name: clim_date + option: bracket + num: 4 + strict: False "168": - forecast: - inputs: - derive_date: - - option: bracket - num: 2 - strict: False + fc_inputs: + derive: + date: + name: clim_date + option: bracket + num: 2 + strict: False filter:param: "228004": - forecast: - inputs: - request: - param: "167.128" + fc_inputs: + select: + param: "167.128" "49": - forecast: - inputs: - request: - param: "123.128" + fc_inputs: + select: + param: "123.128" "228005": - forecast: - inputs: - request: - param: "207.128" + fc_inputs: + select: + param: "207.128" "201": - forecast: - inputs: - request: - param: "121.128" + fc_inputs: + select: + param: "121.128" "202": - forecast: - inputs: - request: - param: "122.128" + fc_inputs: + select: + param: "122.128" "162045": - forecast: - inputs: - request: - param: "71.162" + fc_inputs: + select: + param: "71.162" "228006": - forecast: - inputs: - request: - param: "164.128" + fc_inputs: + select: + param: "164.128" "228": - forecast: - inputs: - request: - param: "228.128" + fc_inputs: + select: + param: "228.128" "144": - forecast: - inputs: - request: - param: "144.128" + fc_inputs: + select: + param: "144.128" "59": - forecast: - inputs: - request: - param: "59.128" + fc_inputs: + select: + param: "59.128" "228044": - forecast: - inputs: - request: - param: "44.228" + fc_inputs: + select: + param: "44.228" "140249": - forecast: - inputs: - request: - param: "249.140" + fc_inputs: + select: + param: "249.140" + override: members: null "wehs": from_inputs: false - forecast: - inputs: - - request: - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - - request: - type: "fcmean" - derive_step: - type: precomputed + fc_inputs: + - select: + type: "fcmean" + derive: + step: + type: step_precomputed filter:steplength: "*": - forecast: - inputs: - derive_date: - - option: bracket + fc_inputs: + derive: + date: + - name: clim_date + option: bracket num: 4 strict: False "168": - forecast: - inputs: - derive_date: - - option: bracket + fc_inputs: + derive: + date: + - name: clim_date + option: bracket num: 2 strict: False filter:param: "140200": - forecast: - inputs: - request: - param: "229.140" + fc_inputs: + select: + param: "229.140" em/es: + fc_inputs: + select: + ensemble: true filter:stream: - enfo/waef: {} + enfo/waef: + filter:param: + "121/122/123": + fc_inputs: + select: + param: "{param}" + derive: + step: + name: step_default + by: 6 + "228026/228027": + fc_inputs: + select: + param: "{param}" + derive: + step: + name: step_default + by: 3 + "200228": + fc_inputs: + select: + param: ["228"] + derive: + step: + name: step_deaccumulate + "*": {} eefo/weef: filter:steplength: "168": - forecast: - inputs: - - request: - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - - request: - type: "fcmean" - derive_step: - type: precomputed + fc_inputs: + select: + type: fcmean + derive: + step: + name: step_precomputed "*": {} efhs/eehs: filter:steptype: range: from_inputs: false - forecast: - inputs: - - request: - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - - request: - type: "fcmean" - derive_step: - type: precomputed + fc_inputs: + select: + type: fcmean + derive: + step: + name: step_precomputed filter:steplength: "*": filter:stream: efhs: - forecast: - inputs: - derive_date: - - option: bracket - num: 4 - strict: False + fc_inputs: + derive: + date: + name: clim_date + option: bracket + num: 4 + strict: False "168": - forecast: - inputs: - derive_date: - - option: bracket - num: 2 - strict: False + fc_inputs: + derive: + date: + name: clim_date + option: bracket + num: 4 + strict: False filter:param: "228004": - forecast: - inputs: - request: - param: "167.128" + fc_inputs: + select: + param: "167.128" "49": - forecast: - inputs: - request: - param: "123.128" + fc_inputs: + select: + param: "123.128" "228005": - forecast: - inputs: - request: - param: "207.128" + fc_inputs: + select: + param: "207.128" "201": - forecast: - inputs: - request: - param: "121.128" + fc_inputs: + select: + param: "121.128" "202": - forecast: - inputs: - request: - param: "122.128" + fc_inputs: + select: + param: "122.128" "162045": - forecast: - inputs: - request: - param: "71.162" + fc_inputs: + select: + param: "71.162" "228006": - forecast: - inputs: - request: - param: "164.128" + fc_inputs: + select: + param: "164.128" "228": - forecast: - inputs: - request: - param: "228.128" + fc_inputs: + select: + param: "228.128" "144": - forecast: - inputs: - request: - param: "144.128" + fc_inputs: + select: + param: "144.128" "59": - forecast: - inputs: - request: - param: "59.128" + fc_inputs: + select: + param: "59.128" "228044": - forecast: - inputs: - request: - param: "44.228" + fc_inputs: + select: + param: "44.228" instantaneous: - forecast: - inputs: - derive_hdate: + fc_inputs: + derive: + hdate: + name: hindcast_dates rstart: -20 rend: 0 recurrence: "yearly" @@ -4768,33 +3477,23 @@ inputs: from_inputs: false filter:param: "140200": - forecast: - inputs: - - request: - param: "229.140" - type: "fcmean" - members: - start: 0 - end: 0 - derive_step: - type: precomputed - derive_date: - - option: bracket - num: 4 - strict: False - - request: - param: "229.140" - type: "fcmean" - derive_step: - type: precomputed - derive_date: - - option: bracket - num: 4 - strict: False + fc_inputs: + select: + param: "229.140" + type: "fcmean" + derive: + step: + type: step_precomputed + date: + - name: clim_date + option: bracket + num: 4 + strict: False instantaneous: - forecast: - inputs: - derive_hdate: + fc_inputs: + derive: + hdate: + name: hindcast_dates rstart: -20 rend: 0 recurrence: "yearly" @@ -4802,239 +3501,185 @@ inputs: gwt: filter:param: "228": - filter:class: - od: - filter:steplength: - "6": - forecast: - update_request_method: product - inputs: - - request: - param: "228" - derive_step: - type: deaccumulate - - request: - param: ["138", "155"] - levtype: pl - levelist: 700 - derive_step: - type: default - include_start: true - by: 3 - - request: - param: "143" - derive_step: - type: deaccumulate - - request: - param: "228022" - derive_step: - type: deaccumulate - by: 24 - - request: - param: "228035" - derive_step: - type: default - by: 6 - - request: - param: [167, 168] - derive_step: - type: default - by: 3 - include_start: true - "12": - forecast: - update_request_method: product - inputs: - - request: - param: "228" - derive_step: - type: deaccumulate - - request: - param: ["138", "155"] - levtype: pl - levelist: 700 - derive_step: - type: default - include_start: true - by: 6 - - request: - param: "143" - derive_step: - type: deaccumulate - - request: - param: "228022" - derive_step: - type: deaccumulate - by: 24 - - request: - param: "228035" - derive_step: - type: default - by: 6 - - request: - param: [167, 168] - derive_step: - type: default - by: 6 - include_start: true - "24": - forecast: - update_request_method: product - inputs: - - request: - param: "228" - derive_step: - type: deaccumulate - - request: - param: ["138", "155"] - levtype: pl - levelist: 700 - derive_step: - type: default - include_start: true - by: 12 - - request: - param: "143" - derive_step: - type: deaccumulate - - request: - param: "228022" - derive_step: - type: deaccumulate - by: 24 - - request: - param: "228035" - derive_step: - type: default - by: 6 - - request: - param: [167, 168] - derive_step: - type: default - by: 6 - include_start: true - ea: - filter:steplength: - "12/24": - forecast: - update_request_method: product - inputs: - - request: - param: "228.128" - - request: - param: ["131.128", "132.128"] - levtype: pl - levelist: 700 - - request: - param: "143.128" - - request: - param: "22.228" - - request: - param: "59.128" - - request: - param: ["167.128", "168.128"] - - request: - type: an - param: "74.128" - time: "0000" - derive_step: - type: static - values: 0 - - request: - type: an - param: "172.128" - time: "0000" - derive_step: - type: static - values: 0 - "201": - filter:class: - ea: - filter:steplength: - "24": - forecast: - update_request_method: product - inputs: - - request: - param: "201.128" - - request: - param: ['228.128', '201.128'] - - request: - param: ['141.128', '33.128', '246.228', '247.228', '39.128', '201.128'] - derive_step: - type: default - include_start: true - - request: - param: "22.228" - - request: - type: an - param: "74.128" - time: "0000" - derive_step: - type: static - values: 0 - - request: - type: an - param: "172.128" - time: "0000" - derive_step: - type: static - values: 0 - - request: - class: od - type: an - param: "200199" - derive_step: - type: static - values: 0 - "202": - filter:class: - ea: - filter:steplength: - "24": - forecast: - update_request_method: product - inputs: - - request: - param: "202.128" - - request: - param: ['141.128', '33.128', '167.128', '235.128', '246.228', '247.228', '186.128', '202.128'] - derive_step: - type: default - include_start: true - - request: - type: an - param: "74.128" - time: "0000" - derive_step: - type: static - values: 0 - - request: - type: an - param: "172.128" - time: "0000" - derive_step: - type: static - values: 0 - - request: - class: od - type: an - param: "200199" - derive_step: - type: static - values: 0 - - request: - type: an - param: ['27.128', '28.128', '66.128', '67.128'] - time: "1200" - derive_step: - type: static - values: 0 + filter:steplength: + "6": + fc_inputs: + - select: + param: "228" + derive: + step: + name: step_deaccumulate + - select: + param: ["138", "155"] + levtype: pl + levelist: 700 + derive: + step: + type: step_default + include_start: true + by: 3 + - select: + param: "143" + derive: + step: + name: step_deaccumulate + - select: + param: "228022" + derive: + step: + name: step_deaccumulate + by: 24 + - select: + param: "228035" + derive: + step: + name: step_default + by: 6 + - select: + param: [167, 168] + derive: + step: + name: step_default + by: 3 + include_start: true pfc: - forecast: - inputs: - request: - param: "{param}" - derive_step: - type: precomputed - fc/cf/pf/ep/pb/cm/cr: {} + fc_inputs: + select: + ensemble: true + derive: + step: + name: step_precomputed + ep: + fc_inputs: + select: + ensemble: True + filter:selection: + custom: {} + default: + filter:param: + 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + fc_inputs: + select: + param: "130" + derive: + step: + name: step_default + include_start: true + by: 6 + clim_inputs: + - select: + param: "130" + type: "em" + time: "0000" + derive: + step: + name: clim_step_inst + date: + name: clim_date + option: previous + strict: False + - select: + param: "130" + type: "es" + time: "0000" + derive: + step: + name: clim_step_inst + date: + name: clim_date + option: previous + strict: False + 131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + fc_inputs: + select: + param: "130" + derive: + step: + name: step_default + by: 6 + clim_inputs: + - select: + param: "130" + type: "em" + time: "0000" + derive: + step: + name: clim_step_inst + date: + name: clim_date + option: previous + strict: False + - select: + param: "130" + type: "es" + time: "0000" + derive: + step: + name: clim_step_inst + date: + name: clim_date + option: previous + strict: False + 131060/131061/131062/131063/131064/131065/131066/131067/131098/131099/131085: + fc_inputs: + select: + param: "228" + derive: + step: + name: step_deaccumulate + "131068/131069": + fc_inputs: + select: + param: ["165", "166"] + 131070/131071/131072/131100: + fc_inputs: + select: + param: "123" + derive: + step: + name: step_default + by: 6 + "131073": + filter:steptype: + instantaneous: + fc_inputs: + select: + param: "167" + range: + fc_inputs: + select: + param: "122" + derive: + step: + name: step_default + by: 6 + 131074/131075/131076/131077: + fc_inputs: + select: + param: "140229" + 131078/131079/131080/131081: + fc_inputs: + select: + param: "140232" + pb: + filter:param: + "121/122/123": + fc_inputs: + derive: + step: + name: step_default + by: 6 + "228026/228027": + fc_inputs: + derive: + step: + name: step_default + by: 3 + "200228": + fc_inputs: + select: + param: ["228"] + derive: + step: + name: step_deaccumulate + "*": {} diff --git a/pproc-core/uv.lock b/pproc-core/uv.lock index 3790f7b6..a1decb3e 100644 --- a/pproc-core/uv.lock +++ b/pproc-core/uv.lock @@ -1,4 +1,5 @@ version = 1 +revision = 3 requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", @@ -16,45 +17,45 @@ resolution-markers = [ name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] [[package]] name = "array-api-compat" version = "1.14.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/89/e5/9a12dd1c2b0ad61f3c3ad0fc14b888c65fd735dd9d26805f77317303cbe5/array_api_compat-1.14.0.tar.gz", hash = "sha256:c819ba707f5c507800cb545f7e6348ff1ecc46538381d9ad9b371ffc9cd6d784", size = 106369 } +sdist = { url = "https://files.pythonhosted.org/packages/89/e5/9a12dd1c2b0ad61f3c3ad0fc14b888c65fd735dd9d26805f77317303cbe5/array_api_compat-1.14.0.tar.gz", hash = "sha256:c819ba707f5c507800cb545f7e6348ff1ecc46538381d9ad9b371ffc9cd6d784", size = 106369, upload-time = "2026-02-26T12:02:42.452Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/d3/54cd560804a8c2b898824778e86c13c2a14600bc83532a9c4f69f2f469c3/array_api_compat-1.14.0-py3-none-any.whl", hash = "sha256:ed5af1f9b6595a199c942505f281ec994892556b6efc24679a0501e87a7d6279", size = 60124 }, + { url = "https://files.pythonhosted.org/packages/a0/d3/54cd560804a8c2b898824778e86c13c2a14600bc83532a9c4f69f2f469c3/array_api_compat-1.14.0-py3-none-any.whl", hash = "sha256:ed5af1f9b6595a199c942505f281ec994892556b6efc24679a0501e87a7d6279", size = 60124, upload-time = "2026-02-26T12:02:41.127Z" }, ] [[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 }, + { 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 = "certifi" version = "2026.5.20" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422 } +sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134 }, + { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" }, ] [[package]] @@ -64,67 +65,67 @@ 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 }, - { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, +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, 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" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, ] [[package]] @@ -137,9 +138,9 @@ dependencies = [ { name = "eccodes" }, { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591 } +sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591, upload-time = "2025-09-30T22:46:14.133Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123 }, + { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123, upload-time = "2025-09-30T22:46:12.206Z" }, ] [[package]] @@ -149,131 +150,131 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733 }, - { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946 }, - { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856 }, - { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573 }, - { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563 }, - { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631 }, - { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383 }, - { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175 }, - { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980 }, - { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166 }, - { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614 }, - { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090 }, - { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840 }, - { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534 }, - { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453 }, - { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541 }, - { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014 }, - { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625 }, - { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269 }, - { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364 }, - { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468 }, - { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725 }, - { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445 }, - { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434 }, - { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812 }, - { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768 }, - { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818 }, - { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862 }, - { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781 }, - { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218 }, - { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932 }, - { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894 }, - { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027 }, - { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065 }, +sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605, upload-time = "2025-10-13T18:56:26.352Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733, upload-time = "2025-10-13T18:56:00.189Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946, upload-time = "2025-10-13T18:56:01.262Z" }, + { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856, upload-time = "2025-10-13T19:39:12.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573, upload-time = "2025-10-13T18:56:02.788Z" }, + { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563, upload-time = "2025-10-13T18:56:04.075Z" }, + { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631, upload-time = "2025-10-13T18:56:05.159Z" }, + { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383, upload-time = "2026-01-02T21:16:47.317Z" }, + { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175, upload-time = "2025-10-13T18:56:06.398Z" }, + { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980, upload-time = "2025-10-13T18:56:08.669Z" }, + { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166, upload-time = "2025-10-13T19:39:14.109Z" }, + { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614, upload-time = "2025-10-13T18:56:09.815Z" }, + { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090, upload-time = "2025-10-13T18:56:11.442Z" }, + { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840, upload-time = "2025-10-13T18:56:12.506Z" }, + { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534, upload-time = "2026-01-02T21:16:48.784Z" }, + { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453, upload-time = "2025-10-13T18:56:13.545Z" }, + { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541, upload-time = "2025-10-13T18:56:14.612Z" }, + { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014, upload-time = "2025-10-13T19:39:15.346Z" }, + { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625, upload-time = "2025-10-13T18:56:15.745Z" }, + { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269, upload-time = "2025-10-13T18:56:17.04Z" }, + { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364, upload-time = "2025-10-13T18:56:18.05Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468, upload-time = "2026-01-02T21:16:50.193Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725, upload-time = "2025-10-13T18:56:19.424Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445, upload-time = "2025-10-13T18:56:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434, upload-time = "2025-10-13T19:39:17.084Z" }, + { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812, upload-time = "2025-10-13T18:56:21.971Z" }, + { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768, upload-time = "2025-10-13T18:56:24.027Z" }, + { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818, upload-time = "2025-10-13T18:56:25.376Z" }, + { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862, upload-time = "2026-01-02T20:45:02.625Z" }, + { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781, upload-time = "2026-01-02T20:45:04.818Z" }, + { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218, upload-time = "2026-01-02T20:45:06.788Z" }, + { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932, upload-time = "2026-01-02T20:45:11.194Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894, upload-time = "2026-01-02T20:45:16.351Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027, upload-time = "2026-01-02T20:45:20.023Z" }, + { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065, upload-time = "2026-01-02T20:45:23.398Z" }, ] [[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/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328 }, - { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061 }, - { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031 }, - { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239 }, - { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589 }, - { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733 }, - { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652 }, - { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229 }, - { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552 }, - { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806 }, - { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316 }, - { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274 }, - { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468 }, - { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460 }, - { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330 }, - { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828 }, - { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627 }, - { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008 }, - { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303 }, - { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282 }, - { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595 }, - { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986 }, - { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711 }, - { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036 }, - { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998 }, - { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056 }, - { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537 }, - { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176 }, - { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723 }, - { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085 }, - { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819 }, - { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915 }, - { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234 }, - { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042 }, - { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706 }, - { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727 }, - { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882 }, - { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860 }, - { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564 }, - { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276 }, - { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238 }, - { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189 }, - { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352 }, - { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024 }, - { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869 }, - { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541 }, - { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634 }, - { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384 }, - { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133 }, - { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257 }, - { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851 }, - { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393 }, - { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251 }, - { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609 }, - { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014 }, - { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979 }, - { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238 }, - { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110 }, - { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824 }, - { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103 }, - { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194 }, - { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827 }, - { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168 }, - { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018 }, - { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958 }, +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, 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/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031, upload-time = "2026-04-02T09:26:26.865Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239, upload-time = "2026-04-02T09:26:28.044Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733, upload-time = "2026-04-02T09:26:30.5Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652, upload-time = "2026-04-02T09:26:31.709Z" }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552, upload-time = "2026-04-02T09:26:34.845Z" }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806, upload-time = "2026-04-02T09:26:36.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316, upload-time = "2026-04-02T09:26:37.672Z" }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274, upload-time = "2026-04-02T09:26:38.93Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460, upload-time = "2026-04-02T09:26:41.416Z" }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330, upload-time = "2026-04-02T09:26:42.554Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828, upload-time = "2026-04-02T09:26:44.075Z" }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, + { 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]] @@ -283,36 +284,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007 } +sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639 }, + { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" }, ] [[package]] name = "cloudpickle" version = "3.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330 } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228 }, + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, ] [[package]] name = "code-meters" version = "0.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129 } +sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129, upload-time = "2024-02-23T15:50:40.138Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801 }, + { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801, upload-time = "2024-02-23T15:50:38.443Z" }, ] [[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]] @@ -324,9 +325,9 @@ dependencies = [ { name = "pyyaml" }, { name = "rich-argparse" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cf/19/e8143a210b58494025803a684de9eb94998b7b8288f42f15fbee0161019c/conflator-0.1.8.tar.gz", hash = "sha256:9ee8958a3eebbfeb6fafc4b0b7b77c8a97d1752fd725ca8a514046a596f26508", size = 9753 } +sdist = { url = "https://files.pythonhosted.org/packages/cf/19/e8143a210b58494025803a684de9eb94998b7b8288f42f15fbee0161019c/conflator-0.1.8.tar.gz", hash = "sha256:9ee8958a3eebbfeb6fafc4b0b7b77c8a97d1752fd725ca8a514046a596f26508", size = 9753, upload-time = "2025-12-01T12:37:00.038Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/aa/0d6a2c96234fb5cc3d55a3f5078268ef6bc4e69d202f86b93f17b3f8d2eb/conflator-0.1.8-py3-none-any.whl", hash = "sha256:7e621da64183bc9207b3857cebaa9cd1aee52ea6cb4aea7492aa9d9a4b4968c5", size = 10806 }, + { url = "https://files.pythonhosted.org/packages/a2/aa/0d6a2c96234fb5cc3d55a3f5078268ef6bc4e69d202f86b93f17b3f8d2eb/conflator-0.1.8-py3-none-any.whl", hash = "sha256:7e621da64183bc9207b3857cebaa9cd1aee52ea6cb4aea7492aa9d9a4b4968c5", size = 10806, upload-time = "2025-12-01T12:36:58.839Z" }, ] [[package]] @@ -343,18 +344,18 @@ dependencies = [ { name = "pyyaml" }, { name = "toolz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/2a/5d8cc1579590af86576dde890254440e478c7174b93a02095ecfc2e6ba38/dask-2026.3.0.tar.gz", hash = "sha256:f7d96c8274e8a900d217c1ff6ea8d1bbf0b4c2c21e74a409644498d925eb8f85", size = 11000710 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/2a/5d8cc1579590af86576dde890254440e478c7174b93a02095ecfc2e6ba38/dask-2026.3.0.tar.gz", hash = "sha256:f7d96c8274e8a900d217c1ff6ea8d1bbf0b4c2c21e74a409644498d925eb8f85", size = 11000710, upload-time = "2026-03-18T07:10:14.945Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630 }, + { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630, upload-time = "2026-03-18T07:10:12.832Z" }, ] [[package]] name = "decorator" version = "5.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084 } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365 }, + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, ] [[package]] @@ -364,9 +365,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788 } +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788, upload-time = "2020-04-20T14:23:38.738Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" }, ] [[package]] @@ -393,9 +394,9 @@ dependencies = [ { name = "tqdm" }, { name = "xarray" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819 } +sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819, upload-time = "2026-05-13T12:22:44.707Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/d3/a00aeee76005909eaa1f7fcb1e1f2333d9f4b53866666e1bb7f9e9e15148/earthkit_data-0.20.0-py3-none-any.whl", hash = "sha256:e1df4d93354bb5bd30b967ad17d52454b4df4d6a37511fc91f950aebba592056", size = 398525 }, + { url = "https://files.pythonhosted.org/packages/b9/d3/a00aeee76005909eaa1f7fcb1e1f2333d9f4b53866666e1bb7f9e9e15148/earthkit_data-0.20.0-py3-none-any.whl", hash = "sha256:e1df4d93354bb5bd30b967ad17d52454b4df4d6a37511fc91f950aebba592056", size = 398525, upload-time = "2026-05-13T12:22:43.362Z" }, ] [[package]] @@ -405,9 +406,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/49/fa/37a9a90303908685fba892402248789de689071f6ad4c1373dfd195ac34e/earthkit_time-0.1.8.tar.gz", hash = "sha256:d211f1647c169b34cf79177aed17ac4f472cb8bd3096f98b08d7f77293dfcd81", size = 32560 } +sdist = { url = "https://files.pythonhosted.org/packages/49/fa/37a9a90303908685fba892402248789de689071f6ad4c1373dfd195ac34e/earthkit_time-0.1.8.tar.gz", hash = "sha256:d211f1647c169b34cf79177aed17ac4f472cb8bd3096f98b08d7f77293dfcd81", size = 32560, upload-time = "2026-02-16T17:40:08.144Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/96/614cc95e2bd7f2075b8b4f4b85b37df655c3cc3028f949b799224f4546d4/earthkit_time-0.1.8-py3-none-any.whl", hash = "sha256:a09de208a3696f497e2d9495e535a9e2fc805f0148d4e2555abefd0da759216d", size = 28772 }, + { url = "https://files.pythonhosted.org/packages/40/96/614cc95e2bd7f2075b8b4f4b85b37df655c3cc3028f949b799224f4546d4/earthkit_time-0.1.8-py3-none-any.whl", hash = "sha256:a09de208a3696f497e2d9495e535a9e2fc805f0148d4e2555abefd0da759216d", size = 28772, upload-time = "2026-02-16T17:40:07.195Z" }, ] [[package]] @@ -418,9 +419,9 @@ dependencies = [ { name = "array-api-compat" }, { name = "pint" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013 } +sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013, upload-time = "2026-03-24T14:57:10.184Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/cb/0c9f59b0ca2a5ed941b65c52a4a005a7e16511f52fc3965eb45c53565b76/earthkit_utils-0.3.0-py3-none-any.whl", hash = "sha256:167e0385e062800d6c9f2d25a2a3075d7d91b67c3a02af52d772175b2313aa89", size = 35650 }, + { url = "https://files.pythonhosted.org/packages/eb/cb/0c9f59b0ca2a5ed941b65c52a4a005a7e16511f52fc3965eb45c53565b76/earthkit_utils-0.3.0-py3-none-any.whl", hash = "sha256:167e0385e062800d6c9f2d25a2a3075d7d91b67c3a02af52d772175b2313aa89", size = 35650, upload-time = "2026-03-24T14:57:08.869Z" }, ] [[package]] @@ -441,9 +442,9 @@ dependencies = [ { name = "sortedcontainers" }, { name = "xarray" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/c6/8fd4b42984abff59eaf7bc2bc727a713c4b65539e55324b354aef2795fad/earthkit_workflows-0.15.2.tar.gz", hash = "sha256:616a3065fd14d4be282327048898355f3d4f972b8a648bbb87cbed9329c83202", size = 10865493 } +sdist = { url = "https://files.pythonhosted.org/packages/ff/c6/8fd4b42984abff59eaf7bc2bc727a713c4b65539e55324b354aef2795fad/earthkit_workflows-0.15.2.tar.gz", hash = "sha256:616a3065fd14d4be282327048898355f3d4f972b8a648bbb87cbed9329c83202", size = 10865493, upload-time = "2026-07-08T09:20:38.402Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/45/835afbb6254535370fb0f1917607e7b1b1a0a737a155d5e2f8f2b2ad3e88/earthkit_workflows-0.15.2-py3-none-any.whl", hash = "sha256:ba9ac562c0b57bc05a380b0a2d9881c1c261bab68912491ed431fb9a9da20f0d", size = 217575 }, + { url = "https://files.pythonhosted.org/packages/3c/45/835afbb6254535370fb0f1917607e7b1b1a0a737a155d5e2f8f2b2ad3e88/earthkit_workflows-0.15.2-py3-none-any.whl", hash = "sha256:ba9ac562c0b57bc05a380b0a2d9881c1c261bab68912491ed431fb9a9da20f0d", size = 217575, upload-time = "2026-07-08T09:20:37.055Z" }, ] [package.optional-dependencies] @@ -462,48 +463,48 @@ dependencies = [ { name = "findlibs" }, { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378 } +sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378, upload-time = "2026-04-22T11:30:08.465Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928 }, - { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009 }, - { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001 }, - { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567 }, + { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928, upload-time = "2026-04-22T11:29:40.702Z" }, + { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009, upload-time = "2026-04-22T11:29:36.343Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001, upload-time = "2026-04-22T11:29:36.596Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567, upload-time = "2026-04-22T11:30:06.789Z" }, ] [[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 = "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 = "filelock" version = "3.29.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571 } +sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571, upload-time = "2026-04-19T15:39:10.068Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812 }, + { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812, upload-time = "2026-04-19T15:39:08.752Z" }, ] [[package]] name = "findlibs" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/ef/345b0f88b8e9d9e12051142a9cdcf590bf70206d20d81c3f773ade8d9e32/findlibs-0.1.2.tar.gz", hash = "sha256:1f56d220c69686392ebdc4c65b32ee344818bca633643a8c97592957d1728122", size = 11302 } +sdist = { url = "https://files.pythonhosted.org/packages/22/ef/345b0f88b8e9d9e12051142a9cdcf590bf70206d20d81c3f773ade8d9e32/findlibs-0.1.2.tar.gz", hash = "sha256:1f56d220c69686392ebdc4c65b32ee344818bca633643a8c97592957d1728122", size = 11302, upload-time = "2025-07-28T09:15:03.675Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/ff/76dd547e129206899e4e26446c3ca7aeaff948c31b05250e9b8690e76883/findlibs-0.1.2-py3-none-any.whl", hash = "sha256:5348bbc7055d2a505962576c2e285b6c0aae6d749f82ba71296e7d41336e66e8", size = 10707 }, + { url = "https://files.pythonhosted.org/packages/2f/ff/76dd547e129206899e4e26446c3ca7aeaff948c31b05250e9b8690e76883/findlibs-0.1.2-py3-none-any.whl", hash = "sha256:5348bbc7055d2a505962576c2e285b6c0aae6d749f82ba71296e7d41336e66e8", size = 10707, upload-time = "2025-07-28T09:15:02.733Z" }, ] [[package]] @@ -513,9 +514,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "termcolor" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/00/f8d10588d2019d6d6452653def1ee807353b21983db48550318424b5ff18/fire-0.7.1.tar.gz", hash = "sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf", size = 88720 } +sdist = { url = "https://files.pythonhosted.org/packages/c0/00/f8d10588d2019d6d6452653def1ee807353b21983db48550318424b5ff18/fire-0.7.1.tar.gz", hash = "sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf", size = 88720, upload-time = "2025-08-16T20:20:24.175Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/4c/93d0f85318da65923e4b91c1c2ff03d8a458cbefebe3bc612a6693c7906d/fire-0.7.1-py3-none-any.whl", hash = "sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882", size = 115945 }, + { url = "https://files.pythonhosted.org/packages/e5/4c/93d0f85318da65923e4b91c1c2ff03d8a458cbefebe3bc612a6693c7906d/fire-0.7.1-py3-none-any.whl", hash = "sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882", size = 115945, upload-time = "2025-08-16T20:20:22.87Z" }, ] [[package]] @@ -525,9 +526,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816 } +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload-time = "2024-03-09T03:21:07.555Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263 }, + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload-time = "2024-03-09T03:21:05.635Z" }, ] [[package]] @@ -537,45 +538,45 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799 } +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload-time = "2024-11-07T02:00:56.249Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625 }, + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload-time = "2024-11-07T02:00:54.523Z" }, ] [[package]] name = "frozendict" version = "2.4.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082 } +sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082, upload-time = "2025-11-11T22:40:14.251Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264 }, + { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264, upload-time = "2025-11-11T22:40:12.836Z" }, ] [[package]] name = "fsspec" version = "2026.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760 } +sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760, upload-time = "2026-04-29T20:42:38.635Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402 }, + { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402, upload-time = "2026-04-29T20:42:36.842Z" }, ] [[package]] name = "humanize" version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/66/a3921783d54be8a6870ac4ccffcd15c4dc0dd7fcce51c6d63b8c63935276/humanize-4.15.0.tar.gz", hash = "sha256:1dd098483eb1c7ee8e32eb2e99ad1910baefa4b75c3aff3a82f4d78688993b10", size = 83599 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/66/a3921783d54be8a6870ac4ccffcd15c4dc0dd7fcce51c6d63b8c63935276/humanize-4.15.0.tar.gz", hash = "sha256:1dd098483eb1c7ee8e32eb2e99ad1910baefa4b75c3aff3a82f4d78688993b10", size = 83599, upload-time = "2025-12-20T20:16:13.19Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203 }, + { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203, upload-time = "2025-12-20T20:16:11.67Z" }, ] [[package]] name = "idna" version = "3.18" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711 } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455 }, + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, ] [[package]] @@ -585,18 +586,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "zipp", marker = "python_full_version < '3.14'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405 } +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789 }, + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, ] [[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]] @@ -617,9 +618,9 @@ dependencies = [ { name = "traitlets" }, { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/53/59/165d3b4d75cc34add3122c4417ecb229085140ac573103c223cd01dde96f/ipython-9.15.0.tar.gz", hash = "sha256:da2819ce2aa83135257df830660b1176d986c3d2876db24df01974fa955b2756", size = 4442580 } +sdist = { url = "https://files.pythonhosted.org/packages/53/59/165d3b4d75cc34add3122c4417ecb229085140ac573103c223cd01dde96f/ipython-9.15.0.tar.gz", hash = "sha256:da2819ce2aa83135257df830660b1176d986c3d2876db24df01974fa955b2756", size = 4442580, upload-time = "2026-06-26T11:03:35.913Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl", hash = "sha256:515ad9c3cdf0c932a5a9f6245419e8aba706b7bd03c3e1d3a1c83d9351d6aa6e", size = 630895 }, + { url = "https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl", hash = "sha256:515ad9c3cdf0c932a5a9f6245419e8aba706b7bd03c3e1d3a1c83d9351d6aa6e", size = 630895, upload-time = "2026-06-26T11:03:33.809Z" }, ] [[package]] @@ -629,9 +630,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]] @@ -641,9 +642,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]] @@ -653,18 +654,18 @@ 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 = "jsonpickle" version = "4.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8d/c0/dde9b4b42cc415b9579573f967f12efbb034e427a2a37e93ad5139891d87/jsonpickle-4.1.2.tar.gz", hash = "sha256:8afed18aa189fd81e2e833b426bb4af485594921f0b1d36c2001fc5637a2f210", size = 319120 } +sdist = { url = "https://files.pythonhosted.org/packages/8d/c0/dde9b4b42cc415b9579573f967f12efbb034e427a2a37e93ad5139891d87/jsonpickle-4.1.2.tar.gz", hash = "sha256:8afed18aa189fd81e2e833b426bb4af485594921f0b1d36c2001fc5637a2f210", size = 319120, upload-time = "2026-05-28T03:50:11.892Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/7b/fd3c7a09649aea9da1d3587aea624d8f9b29963dfd84a1bdb2aa93b36dac/jsonpickle-4.1.2-py3-none-any.whl", hash = "sha256:7ffe34426bc797684dbf1dc84185558bd864cd25b1ff5fb01b7405e392d0a937", size = 47203 }, + { url = "https://files.pythonhosted.org/packages/a1/7b/fd3c7a09649aea9da1d3587aea624d8f9b29963dfd84a1bdb2aa93b36dac/jsonpickle-4.1.2-py3-none-any.whl", hash = "sha256:7ffe34426bc797684dbf1dc84185558bd864cd25b1ff5fb01b7405e392d0a937", size = 47203, upload-time = "2026-05-28T03:50:10.605Z" }, ] [[package]] @@ -677,9 +678,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]] @@ -689,103 +690,103 @@ 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]] name = "locket" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350 } +sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350, upload-time = "2022-04-20T22:04:44.312Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398 }, + { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398, upload-time = "2022-04-20T22:04:42.23Z" }, ] [[package]] name = "lru-dict" version = "1.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760 }, - { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249 }, - { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728 }, - { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795 }, - { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807 }, - { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437 }, - { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168 }, - { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454 }, - { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574 }, - { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031 }, - { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007 }, - { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683 }, - { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216 }, - { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687 }, - { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960 }, - { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882 }, - { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268 }, - { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156 }, - { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395 }, - { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591 }, - { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119 }, - { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109 }, - { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248 }, - { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243 }, - { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938 }, - { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261 }, - { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801 }, - { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688 }, - { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214 }, - { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689 }, - { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034 }, - { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919 }, - { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334 }, - { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211 }, - { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461 }, - { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651 }, - { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120 }, - { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112 }, - { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119 }, - { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435 }, - { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988 }, - { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733 }, - { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222 }, - { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733 }, - { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251 }, - { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405 }, - { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135 }, - { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620 }, - { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077 }, - { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905 }, - { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435 }, - { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423 }, - { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184 }, - { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459 }, - { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938 }, - { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389 }, - { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706 }, - { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892 }, - { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254 }, - { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422 }, - { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909 }, - { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816 }, - { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204 }, - { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384 }, - { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822 }, - { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968 }, - { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904 }, - { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062 }, +sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439, upload-time = "2025-11-02T10:02:13.548Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760, upload-time = "2025-11-02T10:01:06.492Z" }, + { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249, upload-time = "2025-11-02T10:01:07.261Z" }, + { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728, upload-time = "2025-11-02T10:01:08.185Z" }, + { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795, upload-time = "2025-11-02T10:01:08.862Z" }, + { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807, upload-time = "2025-11-02T10:01:09.581Z" }, + { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437, upload-time = "2025-11-02T10:01:10.676Z" }, + { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168, upload-time = "2025-11-02T10:01:11.47Z" }, + { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454, upload-time = "2025-11-02T10:01:12.522Z" }, + { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574, upload-time = "2025-11-02T10:01:13.293Z" }, + { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031, upload-time = "2025-11-02T10:01:13.96Z" }, + { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007, upload-time = "2025-11-02T10:01:14.857Z" }, + { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683, upload-time = "2025-11-02T10:01:15.891Z" }, + { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216, upload-time = "2025-11-02T10:01:16.867Z" }, + { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687, upload-time = "2025-11-02T10:01:17.485Z" }, + { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960, upload-time = "2025-11-02T10:01:18.158Z" }, + { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882, upload-time = "2025-11-02T10:01:18.841Z" }, + { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268, upload-time = "2025-11-02T10:01:19.564Z" }, + { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156, upload-time = "2025-11-02T10:01:20.22Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395, upload-time = "2025-11-02T10:01:20.901Z" }, + { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591, upload-time = "2025-11-02T10:01:21.606Z" }, + { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119, upload-time = "2025-11-02T10:01:22.61Z" }, + { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109, upload-time = "2025-11-02T10:01:23.322Z" }, + { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248, upload-time = "2025-11-02T10:01:24.291Z" }, + { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243, upload-time = "2025-11-02T10:01:25.254Z" }, + { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938, upload-time = "2025-11-02T10:01:25.89Z" }, + { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261, upload-time = "2025-11-02T10:01:26.879Z" }, + { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801, upload-time = "2025-11-02T10:01:27.553Z" }, + { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688, upload-time = "2025-11-02T10:01:28.17Z" }, + { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214, upload-time = "2025-11-02T10:01:28.888Z" }, + { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689, upload-time = "2025-11-02T10:01:29.508Z" }, + { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034, upload-time = "2025-11-02T10:01:30.164Z" }, + { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919, upload-time = "2025-11-02T10:01:30.971Z" }, + { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334, upload-time = "2025-11-02T10:01:31.663Z" }, + { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211, upload-time = "2025-11-02T10:01:32.468Z" }, + { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461, upload-time = "2025-11-02T10:01:33.2Z" }, + { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651, upload-time = "2025-11-02T10:01:33.874Z" }, + { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120, upload-time = "2025-11-02T10:01:34.595Z" }, + { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112, upload-time = "2025-11-02T10:01:35.268Z" }, + { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119, upload-time = "2025-11-02T10:01:36.239Z" }, + { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435, upload-time = "2025-11-02T10:01:36.857Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988, upload-time = "2025-11-02T10:01:37.531Z" }, + { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733, upload-time = "2025-11-02T10:01:38.194Z" }, + { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222, upload-time = "2025-11-02T10:01:39.093Z" }, + { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733, upload-time = "2025-11-02T10:01:39.739Z" }, + { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251, upload-time = "2025-11-02T10:01:40.421Z" }, + { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405, upload-time = "2025-11-02T10:01:41.917Z" }, + { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135, upload-time = "2025-11-02T10:01:42.935Z" }, + { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620, upload-time = "2025-11-02T10:01:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077, upload-time = "2025-11-02T10:01:44.694Z" }, + { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905, upload-time = "2025-11-02T10:01:45.668Z" }, + { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435, upload-time = "2025-11-02T10:01:46.397Z" }, + { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423, upload-time = "2025-11-02T10:01:47.473Z" }, + { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184, upload-time = "2025-11-02T10:01:48.161Z" }, + { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459, upload-time = "2025-11-02T10:01:48.823Z" }, + { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938, upload-time = "2025-11-02T10:01:49.448Z" }, + { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389, upload-time = "2025-11-02T10:01:50.49Z" }, + { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706, upload-time = "2025-11-02T10:01:51.197Z" }, + { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892, upload-time = "2025-11-02T10:01:51.899Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254, upload-time = "2025-11-02T10:01:52.587Z" }, + { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422, upload-time = "2025-11-02T10:01:53.271Z" }, + { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909, upload-time = "2025-11-02T10:01:54.356Z" }, + { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816, upload-time = "2025-11-02T10:01:55.417Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204, upload-time = "2025-11-02T10:01:56.06Z" }, + { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384, upload-time = "2025-11-02T10:02:09.656Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822, upload-time = "2025-11-02T10:02:10.609Z" }, + { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968, upload-time = "2025-11-02T10:02:11.405Z" }, + { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904, upload-time = "2025-11-02T10:02:12.144Z" }, + { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062, upload-time = "2025-11-02T10:02:12.878Z" }, ] [[package]] name = "markdown" version = "3.10.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805 } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180 }, + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, ] [[package]] @@ -795,83 +796,83 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454 } +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687 }, + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, ] [[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 }, - { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615 }, - { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020 }, - { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332 }, - { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947 }, - { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962 }, - { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760 }, - { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529 }, - { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015 }, - { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, - { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, - { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, - { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622 }, - { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029 }, - { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374 }, - { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980 }, - { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990 }, - { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784 }, - { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588 }, - { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041 }, - { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, - { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, - { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, - { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658 }, - { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066 }, - { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639 }, - { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569 }, - { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284 }, - { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801 }, - { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769 }, - { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642 }, - { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, - { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, - { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, - { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619 }, - { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029 }, - { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408 }, - { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005 }, - { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048 }, - { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821 }, - { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606 }, - { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043 }, - { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, - { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, - { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, - { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661 }, - { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069 }, - { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670 }, - { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598 }, - { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261 }, - { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835 }, - { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733 }, - { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672 }, - { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, - { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, - { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, +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, 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" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] [[package]] @@ -881,18 +882,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150 } +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534 }, + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, ] [[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]] @@ -905,9 +906,9 @@ dependencies = [ { name = "requests" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6c/ce/a00c9b44f43c4620ca004e4acb4c1e266b1ab48d2f6ad9e402f6bdbe44d4/multiurl-0.3.7.tar.gz", hash = "sha256:4201563fc8989baca7b525fdc69d4cd5a6c0cef4f303559710b9890021aab6d9", size = 18945 } +sdist = { url = "https://files.pythonhosted.org/packages/6c/ce/a00c9b44f43c4620ca004e4acb4c1e266b1ab48d2f6ad9e402f6bdbe44d4/multiurl-0.3.7.tar.gz", hash = "sha256:4201563fc8989baca7b525fdc69d4cd5a6c0cef4f303559710b9890021aab6d9", size = 18945, upload-time = "2025-07-29T11:57:04.109Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl", hash = "sha256:054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380", size = 21524 }, + { url = "https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl", hash = "sha256:054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380", size = 21524, upload-time = "2025-07-29T11:57:03.191Z" }, ] [[package]] @@ -919,198 +920,198 @@ dependencies = [ { name = "cftime" }, { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352 } +sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352, upload-time = "2026-01-05T02:27:38.593Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499 }, - { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667 }, - { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769 }, - { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122 }, - { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637 }, - { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377 }, - { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821 }, - { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133 }, - { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635 }, - { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725 }, - { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258 }, - { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171 }, - { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579 }, - { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032 }, - { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653 }, - { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682 }, + { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499, upload-time = "2026-01-05T02:27:06.568Z" }, + { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667, upload-time = "2026-01-05T02:27:09.421Z" }, + { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769, upload-time = "2026-01-05T21:31:19.243Z" }, + { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122, upload-time = "2026-01-05T21:31:22.773Z" }, + { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637, upload-time = "2026-01-05T02:27:11.856Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377, upload-time = "2026-01-05T02:27:13.808Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821, upload-time = "2026-01-05T02:27:15.413Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133, upload-time = "2026-01-05T02:27:17.224Z" }, + { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635, upload-time = "2026-01-05T02:27:19.655Z" }, + { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725, upload-time = "2026-01-05T02:27:22.298Z" }, + { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258, upload-time = "2026-01-05T02:27:24.837Z" }, + { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171, upload-time = "2026-01-05T02:27:27.166Z" }, + { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579, upload-time = "2026-01-05T02:27:29.382Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032, upload-time = "2026-01-05T02:27:31.744Z" }, + { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653, upload-time = "2026-01-05T02:27:34.294Z" }, + { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682, upload-time = "2026-01-05T02:27:37.062Z" }, ] [[package]] name = "networkx" version = "3.6.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025 } +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504 }, + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, ] [[package]] name = "numpy" version = "2.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194 }, - { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111 }, - { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159 }, - { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936 }, - { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692 }, - { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164 }, - { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877 }, - { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487 }, - { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945 }, - { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406 }, - { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528 }, - { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119 }, - { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246 }, - { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410 }, - { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240 }, - { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012 }, - { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538 }, - { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706 }, - { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541 }, - { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825 }, - { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687 }, - { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482 }, - { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648 }, - { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902 }, - { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992 }, - { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944 }, - { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392 }, - { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220 }, - { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800 }, - { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600 }, - { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134 }, - { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598 }, - { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272 }, - { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197 }, - { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287 }, - { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763 }, - { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070 }, - { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752 }, - { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024 }, - { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398 }, - { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971 }, - { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532 }, - { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881 }, - { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458 }, - { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559 }, - { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716 }, - { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947 }, - { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197 }, - { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245 }, - { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587 }, - { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226 }, - { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196 }, - { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334 }, - { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678 }, - { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672 }, - { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731 }, - { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805 }, - { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496 }, - { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616 }, - { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145 }, - { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813 }, - { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982 }, - { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908 }, - { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867 }, - { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511 }, - { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064 }, - { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157 }, - { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728 }, - { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374 }, - { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286 }, - { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263 }, +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, ] [[package]] name = "objsize" version = "0.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9d/42/2de8994fbea1112d076d71aefaebad888ff01e5b52616895d510b73c3b96/objsize-0.8.0.tar.gz", hash = "sha256:df17998cf6ef4b24d52abee5020484491230e3f4af71a8ff0098c7455ad4d91c", size = 16593 } +sdist = { url = "https://files.pythonhosted.org/packages/9d/42/2de8994fbea1112d076d71aefaebad888ff01e5b52616895d510b73c3b96/objsize-0.8.0.tar.gz", hash = "sha256:df17998cf6ef4b24d52abee5020484491230e3f4af71a8ff0098c7455ad4d91c", size = 16593, upload-time = "2026-01-18T12:55:14.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/53/157f8f4df3f43fdfdc627a56fa46135e4dcf806eb5bc6088811d968f8a21/objsize-0.8.0-py3-none-any.whl", hash = "sha256:afea5e61ba1e3e40c23b546028cdc1df88c5b097d2b0d6c6b8a4bf44fa7a3e1b", size = 11599 }, + { url = "https://files.pythonhosted.org/packages/14/53/157f8f4df3f43fdfdc627a56fa46135e4dcf806eb5bc6088811d968f8a21/objsize-0.8.0-py3-none-any.whl", hash = "sha256:afea5e61ba1e3e40c23b546028cdc1df88c5b097d2b0d6c6b8a4bf44fa7a3e1b", size = 11599, upload-time = "2026-01-18T12:55:12.626Z" }, ] [[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 } -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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { url = "https://files.pythonhosted.org/packages/0d/bd/70b6ab193594d7abb875320c0a7c8335e846f28968c432c31042409c3c8d/orjson-3.11.9-cp311-cp311-win32.whl", hash = "sha256:14ed654580c1ed2bc217352ec82f91b047aef82951aa71c7f64e0dcb03c0e180", size = 131533 }, - { url = "https://files.pythonhosted.org/packages/3f/17/1a1a228183d62d1b77e2c30d210f47dd4768b310ebe1607c63e3c0e3a71e/orjson-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:57ea77fb70a448ce87d18fca050193202a3da5e54598f6501ca5476fb66cfe02", size = 127106 }, - { url = "https://files.pythonhosted.org/packages/b8/95/285de5fa296d09681ee9c546cd4a8aeb773b701cf343dc125994f4d52953/orjson-3.11.9-cp311-cp311-win_arm64.whl", hash = "sha256:19b72ed11572a2ee51a67a903afbe5af504f84ed6f529c0fe44b0ab3fb5cc697", size = 126848 }, - { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515 }, - { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409 }, - { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106 }, - { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864 }, - { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213 }, - { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994 }, - { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744 }, - { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014 }, - { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509 }, - { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127 }, - { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025 }, - { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943 }, - { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606 }, - { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101 }, - { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736 }, - { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458 }, - { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368 }, - { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070 }, - { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892 }, - { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217 }, - { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980 }, - { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738 }, - { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033 }, - { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492 }, - { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087 }, - { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031 }, - { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915 }, - { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613 }, - { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086 }, - { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696 }, - { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465 }, - { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364 }, - { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063 }, - { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356 }, - { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592 }, - { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491 }, - { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309 }, - { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030 }, - { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482 }, - { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178 }, - { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089 }, - { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921 }, - { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638 }, - { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078 }, - { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687 }, +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" }, + { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" }, + { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106, upload-time = "2026-05-06T15:10:00.798Z" }, + { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864, upload-time = "2026-05-06T15:10:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213, upload-time = "2026-05-06T15:10:03.515Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994, upload-time = "2026-05-06T15:10:05.083Z" }, + { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744, upload-time = "2026-05-06T15:10:06.853Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014, upload-time = "2026-05-06T15:10:08.213Z" }, + { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509, upload-time = "2026-05-06T15:10:09.595Z" }, + { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127, upload-time = "2026-05-06T15:10:11.049Z" }, + { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025, upload-time = "2026-05-06T15:10:12.842Z" }, + { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943, upload-time = "2026-05-06T15:10:14.405Z" }, + { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606, upload-time = "2026-05-06T15:10:15.791Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101, upload-time = "2026-05-06T15:10:17.129Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736, upload-time = "2026-05-06T15:10:18.645Z" }, + { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458, upload-time = "2026-05-06T15:10:20.079Z" }, + { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368, upload-time = "2026-05-06T15:10:21.549Z" }, + { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070, upload-time = "2026-05-06T15:10:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892, upload-time = "2026-05-06T15:10:24.714Z" }, + { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217, upload-time = "2026-05-06T15:10:26.084Z" }, + { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980, upload-time = "2026-05-06T15:10:28.062Z" }, + { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738, upload-time = "2026-05-06T15:10:29.727Z" }, + { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033, upload-time = "2026-05-06T15:10:31.152Z" }, + { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492, upload-time = "2026-05-06T15:10:32.641Z" }, + { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087, upload-time = "2026-05-06T15:10:34.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031, upload-time = "2026-05-06T15:10:36.358Z" }, + { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915, upload-time = "2026-05-06T15:10:38.013Z" }, + { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613, upload-time = "2026-05-06T15:10:39.569Z" }, + { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086, upload-time = "2026-05-06T15:10:41.262Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696, upload-time = "2026-05-06T15:10:42.651Z" }, + { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465, upload-time = "2026-05-06T15:10:44.097Z" }, + { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364, upload-time = "2026-05-06T15:10:45.839Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063, upload-time = "2026-05-06T15:10:47.267Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356, upload-time = "2026-05-06T15:10:48.765Z" }, + { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592, upload-time = "2026-05-06T15:10:50.13Z" }, + { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491, upload-time = "2026-05-06T15:10:51.582Z" }, + { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309, upload-time = "2026-05-06T15:10:53.329Z" }, + { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030, upload-time = "2026-05-06T15:10:54.988Z" }, + { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482, upload-time = "2026-05-06T15:10:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178, upload-time = "2026-05-06T15:10:58.446Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089, upload-time = "2026-05-06T15:11:00.441Z" }, + { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921, upload-time = "2026-05-06T15:11:02.176Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638, upload-time = "2026-05-06T15:11:03.696Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078, upload-time = "2026-05-06T15:11:05.123Z" }, + { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687, upload-time = "2026-05-06T15:11:06.602Z" }, ] [[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]] @@ -1122,64 +1123,64 @@ dependencies = [ { name = "python-dateutil" }, { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495 }, - { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250 }, - { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558 }, - { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611 }, - { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670 }, - { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708 }, - { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609 }, - { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596 }, - { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846 }, - { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550 }, - { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965 }, - { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600 }, - { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824 }, - { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889 }, - { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463 }, - { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158 }, - { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071 }, - { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690 }, - { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634 }, - { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243 }, - { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659 }, - { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880 }, - { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091 }, - { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282 }, - { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016 }, - { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210 }, - { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126 }, - { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051 }, - { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796 }, - { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741 }, - { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958 }, - { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065 }, - { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101 }, - { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553 }, - { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065 }, - { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188 }, - { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966 }, - { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755 }, - { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658 }, - { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242 }, - { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369 }, - { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306 }, - { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394 }, - { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717 }, - { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897 }, - { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855 }, - { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464 }, +sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" }, + { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" }, + { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" }, + { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" }, + { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" }, + { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" }, + { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" }, + { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" }, + { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" }, + { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" }, + { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" }, + { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" }, + { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" }, + { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" }, + { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" }, + { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" }, + { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" }, + { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" }, + { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, + { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, + { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, + { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" }, + { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" }, + { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" }, + { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" }, + { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" }, + { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" }, + { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" }, + { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" }, + { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" }, + { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" }, + { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" }, + { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" }, + { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" }, + { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" }, ] [[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]] @@ -1190,9 +1191,9 @@ dependencies = [ { name = "locket" }, { name = "toolz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029 } +sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029, upload-time = "2024-05-06T19:51:41.945Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905 }, + { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905, upload-time = "2024-05-06T19:51:39.271Z" }, ] [[package]] @@ -1205,9 +1206,9 @@ dependencies = [ { name = "pandas" }, { name = "pint" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763 } +sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763, upload-time = "2026-02-26T17:03:46.376Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633 }, + { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633, upload-time = "2026-02-26T17:03:45.16Z" }, ] [[package]] @@ -1217,9 +1218,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] -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]] @@ -1232,27 +1233,27 @@ dependencies = [ { name = "platformdirs" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106 } +sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106, upload-time = "2026-03-19T21:57:08.72Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488 }, + { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488, upload-time = "2026-03-19T21:57:07.022Z" }, ] [[package]] name = "platformdirs" version = "4.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743 }, + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, ] [[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 }, + { 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]] @@ -1266,6 +1267,7 @@ dependencies = [ { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, + { name = "qubed" }, ] [package.dev-dependencies] @@ -1284,6 +1286,7 @@ requires-dist = [ { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, + { name = "qubed", specifier = "<=0.3.1" }, ] [package.metadata.requires-dev] @@ -1297,24 +1300,24 @@ dev = [ name = "prek" version = "0.4.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/13/3d71b3adbf385f7dc7fb6e16d6e25421fd8398b45d8f8410a328bf22bd3f/prek-0.4.4.tar.gz", hash = "sha256:4ec5771153d158a0e4473933b7fd9b51e1b1f57f2df50aeb7560ea6812226dc5", size = 470641 } +sdist = { url = "https://files.pythonhosted.org/packages/f6/13/3d71b3adbf385f7dc7fb6e16d6e25421fd8398b45d8f8410a328bf22bd3f/prek-0.4.4.tar.gz", hash = "sha256:4ec5771153d158a0e4473933b7fd9b51e1b1f57f2df50aeb7560ea6812226dc5", size = 470641, upload-time = "2026-06-04T07:26:07.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/9f/68a577888edf7f2647a652b02899508ccd84e57ce1f79c51a44edfd308d7/prek-0.4.4-py3-none-linux_armv6l.whl", hash = "sha256:23cfd96a25de1c93e3c43c746643b80489e3b2fa49ca9c0ffd6022e51535c900", size = 5550271 }, - { url = "https://files.pythonhosted.org/packages/35/b8/5427a0023116343a8d787b446536a7fddfa5db7eec7713dd05618da2bdfe/prek-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a427b792c4436f49732b1f6ebccf221fdcc6390c148474280da9c2c6eaabc9c4", size = 5910136 }, - { url = "https://files.pythonhosted.org/packages/9d/4f/d751e90b7e768e472e054cd41cbe502589436ca9c1a13bfe4fa9513f9cde/prek-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b998038fc92c990e03147eb5b95b0f2c394517f8857ab911aac8e092f1b9b3ab", size = 5470124 }, - { url = "https://files.pythonhosted.org/packages/c6/fe/e73241c5777b6f9b6b95132febbd27f9be9e89912e9e93c0982680593af2/prek-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:9cebca8c15da4f1d6e3a25e6ae0611425c8596e926222050f2588c390e42df8a", size = 5732725 }, - { url = "https://files.pythonhosted.org/packages/ca/a3/329bd910e7e5d9d0eb5e571f3ba48023213744e78411afb81f5ef8356cab/prek-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8742ac26363e74c855df6215a709d5db183204d00ac0f1a722b13aed4da3cd0", size = 5457953 }, - { url = "https://files.pythonhosted.org/packages/3d/f8/d642990513d9707398506bad45d39173d84266231f7d919899f694aefe2c/prek-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2b7c8710546a1e894afa7ab022030cd4e21f1ee7ffb301b4360773d22f1f00f", size = 5860556 }, - { url = "https://files.pythonhosted.org/packages/8d/17/a2e29cb278503a8c18612d8a62a15020648dc768e2e94bc4b4d4c9411e07/prek-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e02bd4d5e05c500e4d9f70f024e30d13aa361dc490724b7f476d2e35542c239f", size = 6652492 }, - { url = "https://files.pythonhosted.org/packages/ab/10/ad3270b18135ee5d1af6f6cf4b0c8601b1cc2cb38d16e835081da820833a/prek-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a25041733de987a47e5a7bace47182a6f0e2ae5f960cb54c1d4630afd2591", size = 6113837 }, - { url = "https://files.pythonhosted.org/packages/59/d9/e8c201b9b41c4561673cea01c630ab604df89d13e952f87dbcb807d32588/prek-0.4.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:0b04a0f36d07474f2a9fc5b1ba1197a1b326b2b211f39cd74cf0d4613545f7f4", size = 5729155 }, - { url = "https://files.pythonhosted.org/packages/e8/cd/227b0494fcbc91e8fe15c2a4db9e6dfff95314ef38db3e40e6ea96db249d/prek-0.4.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f032ccbe2d6edc345f81a6d772c18cc169d63c27b5a8292bfe416b352bdfee57", size = 5590775 }, - { url = "https://files.pythonhosted.org/packages/cc/e0/9d750b9cf21ece884afdc15668d0f005a36588fe1b0bb5ff4a8112ab51cb/prek-0.4.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:bad3586fcea3e913f0edf2e8f132f97889e03976b7ee3d120fd294ad4e89a5eb", size = 5437864 }, - { url = "https://files.pythonhosted.org/packages/3a/48/e2e5c0299590ad18a253c0ac09508b615baa1b382010c511186572f711d3/prek-0.4.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4058638532c6dcbf0076d23b9264cbdd9f0f0e320762e237a6b9e4e4b854a766", size = 5718579 }, - { url = "https://files.pythonhosted.org/packages/54/48/7fb3d4e7f664d1ce8ae35ec553872ffddf9fab4c5081735fdaae610b1e7c/prek-0.4.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:619bab14071670249777deea0cc0b29d904c4a514cf33b20e583900a544f0399", size = 6231622 }, - { url = "https://files.pythonhosted.org/packages/46/c0/a4ddbf38034afe67cfa97c4bd81c86429ada098e7c323218d9f9fd061566/prek-0.4.4-py3-none-win32.whl", hash = "sha256:143154b329c05b2f9fa3230e604d02d9c4297dd43f96135a8ba166772e8ecd60", size = 5240317 }, - { url = "https://files.pythonhosted.org/packages/bc/8c/fe97b5b095187bb2f93bbe406bccf108c879e5e4c83f165809b0d16ce0fb/prek-0.4.4-py3-none-win_amd64.whl", hash = "sha256:c38c5140ae2ea55ebb02e6ca590a416664ea1af287cdd21f54daeec53a81015a", size = 5626104 }, - { url = "https://files.pythonhosted.org/packages/25/63/3586226d536796e65f8e725b531d6104e55caaa18659bdcb512661629586/prek-0.4.4-py3-none-win_arm64.whl", hash = "sha256:3efa28fb37b9ddbafb7759da8d497f0d36cf02a05816e15d6541f5669d5d2114", size = 5470399 }, + { url = "https://files.pythonhosted.org/packages/06/9f/68a577888edf7f2647a652b02899508ccd84e57ce1f79c51a44edfd308d7/prek-0.4.4-py3-none-linux_armv6l.whl", hash = "sha256:23cfd96a25de1c93e3c43c746643b80489e3b2fa49ca9c0ffd6022e51535c900", size = 5550271, upload-time = "2026-06-04T07:26:17.834Z" }, + { url = "https://files.pythonhosted.org/packages/35/b8/5427a0023116343a8d787b446536a7fddfa5db7eec7713dd05618da2bdfe/prek-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a427b792c4436f49732b1f6ebccf221fdcc6390c148474280da9c2c6eaabc9c4", size = 5910136, upload-time = "2026-06-04T07:26:20.616Z" }, + { url = "https://files.pythonhosted.org/packages/9d/4f/d751e90b7e768e472e054cd41cbe502589436ca9c1a13bfe4fa9513f9cde/prek-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b998038fc92c990e03147eb5b95b0f2c394517f8857ab911aac8e092f1b9b3ab", size = 5470124, upload-time = "2026-06-04T07:26:29.23Z" }, + { url = "https://files.pythonhosted.org/packages/c6/fe/e73241c5777b6f9b6b95132febbd27f9be9e89912e9e93c0982680593af2/prek-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:9cebca8c15da4f1d6e3a25e6ae0611425c8596e926222050f2588c390e42df8a", size = 5732725, upload-time = "2026-06-04T07:26:19.133Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a3/329bd910e7e5d9d0eb5e571f3ba48023213744e78411afb81f5ef8356cab/prek-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8742ac26363e74c855df6215a709d5db183204d00ac0f1a722b13aed4da3cd0", size = 5457953, upload-time = "2026-06-04T07:26:23.41Z" }, + { url = "https://files.pythonhosted.org/packages/3d/f8/d642990513d9707398506bad45d39173d84266231f7d919899f694aefe2c/prek-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2b7c8710546a1e894afa7ab022030cd4e21f1ee7ffb301b4360773d22f1f00f", size = 5860556, upload-time = "2026-06-04T07:26:11.692Z" }, + { url = "https://files.pythonhosted.org/packages/8d/17/a2e29cb278503a8c18612d8a62a15020648dc768e2e94bc4b4d4c9411e07/prek-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e02bd4d5e05c500e4d9f70f024e30d13aa361dc490724b7f476d2e35542c239f", size = 6652492, upload-time = "2026-06-04T07:26:09.962Z" }, + { url = "https://files.pythonhosted.org/packages/ab/10/ad3270b18135ee5d1af6f6cf4b0c8601b1cc2cb38d16e835081da820833a/prek-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a25041733de987a47e5a7bace47182a6f0e2ae5f960cb54c1d4630afd2591", size = 6113837, upload-time = "2026-06-04T07:26:24.873Z" }, + { url = "https://files.pythonhosted.org/packages/59/d9/e8c201b9b41c4561673cea01c630ab604df89d13e952f87dbcb807d32588/prek-0.4.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:0b04a0f36d07474f2a9fc5b1ba1197a1b326b2b211f39cd74cf0d4613545f7f4", size = 5729155, upload-time = "2026-06-04T07:26:26.194Z" }, + { url = "https://files.pythonhosted.org/packages/e8/cd/227b0494fcbc91e8fe15c2a4db9e6dfff95314ef38db3e40e6ea96db249d/prek-0.4.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f032ccbe2d6edc345f81a6d772c18cc169d63c27b5a8292bfe416b352bdfee57", size = 5590775, upload-time = "2026-06-04T07:26:22.038Z" }, + { url = "https://files.pythonhosted.org/packages/cc/e0/9d750b9cf21ece884afdc15668d0f005a36588fe1b0bb5ff4a8112ab51cb/prek-0.4.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:bad3586fcea3e913f0edf2e8f132f97889e03976b7ee3d120fd294ad4e89a5eb", size = 5437864, upload-time = "2026-06-04T07:26:30.673Z" }, + { url = "https://files.pythonhosted.org/packages/3a/48/e2e5c0299590ad18a253c0ac09508b615baa1b382010c511186572f711d3/prek-0.4.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4058638532c6dcbf0076d23b9264cbdd9f0f0e320762e237a6b9e4e4b854a766", size = 5718579, upload-time = "2026-06-04T07:26:27.786Z" }, + { url = "https://files.pythonhosted.org/packages/54/48/7fb3d4e7f664d1ce8ae35ec553872ffddf9fab4c5081735fdaae610b1e7c/prek-0.4.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:619bab14071670249777deea0cc0b29d904c4a514cf33b20e583900a544f0399", size = 6231622, upload-time = "2026-06-04T07:26:16.309Z" }, + { url = "https://files.pythonhosted.org/packages/46/c0/a4ddbf38034afe67cfa97c4bd81c86429ada098e7c323218d9f9fd061566/prek-0.4.4-py3-none-win32.whl", hash = "sha256:143154b329c05b2f9fa3230e604d02d9c4297dd43f96135a8ba166772e8ecd60", size = 5240317, upload-time = "2026-06-04T07:26:08.726Z" }, + { url = "https://files.pythonhosted.org/packages/bc/8c/fe97b5b095187bb2f93bbe406bccf108c879e5e4c83f165809b0d16ce0fb/prek-0.4.4-py3-none-win_amd64.whl", hash = "sha256:c38c5140ae2ea55ebb02e6ca590a416664ea1af287cdd21f54daeec53a81015a", size = 5626104, upload-time = "2026-06-04T07:26:14.81Z" }, + { url = "https://files.pythonhosted.org/packages/25/63/3586226d536796e65f8e725b531d6104e55caaa18659bdcb512661629586/prek-0.4.4-py3-none-win_arm64.whl", hash = "sha256:3efa28fb37b9ddbafb7759da8d497f0d36cf02a05816e15d6541f5669d5d2114", size = 5470399, upload-time = "2026-06-04T07:26:13.231Z" }, ] [[package]] @@ -1324,79 +1327,79 @@ 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 }, + { 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 = "protobuf" version = "7.35.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/60/fd/5b1491d9e4b586d621c54f4c36b888714164b6875f8d6afa3f9072906a51/protobuf-7.35.0.tar.gz", hash = "sha256:a2efd84605f41e559f1881b0912b44099d0a2ac9bf46b3474823f10fb393b0e6", size = 458677 } +sdist = { url = "https://files.pythonhosted.org/packages/60/fd/5b1491d9e4b586d621c54f4c36b888714164b6875f8d6afa3f9072906a51/protobuf-7.35.0.tar.gz", hash = "sha256:a2efd84605f41e559f1881b0912b44099d0a2ac9bf46b3474823f10fb393b0e6", size = 458677, upload-time = "2026-05-19T23:02:29.197Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/ee/93d06e358a4aa32280b00e722d3ea0a1f25fc3cc5778d80581c9cca2c10e/protobuf-7.35.0-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:66be6c513931c794fa92c080ffee41671390da3d79da219cf9c0c0907f035dda", size = 433225 }, - { url = "https://files.pythonhosted.org/packages/8b/39/1c76c2da93f3c507e958e0aecee2391cc44d4625de6c728bbc555195b5a8/protobuf-7.35.0-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:fcbe42a4ac09d3ec9c987ddfcd956afd0b15f1ff613bd8371bde9405ffd5c8e5", size = 328847 }, - { url = "https://files.pythonhosted.org/packages/91/1a/39f7ce90a238c1a987a4d81ec26379e02ca0aff367de68e4a1fa474215b9/protobuf-7.35.0-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:4cbf5cc286130e06a6c9bbefac442431173906dfcc979712183d4adcc01b37ee", size = 344030 }, - { url = "https://files.pythonhosted.org/packages/70/5b/6baf9008817964454055ff3fe65f1de0b5f1e26c80c82f7fb108b7cd4ea3/protobuf-7.35.0-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:6c0f98f10c8a05ea30f8993dfef2de093d27b490fdae78bb60c8343795d55011", size = 327130 }, - { url = "https://files.pythonhosted.org/packages/8e/e5/e46adb0badc388bfb84877a5f9f026aff63f60e611016cf64dbe77e05446/protobuf-7.35.0-cp310-abi3-win32.whl", hash = "sha256:4c4617b83ade0e279d1d2bfe04025a1adb87f9ed657de038620dc0ff959357f6", size = 428946 }, - { url = "https://files.pythonhosted.org/packages/a7/ab/547fbd9e16d879dd13c167478f8ae0a83a428008ca07a5e06acdc23ad473/protobuf-7.35.0-cp310-abi3-win_amd64.whl", hash = "sha256:f05bcadf9a2a6b8dda047007075135fb7d08c73d9177aabc067e1be46881a201", size = 439996 }, - { url = "https://files.pythonhosted.org/packages/b8/ef/50433d346c56657a70d27f156c7b349ac59a068b01de4eb796e747eecc43/protobuf-7.35.0-py3-none-any.whl", hash = "sha256:c13f325cf242bad135c350629eeb5d54b24228eb472fb3e2e9ebbd4c5dc20ca0", size = 171659 }, + { url = "https://files.pythonhosted.org/packages/83/ee/93d06e358a4aa32280b00e722d3ea0a1f25fc3cc5778d80581c9cca2c10e/protobuf-7.35.0-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:66be6c513931c794fa92c080ffee41671390da3d79da219cf9c0c0907f035dda", size = 433225, upload-time = "2026-05-19T23:02:19.884Z" }, + { url = "https://files.pythonhosted.org/packages/8b/39/1c76c2da93f3c507e958e0aecee2391cc44d4625de6c728bbc555195b5a8/protobuf-7.35.0-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:fcbe42a4ac09d3ec9c987ddfcd956afd0b15f1ff613bd8371bde9405ffd5c8e5", size = 328847, upload-time = "2026-05-19T23:02:22.3Z" }, + { url = "https://files.pythonhosted.org/packages/91/1a/39f7ce90a238c1a987a4d81ec26379e02ca0aff367de68e4a1fa474215b9/protobuf-7.35.0-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:4cbf5cc286130e06a6c9bbefac442431173906dfcc979712183d4adcc01b37ee", size = 344030, upload-time = "2026-05-19T23:02:23.591Z" }, + { url = "https://files.pythonhosted.org/packages/70/5b/6baf9008817964454055ff3fe65f1de0b5f1e26c80c82f7fb108b7cd4ea3/protobuf-7.35.0-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:6c0f98f10c8a05ea30f8993dfef2de093d27b490fdae78bb60c8343795d55011", size = 327130, upload-time = "2026-05-19T23:02:24.637Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e5/e46adb0badc388bfb84877a5f9f026aff63f60e611016cf64dbe77e05446/protobuf-7.35.0-cp310-abi3-win32.whl", hash = "sha256:4c4617b83ade0e279d1d2bfe04025a1adb87f9ed657de038620dc0ff959357f6", size = 428946, upload-time = "2026-05-19T23:02:25.741Z" }, + { url = "https://files.pythonhosted.org/packages/a7/ab/547fbd9e16d879dd13c167478f8ae0a83a428008ca07a5e06acdc23ad473/protobuf-7.35.0-cp310-abi3-win_amd64.whl", hash = "sha256:f05bcadf9a2a6b8dda047007075135fb7d08c73d9177aabc067e1be46881a201", size = 439996, upload-time = "2026-05-19T23:02:26.808Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ef/50433d346c56657a70d27f156c7b349ac59a068b01de4eb796e747eecc43/protobuf-7.35.0-py3-none-any.whl", hash = "sha256:c13f325cf242bad135c350629eeb5d54b24228eb472fb3e2e9ebbd4c5dc20ca0", size = 171659, upload-time = "2026-05-19T23:02:27.842Z" }, ] [[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/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595 }, - { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082 }, - { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476 }, - { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062 }, - { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893 }, - { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589 }, - { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664 }, - { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087 }, - { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383 }, - { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210 }, - { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228 }, - { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284 }, - { 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 }, +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/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { 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 = "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 = "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]] @@ -1409,9 +1412,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775 } +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262 }, + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, ] [[package]] @@ -1421,121 +1424,129 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872 }, - { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255 }, - { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827 }, - { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051 }, - { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314 }, - { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146 }, - { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685 }, - { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420 }, - { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122 }, - { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573 }, - { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139 }, - { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433 }, - { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513 }, - { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114 }, - { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298 }, - { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158 }, - { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724 }, - { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742 }, - { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418 }, - { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274 }, - { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940 }, - { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516 }, - { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854 }, - { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306 }, - { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044 }, - { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133 }, - { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464 }, - { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823 }, - { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919 }, - { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604 }, - { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306 }, - { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906 }, - { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802 }, - { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446 }, - { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757 }, - { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275 }, - { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467 }, - { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417 }, - { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782 }, - { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782 }, - { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334 }, - { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986 }, - { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693 }, - { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819 }, - { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411 }, - { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079 }, - { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179 }, - { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926 }, - { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785 }, - { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733 }, - { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534 }, - { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732 }, - { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627 }, - { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141 }, - { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325 }, - { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990 }, - { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978 }, - { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354 }, - { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238 }, - { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251 }, - { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593 }, - { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226 }, - { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605 }, - { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777 }, - { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641 }, - { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404 }, - { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219 }, - { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594 }, - { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542 }, - { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146 }, - { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309 }, - { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736 }, - { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575 }, - { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624 }, - { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325 }, - { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782 }, - { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146 }, - { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492 }, - { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604 }, - { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828 }, - { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000 }, - { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286 }, - { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071 }, +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, ] [[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 = "pyrsistent" version = "0.20.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ce/3a/5031723c09068e9c8c2f0bc25c3a9245f2b1d1aea8396c787a408f2b95ca/pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", size = 103642 } +sdist = { url = "https://files.pythonhosted.org/packages/ce/3a/5031723c09068e9c8c2f0bc25c3a9245f2b1d1aea8396c787a408f2b95ca/pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", size = 103642, upload-time = "2023-10-25T21:06:56.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/63/7544dc7d0953294882a5c587fb1b10a26e0c23d9b92281a14c2514bac1f7/pyrsistent-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", size = 83481 }, - { url = "https://files.pythonhosted.org/packages/ae/a0/49249bc14d71b1bf2ffe89703acfa86f2017c25cfdabcaea532b8c8a5810/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", size = 120222 }, - { url = "https://files.pythonhosted.org/packages/a1/94/9808e8c9271424120289b9028a657da336ad7e43da0647f62e4f6011d19b/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", size = 120002 }, - { url = "https://files.pythonhosted.org/packages/3f/f6/9ecfb78b2fc8e2540546db0fe19df1fae0f56664a5958c21ff8861b0f8da/pyrsistent-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6288b3fa6622ad8a91e6eb759cfc48ff3089e7c17fb1d4c59a919769314af224", size = 116850 }, - { url = "https://files.pythonhosted.org/packages/83/c8/e6d28bc27a0719f8eaae660357df9757d6e9ca9be2691595721de9e8adfc/pyrsistent-0.20.0-cp311-cp311-win32.whl", hash = "sha256:7d29c23bdf6e5438c755b941cef867ec2a4a172ceb9f50553b6ed70d50dfd656", size = 60775 }, - { url = "https://files.pythonhosted.org/packages/98/87/c6ef52ff30388f357922d08de012abdd3dc61e09311d88967bdae23ab657/pyrsistent-0.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:59a89bccd615551391f3237e00006a26bcf98a4d18623a19909a2c48b8e986ee", size = 63306 }, - { url = "https://files.pythonhosted.org/packages/15/ee/ff2ed52032ac1ce2e7ba19e79bd5b05d152ebfb77956cf08fcd6e8d760ea/pyrsistent-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e", size = 83537 }, - { url = "https://files.pythonhosted.org/packages/80/f1/338d0050b24c3132bcfc79b68c3a5f54bce3d213ecef74d37e988b971d8a/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a14798c3005ec892bbada26485c2eea3b54109cb2533713e355c806891f63c5e", size = 122615 }, - { url = "https://files.pythonhosted.org/packages/07/3a/e56d6431b713518094fae6ff833a04a6f49ad0fbe25fb7c0dc7408e19d20/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b14decb628fac50db5e02ee5a35a9c0772d20277824cfe845c8a8b717c15daa3", size = 122335 }, - { url = "https://files.pythonhosted.org/packages/4a/bb/5f40a4d5e985a43b43f607250e766cdec28904682c3505eb0bd343a4b7db/pyrsistent-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e2c116cc804d9b09ce9814d17df5edf1df0c624aba3b43bc1ad90411487036d", size = 118510 }, - { url = "https://files.pythonhosted.org/packages/1c/13/e6a22f40f5800af116c02c28e29f15c06aa41cb2036f6a64ab124647f28b/pyrsistent-0.20.0-cp312-cp312-win32.whl", hash = "sha256:e78d0c7c1e99a4a45c99143900ea0546025e41bb59ebc10182e947cf1ece9174", size = 60865 }, - { url = "https://files.pythonhosted.org/packages/75/ef/2fa3b55023ec07c22682c957808f9a41836da4cd006b5f55ec76bf0fbfa6/pyrsistent-0.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:4021a7f963d88ccd15b523787d18ed5e5269ce57aa4037146a2377ff607ae87d", size = 63239 }, - { url = "https://files.pythonhosted.org/packages/23/88/0acd180010aaed4987c85700b7cc17f9505f3edb4e5873e4dc67f613e338/pyrsistent-0.20.0-py3-none-any.whl", hash = "sha256:c55acc4733aad6560a7f5f818466631f07efc001fd023f34a6c203f8b6df0f0b", size = 58106 }, + { url = "https://files.pythonhosted.org/packages/df/63/7544dc7d0953294882a5c587fb1b10a26e0c23d9b92281a14c2514bac1f7/pyrsistent-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", size = 83481, upload-time = "2023-10-25T21:06:15.238Z" }, + { url = "https://files.pythonhosted.org/packages/ae/a0/49249bc14d71b1bf2ffe89703acfa86f2017c25cfdabcaea532b8c8a5810/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", size = 120222, upload-time = "2023-10-25T21:06:17.144Z" }, + { url = "https://files.pythonhosted.org/packages/a1/94/9808e8c9271424120289b9028a657da336ad7e43da0647f62e4f6011d19b/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", size = 120002, upload-time = "2023-10-25T21:06:18.727Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f6/9ecfb78b2fc8e2540546db0fe19df1fae0f56664a5958c21ff8861b0f8da/pyrsistent-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6288b3fa6622ad8a91e6eb759cfc48ff3089e7c17fb1d4c59a919769314af224", size = 116850, upload-time = "2023-10-25T21:06:20.424Z" }, + { url = "https://files.pythonhosted.org/packages/83/c8/e6d28bc27a0719f8eaae660357df9757d6e9ca9be2691595721de9e8adfc/pyrsistent-0.20.0-cp311-cp311-win32.whl", hash = "sha256:7d29c23bdf6e5438c755b941cef867ec2a4a172ceb9f50553b6ed70d50dfd656", size = 60775, upload-time = "2023-10-25T21:06:21.815Z" }, + { url = "https://files.pythonhosted.org/packages/98/87/c6ef52ff30388f357922d08de012abdd3dc61e09311d88967bdae23ab657/pyrsistent-0.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:59a89bccd615551391f3237e00006a26bcf98a4d18623a19909a2c48b8e986ee", size = 63306, upload-time = "2023-10-25T21:06:22.874Z" }, + { url = "https://files.pythonhosted.org/packages/15/ee/ff2ed52032ac1ce2e7ba19e79bd5b05d152ebfb77956cf08fcd6e8d760ea/pyrsistent-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e", size = 83537, upload-time = "2023-10-25T21:06:24.17Z" }, + { url = "https://files.pythonhosted.org/packages/80/f1/338d0050b24c3132bcfc79b68c3a5f54bce3d213ecef74d37e988b971d8a/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a14798c3005ec892bbada26485c2eea3b54109cb2533713e355c806891f63c5e", size = 122615, upload-time = "2023-10-25T21:06:25.815Z" }, + { url = "https://files.pythonhosted.org/packages/07/3a/e56d6431b713518094fae6ff833a04a6f49ad0fbe25fb7c0dc7408e19d20/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b14decb628fac50db5e02ee5a35a9c0772d20277824cfe845c8a8b717c15daa3", size = 122335, upload-time = "2023-10-25T21:06:28.631Z" }, + { url = "https://files.pythonhosted.org/packages/4a/bb/5f40a4d5e985a43b43f607250e766cdec28904682c3505eb0bd343a4b7db/pyrsistent-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e2c116cc804d9b09ce9814d17df5edf1df0c624aba3b43bc1ad90411487036d", size = 118510, upload-time = "2023-10-25T21:06:30.718Z" }, + { url = "https://files.pythonhosted.org/packages/1c/13/e6a22f40f5800af116c02c28e29f15c06aa41cb2036f6a64ab124647f28b/pyrsistent-0.20.0-cp312-cp312-win32.whl", hash = "sha256:e78d0c7c1e99a4a45c99143900ea0546025e41bb59ebc10182e947cf1ece9174", size = 60865, upload-time = "2023-10-25T21:06:32.742Z" }, + { url = "https://files.pythonhosted.org/packages/75/ef/2fa3b55023ec07c22682c957808f9a41836da4cd006b5f55ec76bf0fbfa6/pyrsistent-0.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:4021a7f963d88ccd15b523787d18ed5e5269ce57aa4037146a2377ff607ae87d", size = 63239, upload-time = "2023-10-25T21:06:34.035Z" }, + { url = "https://files.pythonhosted.org/packages/23/88/0acd180010aaed4987c85700b7cc17f9505f3edb4e5873e4dc67f613e338/pyrsistent-0.20.0-py3-none-any.whl", hash = "sha256:c55acc4733aad6560a7f5f818466631f07efc001fd023f34a6c203f8b6df0f0b", size = 58106, upload-time = "2023-10-25T21:06:54.387Z" }, ] [[package]] @@ -1549,9 +1560,9 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165 } +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249 }, + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, ] [[package]] @@ -1561,18 +1572,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 = "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]] @@ -1586,62 +1597,62 @@ dependencies = [ { name = "networkx" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/4b/e37e4e5d5ee1179694917b445768bdbfb084f5a59ecd38089d3413d4c70f/pyvis-0.3.2-py3-none-any.whl", hash = "sha256:5720c4ca8161dc5d9ab352015723abb7a8bb8fb443edeb07f7a322db34a97555", size = 756038 }, + { url = "https://files.pythonhosted.org/packages/ab/4b/e37e4e5d5ee1179694917b445768bdbfb084f5a59ecd38089d3413d4c70f/pyvis-0.3.2-py3-none-any.whl", hash = "sha256:5720c4ca8161dc5d9ab352015723abb7a8bb8fb443edeb07f7a322db34a97555", size = 756038, upload-time = "2023-02-24T20:29:46.758Z" }, ] [[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 }, - { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063 }, - { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973 }, - { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116 }, - { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011 }, - { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870 }, - { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089 }, - { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181 }, - { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, - { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, - { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, - { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 }, - { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 }, - { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 }, - { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159 }, - { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626 }, - { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613 }, - { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115 }, - { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 }, - { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 }, - { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 }, - { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814 }, - { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809 }, - { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454 }, - { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355 }, - { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175 }, - { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228 }, - { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194 }, - { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 }, - { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 }, - { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108 }, - { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641 }, - { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901 }, - { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132 }, - { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261 }, - { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272 }, - { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923 }, - { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 }, - { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 }, +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, 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" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] [[package]] @@ -1651,55 +1662,55 @@ 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/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436 }, - { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301 }, - { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197 }, - { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275 }, - { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469 }, - { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961 }, - { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282 }, - { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468 }, - { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394 }, - { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964 }, - { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029 }, - { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541 }, - { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197 }, - { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175 }, - { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427 }, - { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929 }, - { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193 }, - { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388 }, - { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316 }, - { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, - { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, - { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, - { 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/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, + { 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]] @@ -1715,87 +1726,87 @@ dependencies = [ { name = "protobuf" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/12/a2/d4cd7fbc41fef2b308f10ed3f9c5bb1cf40f338ff3a0e37692325ba28b77/qubed-0.3.1.tar.gz", hash = "sha256:fadcf4be1668f0cfc58fcf430a15613e0f53f0df4e07fd05694c9caba39e8258", size = 15152020 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/53/ae/8817f6db21335200da65434aaf1adb7ab86c38f7ac88cfbaaab9a50df335/qubed-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8a5ba2af717c5225b733ec6695bc848a6507e5590ea47310c36a204b03604da8", size = 392905 }, - { url = "https://files.pythonhosted.org/packages/3c/b2/253ddba74f5703677d5ee2232b1925578266e4023f7a3aaec6a17e5fd6b4/qubed-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2f0ac5b238de53baac98ea66e1e2a21fa729baf69789fb657b578e7d1dbda5d", size = 379845 }, - { url = "https://files.pythonhosted.org/packages/95/53/06c4c8f59b587b5ce087c796d362ecd57fea6a67fb73f380c7f8f4b5403e/qubed-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6de0a6783af5f6342f7f124c5a159fc0b84c78d95d2866801d9a280cba447a46", size = 417330 }, - { url = "https://files.pythonhosted.org/packages/a1/43/33caa7eefa46c21c6b9b3d3dd96f56772a46530a27577c63a273699b0bb1/qubed-0.3.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e2f16a2c6fbf52049cde9931d2cb6777e7b63c9a2e68b949a7bd06f6bbd6e66", size = 425131 }, - { url = "https://files.pythonhosted.org/packages/e9/01/7165694535259dfacff7d78377eb66b6e4187b69decbc81558a7170a8aa4/qubed-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2202d3f948231254d6c0ad19d10577ed663983c08b92a9ca8da00989465b013", size = 544973 }, - { url = "https://files.pythonhosted.org/packages/f3/85/9a7914ccfea96d24f15df68a93dbb99ff14b4e75f1dd326df58286b38a20/qubed-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a783825a8b5415ac4ba15d3495a8330a4d78882715b90869f66ae1ee147826a4", size = 453565 }, - { url = "https://files.pythonhosted.org/packages/b9/32/9c7cf964bea589da50bb572ee3bcd07641bf7e75961a14558dbee4b1a85c/qubed-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2edde67d3710ce780b85b18eab0749ebe1c77f92251e3d0c6efbd88ae7d661", size = 428033 }, - { url = "https://files.pythonhosted.org/packages/c4/2d/458d060268a5a38635994b854507e01038186a4d96cc5b5112680d70ca3c/qubed-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c576d6bf4fd6e6b6e44c5ef67b107fb3a0bf75bac89f25eeffdb7cd846e081cb", size = 451273 }, - { url = "https://files.pythonhosted.org/packages/be/2a/abfbeaa8590c39af25e71ff6c84fc3dbd77a18629046b2ae5dc05f1b5e9f/qubed-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ae99b8d994a26452b308ecc2e7f40b3209bdcc827a9966c9451dc6e124aab0a1", size = 592940 }, - { url = "https://files.pythonhosted.org/packages/59/33/84d0b4d21a5153131b4e8a321bb959ab0309a220a875001bcb3901393564/qubed-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b0819d34638e5a31891576feaa6889f4b16aa0f159876c83694281c86b628363", size = 694999 }, - { url = "https://files.pythonhosted.org/packages/6f/87/8d1dea898d0e70a46a9c788fee66c07fdfed08ab46b99849962458a1945e/qubed-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c9a047da1cd4ee8b6c8e84e8d26cae383c46033ae7af4c8b8641a36f5b1d9c43", size = 662808 }, - { url = "https://files.pythonhosted.org/packages/35/61/ac065cd10f6109e27b57b498d539be67ac1e594e7ede519124696d5175be/qubed-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1db61763554caf12adf40095fc6fb951bd115665ac692655ceed3c3dc9aaeeeb", size = 633806 }, - { url = "https://files.pythonhosted.org/packages/72/55/3761a4acd6169fed3cbe5cf809efada6ef14aa9c6cdb7007033a5f8f300b/qubed-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8a3734e6ee8954da87ebbf319402a0ab0e16e0d64a10b5b1a1e6ee13d0eec244", size = 274537 }, - { url = "https://files.pythonhosted.org/packages/f5/e1/ade8497e74afd3e6dae8ea1d79fec46ea0c284ae25e6f96ccb1b5c687496/qubed-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2f7ad49d36086114a9c48c5bbd774ec2fe9e4fbe7064e5af70eeeed1a1696444", size = 388382 }, - { url = "https://files.pythonhosted.org/packages/48/96/00629bd9796c7438b613dbeca97ae4349694ce45a9f1998ff45d3f3f7aab/qubed-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6832cc6010c2f0fffbca3751c0204876da03e5feae294d2896acaea9482f3e6", size = 376862 }, - { url = "https://files.pythonhosted.org/packages/f5/ae/b94eee7a2de48c1fe5fcff2abeb1f0b66f0e2959d8f8319b358814be896d/qubed-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f9273475076dafcb45bb8a510dc7a3a44c81d486edaf8fda88a3da414a318cb", size = 416993 }, - { url = "https://files.pythonhosted.org/packages/ea/cc/832aa8537960349d4bb043762d57171e1256611ebda815381cabb7f92ce1/qubed-0.3.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8825a2d7e0ddaf3b841f3a746669ca8a195a86e4a0a04a5a0ce26987f4b976b1", size = 424594 }, - { url = "https://files.pythonhosted.org/packages/d8/cd/21bc5fed290401da7774fc05b32cf045dae07b208b3169924ecbb59069fb/qubed-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0758cd417772386f7ba3972c6b4a23258569e654ef5cc77f15d0d19c1db8d7d8", size = 544629 }, - { url = "https://files.pythonhosted.org/packages/8b/f1/0c291803b21b811c1398d8d1133dc3fabc2d6a8aab1804c2b8788af5eaee/qubed-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5f3999551b6d888320002a7c7c978c75efbce8f2ad449a2ddafbf3df89f4cfd", size = 453413 }, - { url = "https://files.pythonhosted.org/packages/ac/84/8ce812bae0fc382715eaf831bc3d6fbdd10683e1c9d47e0b7f0b62df60b7/qubed-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71e33a38e02b632efb454ae2ca90e818201e6f6706485f2ac1d45e69f977f1c", size = 427902 }, - { url = "https://files.pythonhosted.org/packages/69/40/40845475c5153521783adbf80f2455fbb33ff625c29b6ba8e57555970afc/qubed-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9de33e0a06bde6068ef1f2dc1df354826c9a1e63e8263cba4be55db3e24dd7a", size = 450608 }, - { url = "https://files.pythonhosted.org/packages/6b/c0/100edf7a233d917f2979fbbe3a18e20d515df4f7564847452e71cc8e914b/qubed-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4ed3902eaf6ffaf248cdd680f52cc48ca7a9c6a259738c013c382d6d9ae9a0bf", size = 592941 }, - { url = "https://files.pythonhosted.org/packages/ec/50/18bd283574ad125576b267e37cb906399abb80a3b30eda70cf629ea0d65b/qubed-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fb8344fd7942086f1878c355f5fa3bfd7241022b3264384d72af9dc21083da9e", size = 694756 }, - { url = "https://files.pythonhosted.org/packages/c7/44/c8154bb943855c3def9537b9643a901e4be827581b1240a69846ff6811a5/qubed-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a3c85eebed4bc4b229793fb27a2cad19caddd36df4115cbe62e3f2762ac94a6", size = 662092 }, - { url = "https://files.pythonhosted.org/packages/19/69/017821dda7e5fe9b69cf5ae962668c632c83448f47c4be1a1256ac7c7fae/qubed-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2e2ad894d86d07181d7345c7555835c3fbbf16655a3adbc15368b44b407c570", size = 634032 }, - { url = "https://files.pythonhosted.org/packages/7b/be/3e853dd96781110b82e2d5ba51a14884ef7518a85578f19db1fdfee5f74e/qubed-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:71541f0d98df10e22e40c11f54867df3272436f87758e1c10c49d074571b821d", size = 274558 }, - { url = "https://files.pythonhosted.org/packages/f6/78/00920a7dab93468c6abd4364900372adf5a6e02373874fee8a048b173e2f/qubed-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0982545641cb7877c25ceefc788e2e0c5918b8d942419b1b3ebecf8ef64aa6c1", size = 388026 }, - { url = "https://files.pythonhosted.org/packages/17/32/763131474decd86745ba83d5c7c77dcb95fc6144e44d61ac26c4970c8bc3/qubed-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:26432bf22b7aeab036c763639c1874471eea8f58b69bcc789c746fcf6a0135e0", size = 376678 }, - { url = "https://files.pythonhosted.org/packages/ec/33/859744b54e692514c18d7d1c356b0dd49e01308990962b3d05edacf421f0/qubed-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5144c5f0e9929ef0219b5a06d43d58c5c111c165a21313f98892200d23a46e40", size = 417055 }, - { url = "https://files.pythonhosted.org/packages/7b/52/d3fcd58088922485566dac0c613ce54b5afb411a47ac1c0fc30f394e4d56/qubed-0.3.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7be7875347f1fab4342e503f69f2cf7ec77e23134c17ee119489a26c6abf81dc", size = 424312 }, - { url = "https://files.pythonhosted.org/packages/6b/46/0159a2f0f3a9ac907454cf5e7e9de53409470535feeab1f005a57cff9869/qubed-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6b44d86229cd4b43b524eab440ae8b3e4a1e7706815d9393c56bf02c09f25f4", size = 544218 }, - { url = "https://files.pythonhosted.org/packages/aa/06/b890c192d4d05a9ceeaacfec2c9ef1bc7f4ed5a9a88613442cd409a7103c/qubed-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0426c2cc15f126584a64df6e27ee0162d44d413493689218544b444972d67b2", size = 453095 }, - { url = "https://files.pythonhosted.org/packages/01/88/31e64cd98f079243157ced5d0a6ca3c0637e3e93982269bff5d6accd36fa/qubed-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04ed84be17ecff54a813b159b0ade5b6fe1daf9d0d3e8cce58160a71898de084", size = 427903 }, - { url = "https://files.pythonhosted.org/packages/a4/c3/6fcdde26e45c18dfaf67cad426580d9efd8b44b839db29755cc10dde7e52/qubed-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ee277521885d362a2f4282874aadaa7b5b021473cf18b62ccbab49d02490738", size = 450209 }, - { url = "https://files.pythonhosted.org/packages/87/63/8eb2f83b994ed59c6526f09b72fa8898188a0023ad0348d14bbcfdfc715c/qubed-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5e716bd15a5e614da853a0b835ad16a9c57a13f9243194abd4d7a4aabbf82dd0", size = 592620 }, - { url = "https://files.pythonhosted.org/packages/4a/be/4fe1e7634101016eef06843805633c9ec6b8e69bc40ef50190de4284271d/qubed-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:71f18b847fa9bc205368dcd176cc27e1c5c0cd4cfd74d3e2770ba422b3b14ff0", size = 694654 }, - { url = "https://files.pythonhosted.org/packages/7c/17/84cf9d4615ea0e29d8709346ffd5bed5bcfdb29baf8101949181c5239cc8/qubed-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:eeeb96bf930b2bd944c0b3145c18dda22673dcbe98af1b4fca0429c96eeefae3", size = 661802 }, - { url = "https://files.pythonhosted.org/packages/7c/27/4826d44a5a47ed4d3ba3d64f519d6ce65511239dbd613081a2b5b03a425e/qubed-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c2a3519538aae695c2a129006010d1291bf387e86b2477587dd421d07d0d111", size = 634066 }, - { url = "https://files.pythonhosted.org/packages/c9/cf/97f4ea7ca129eea1d97139e56c3af415f082f6b063a0d3da537c4cf77984/qubed-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:677f12a55d20a43beade986c45508668d93762072a7f8710dc768263832305f2", size = 274355 }, - { url = "https://files.pythonhosted.org/packages/1c/25/2d77b2aa954c7581dfe614e4edc9e213e0bc537a791567955cc89c908ea3/qubed-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bce5c3ca22b4125f7b2337072892562949c66b22060f1458f0ffc8914dea664", size = 415858 }, - { url = "https://files.pythonhosted.org/packages/cd/38/145f404396aedeb65ea110d14a74f02ab5f2c64fcf0441f196a8b509394c/qubed-0.3.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c7eeb24e4d156df188000388b8b93b8659b8ff56a3a0204eb868a63d43c9fb5d", size = 423639 }, - { url = "https://files.pythonhosted.org/packages/52/54/04beadee9ce2fb42d9cd9dead26aebfd614f01d9c57287b07406abfbc567/qubed-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57bb442de810879c2e0801b6b9e32e9ec30d37dbd02b464809523ea5294fe655", size = 543014 }, - { url = "https://files.pythonhosted.org/packages/e6/f6/37e2e0efb56b29f16d533b0bfa56fdbff94289e527e0a529e9a6547ef8b7/qubed-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:738ab71e1a714f3a3e3110e3eaac2778a5684f21515196b6b3c83843f9c5243b", size = 452627 }, - { url = "https://files.pythonhosted.org/packages/e9/aa/699a433b495665b99c4bb2dd37f4c8a15147dc955174d4a4eec3a2105fc7/qubed-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:af5e093933172f0820860b2fb4d909a6bb8b17043bf40c143088bf1529da0d26", size = 591409 }, - { url = "https://files.pythonhosted.org/packages/b2/fe/0d701edc6db7c16f50c3d41387791eae38c475d3f63677823ec5549a9b1d/qubed-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f0a5caf87d9fc853adde336759ef88e174be84b74bc29d582788fe70735dbba4", size = 694115 }, - { url = "https://files.pythonhosted.org/packages/dd/5b/3a91f3ee0de53bcdb4a6c80590243952acb891c088ddcaf066d4a209d0df/qubed-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8144ab517ef48f43c49b97d07c05d230015222f8c091bb1daac00ef62bfc74d9", size = 661144 }, - { url = "https://files.pythonhosted.org/packages/34/3e/28ab2031409540bc38f3f6e2db1d546b9d7c242755b6bf5c1ad4b7cab85a/qubed-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e164e030591f2ed0eb5525efe785ff04fc7080f0ef4ccfe8d83e25091006d709", size = 633167 }, - { url = "https://files.pythonhosted.org/packages/a3/90/8651f479d7a726bc5f25cb90f99f33420fec6355b71248eb9b266753bce9/qubed-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:49b0eec981057347991bc80b3886501ca45ee0e426843c0450a8b0710d444659", size = 387842 }, - { url = "https://files.pythonhosted.org/packages/1d/69/679e544a4fe1505b9f78f047ce1c81cf6db84b382c58d4a6ca46cfa48327/qubed-0.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97f9c034ae3ad1d7123e269c7fba225c20dbbaeebdd80803c77a69f3b010f8ff", size = 376202 }, - { url = "https://files.pythonhosted.org/packages/0b/1d/d4a5fa3a40e697f1ec8337e152cc241ec6aeff84f7514a6cfbee6b6536f5/qubed-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d154b12afffb5891beb06157b5bfc31e33d579d6a8682d866eb848bb18cc55f", size = 416737 }, - { url = "https://files.pythonhosted.org/packages/6e/66/efc34b57ee3d21334d6127b187e51a249a37484b707cbed393d464419d09/qubed-0.3.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac14223782c4f346167a23511408347cf2a5c109c07f4319a9eb8f08bb4cdd53", size = 424440 }, - { url = "https://files.pythonhosted.org/packages/c2/11/27f13777d9a4f2f0425c32cdc4f6fb528393e238768c185124abe15ff024/qubed-0.3.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e80a636152fa172ac298cb87bdae96412fa5f9e9a2149d1cb94bb4068508c941", size = 540728 }, - { url = "https://files.pythonhosted.org/packages/9a/9c/8ed6325f5c9c8ff96a41adef53f111bcf5dec51d2687afd2fac8504f19fc/qubed-0.3.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cb088a6846416ca092be5793c5191df97a94a3c3e5c43468be42b811ef14020", size = 453464 }, - { url = "https://files.pythonhosted.org/packages/b1/d6/c0dac0a00e3730130f897389d263042c26b2dd182cbffb2960b93c64007d/qubed-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a5e0cae1aba8bd95d020bc127bc404211c96a0ff66502f2bd5ff04a8fa06643", size = 427694 }, - { url = "https://files.pythonhosted.org/packages/de/e6/51e368c70bc5d3ee557b92e059fe1280330ed70d537cf8739ba71f316319/qubed-0.3.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:409c6475c99f28e372e48c9fc13284a48fffadfb6f54e531aad59d608457de41", size = 451222 }, - { url = "https://files.pythonhosted.org/packages/3a/74/5deba084e718c14509af8a4bb676785d91dc6516ac633e1b72dbf0598216/qubed-0.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:246332f045e37f6e88c773d4c8684441d0ec2a40c8ede7bae896c8ac6d513471", size = 592438 }, - { url = "https://files.pythonhosted.org/packages/28/c6/f41468881fde149c23df5bf568bac54bce9409374c76043ba19f159185c2/qubed-0.3.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2caf36b5cba258fb2f6301f879d4a16ad1a74648a0593d9f057c6b6aff603fd5", size = 694800 }, - { url = "https://files.pythonhosted.org/packages/f2/76/409605ac8bf26382d51d0e9df55344fa3cede74feaaebaf75a9fc07b221e/qubed-0.3.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4c5ce4d40840f45d2c359649a49a4fb271ec1650a162d20d5fea1c7106cb375d", size = 661966 }, - { url = "https://files.pythonhosted.org/packages/83/56/6efbbf4df4d483390c679456f87daed5e80c8f663d4d5065689ae6e8fc27/qubed-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5aa6c0d749a3186f1d4fb38e5ece4ba3513ee9cf24d182156e35fc7d637ce08", size = 634051 }, - { url = "https://files.pythonhosted.org/packages/d3/8b/65aef7336037d71978ea2e33da4a6c43262f2e31b84ee74c32e85f2aff4e/qubed-0.3.1-cp314-cp314-win32.whl", hash = "sha256:f4b7f53c722d0550a6be0e1ac148a79228f0cda2f3c32e9297b86bdd61c228d9", size = 257945 }, - { url = "https://files.pythonhosted.org/packages/9b/89/0249375839f15086a08f213d25c0aa3828e16808cf68bdb088eb01125520/qubed-0.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:c861104640c86883a5e0c8ae8682eb5eb417f4506282d36adfa9329bad26a3a7", size = 274944 }, - { url = "https://files.pythonhosted.org/packages/9a/3a/4694ed8a3a70b5ea484d8e82cb1988ddc5b19aebf9433ea5ced28263b64f/qubed-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1ba620950ed169f9d9652597181b03fe37b7febef65c18956c5032006d06886", size = 416016 }, - { url = "https://files.pythonhosted.org/packages/43/2c/56fcd7992f12856ffb6b01aa3f17b0e799ddeec6cae97eb5e632413750c3/qubed-0.3.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f76e96ae183a5f72a03f36681e995db7b9b6ecd2bce6b880135ef5f0dba51ad5", size = 423689 }, - { url = "https://files.pythonhosted.org/packages/8e/40/0a3d024e77ec6223e7256dcb92013a1ba139e569cba5dcd1470679171f1a/qubed-0.3.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d256f1db00336ce347e1d646d2e1065bdfe1d8de9b06cc60ab1e81aa5a135363", size = 544069 }, - { url = "https://files.pythonhosted.org/packages/51/de/c32a46fbe272b436681bdda6d3073308598e98af4a74f6c26e1d07c0ddf4/qubed-0.3.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c38414c20f17128d0c62de60515e54d280fb35c13a576aa0d4bbf8e8b6b7ff7", size = 452810 }, - { url = "https://files.pythonhosted.org/packages/f5/e9/3059877538ad438428d12200141e155a5e3521fbeacb361a7d95c187fb2d/qubed-0.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6dba1d9c479c79605c1d0ddb841f93b5fac94f80085a9cbdca3319b1111baadd", size = 591547 }, - { url = "https://files.pythonhosted.org/packages/2d/0d/10ac0b1f602b6f54bc57b49bb9e672b9dacb70fff960206bcd52aff0de3b/qubed-0.3.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ee0f20cd860ca67136765ef12cdcb04fafc15c0eab33ed9d733603d237d5e328", size = 693845 }, - { url = "https://files.pythonhosted.org/packages/5f/47/3ed547c0fce3f7d5e794f739783ee758f72061b792053f68d99db89d852f/qubed-0.3.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9923d183c0c71a8c2a1b3e95a40df128141cedd7cd21f73c9d9a2aa34ad58f5a", size = 661304 }, - { url = "https://files.pythonhosted.org/packages/b7/cc/fb5e887dfe9561a96bcd9969f8412736aaf8b40ea7fc76edb7f6791b7787/qubed-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5fcee6ee49265f43fb986860f105b7a2c735e8f7c80feeb02f618f1354ab1", size = 633291 }, - { url = "https://files.pythonhosted.org/packages/8a/a4/61c0893c62b70b3ae7096b51071134939ce3a7a8dc6d3be3485a14c704ef/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0525ea3e7286a2e1306c2d53cde122d596fe32c97c4b77ffb791647b6d06df40", size = 417314 }, - { url = "https://files.pythonhosted.org/packages/97/88/75d5cea6fa9af6b25e93a6fb6775199601020193c813eba624d626265b6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97b8e5a1ceabf68032b8c38a1a0fa2b425e2f137e1ae0b29d27a9b2c640d2923", size = 424549 }, - { url = "https://files.pythonhosted.org/packages/0a/79/c14068df38c8bcadb81c204e06eb4f33388c40061792346b46c55864ec6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:536e9479355758596d552314b29185f8e9606ee1fa7551b9ad71d575fe41bfa0", size = 543966 }, - { url = "https://files.pythonhosted.org/packages/34/6d/ead34b0f6aa8049b29db20bdc38c3378a1a71e6a4b3ef4d4b2b658b54774/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:288446a11cb22d194322858ebed1882d48cde40e65c40a5b2bee4d1eb204a7e0", size = 453255 }, - { url = "https://files.pythonhosted.org/packages/6c/69/e0616ec49e8bbf7b2f365b93336b63ade3e10c377a0f7921f4f78da1cc5b/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:164eed7d512094c9f6bedcbf62dcc15d78cfcf42133fb594fc68494dac0dde9b", size = 427645 }, - { url = "https://files.pythonhosted.org/packages/ed/34/3455baea73fd18b29884c9e30806b20fffaccff1b57d533091e6cf849b4a/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48790481e503e6e65d0acd2afdc085bef6cc9f876d9d6ff791c1f6ece99b1e9f", size = 450995 }, - { url = "https://files.pythonhosted.org/packages/97/d2/57842a201a430afa1f6eec433f51cfcd08601486daaf074b42a1a4047314/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c7583848ea8e79d7b78427979fe7100fd0c271cf14efadfa5cd25e9878c67850", size = 593098 }, - { url = "https://files.pythonhosted.org/packages/09/b3/dacad16f12ce515f8ad3c61ed7b6d1749f90b9c36b1a0947ef5bace5ed0c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:ab4475288640f2e380f3704fb7b44f4e6d8a8987041f6fb3cc76ecdc02e333cd", size = 694846 }, - { url = "https://files.pythonhosted.org/packages/84/e6/78473835a64ba33c2e6963c120eeff496182f81006f955c19ca7ea17e25f/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:25d8d3603b16e3202b53145150bcb8ebedce14fc42fd076d17feaf3a0de897a2", size = 662539 }, - { url = "https://files.pythonhosted.org/packages/60/7f/ab8d6582ba660b03da7617bab310f1db095a3ce622fdfcc5c2e50778208c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:cd90899b3182ecf6bfac689664be37726a1f28d06200a8b15b22fdc3b79cd72b", size = 633528 }, +sdist = { url = "https://files.pythonhosted.org/packages/12/a2/d4cd7fbc41fef2b308f10ed3f9c5bb1cf40f338ff3a0e37692325ba28b77/qubed-0.3.1.tar.gz", hash = "sha256:fadcf4be1668f0cfc58fcf430a15613e0f53f0df4e07fd05694c9caba39e8258", size = 15152020, upload-time = "2026-02-04T13:27:38.081Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/ae/8817f6db21335200da65434aaf1adb7ab86c38f7ac88cfbaaab9a50df335/qubed-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8a5ba2af717c5225b733ec6695bc848a6507e5590ea47310c36a204b03604da8", size = 392905, upload-time = "2026-02-04T13:26:57.846Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/253ddba74f5703677d5ee2232b1925578266e4023f7a3aaec6a17e5fd6b4/qubed-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2f0ac5b238de53baac98ea66e1e2a21fa729baf69789fb657b578e7d1dbda5d", size = 379845, upload-time = "2026-02-04T13:26:53.467Z" }, + { url = "https://files.pythonhosted.org/packages/95/53/06c4c8f59b587b5ce087c796d362ecd57fea6a67fb73f380c7f8f4b5403e/qubed-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6de0a6783af5f6342f7f124c5a159fc0b84c78d95d2866801d9a280cba447a46", size = 417330, upload-time = "2026-02-04T13:26:01.262Z" }, + { url = "https://files.pythonhosted.org/packages/a1/43/33caa7eefa46c21c6b9b3d3dd96f56772a46530a27577c63a273699b0bb1/qubed-0.3.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e2f16a2c6fbf52049cde9931d2cb6777e7b63c9a2e68b949a7bd06f6bbd6e66", size = 425131, upload-time = "2026-02-04T13:26:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/e9/01/7165694535259dfacff7d78377eb66b6e4187b69decbc81558a7170a8aa4/qubed-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2202d3f948231254d6c0ad19d10577ed663983c08b92a9ca8da00989465b013", size = 544973, upload-time = "2026-02-04T13:26:22.725Z" }, + { url = "https://files.pythonhosted.org/packages/f3/85/9a7914ccfea96d24f15df68a93dbb99ff14b4e75f1dd326df58286b38a20/qubed-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a783825a8b5415ac4ba15d3495a8330a4d78882715b90869f66ae1ee147826a4", size = 453565, upload-time = "2026-02-04T13:26:34.094Z" }, + { url = "https://files.pythonhosted.org/packages/b9/32/9c7cf964bea589da50bb572ee3bcd07641bf7e75961a14558dbee4b1a85c/qubed-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2edde67d3710ce780b85b18eab0749ebe1c77f92251e3d0c6efbd88ae7d661", size = 428033, upload-time = "2026-02-04T13:26:48.038Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2d/458d060268a5a38635994b854507e01038186a4d96cc5b5112680d70ca3c/qubed-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c576d6bf4fd6e6b6e44c5ef67b107fb3a0bf75bac89f25eeffdb7cd846e081cb", size = 451273, upload-time = "2026-02-04T13:26:41.923Z" }, + { url = "https://files.pythonhosted.org/packages/be/2a/abfbeaa8590c39af25e71ff6c84fc3dbd77a18629046b2ae5dc05f1b5e9f/qubed-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ae99b8d994a26452b308ecc2e7f40b3209bdcc827a9966c9451dc6e124aab0a1", size = 592940, upload-time = "2026-02-04T13:27:02.719Z" }, + { url = "https://files.pythonhosted.org/packages/59/33/84d0b4d21a5153131b4e8a321bb959ab0309a220a875001bcb3901393564/qubed-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b0819d34638e5a31891576feaa6889f4b16aa0f159876c83694281c86b628363", size = 694999, upload-time = "2026-02-04T13:27:10.953Z" }, + { url = "https://files.pythonhosted.org/packages/6f/87/8d1dea898d0e70a46a9c788fee66c07fdfed08ab46b99849962458a1945e/qubed-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c9a047da1cd4ee8b6c8e84e8d26cae383c46033ae7af4c8b8641a36f5b1d9c43", size = 662808, upload-time = "2026-02-04T13:27:20.788Z" }, + { url = "https://files.pythonhosted.org/packages/35/61/ac065cd10f6109e27b57b498d539be67ac1e594e7ede519124696d5175be/qubed-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1db61763554caf12adf40095fc6fb951bd115665ac692655ceed3c3dc9aaeeeb", size = 633806, upload-time = "2026-02-04T13:27:29.057Z" }, + { url = "https://files.pythonhosted.org/packages/72/55/3761a4acd6169fed3cbe5cf809efada6ef14aa9c6cdb7007033a5f8f300b/qubed-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8a3734e6ee8954da87ebbf319402a0ab0e16e0d64a10b5b1a1e6ee13d0eec244", size = 274537, upload-time = "2026-02-04T13:27:40.483Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e1/ade8497e74afd3e6dae8ea1d79fec46ea0c284ae25e6f96ccb1b5c687496/qubed-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2f7ad49d36086114a9c48c5bbd774ec2fe9e4fbe7064e5af70eeeed1a1696444", size = 388382, upload-time = "2026-02-04T13:26:58.926Z" }, + { url = "https://files.pythonhosted.org/packages/48/96/00629bd9796c7438b613dbeca97ae4349694ce45a9f1998ff45d3f3f7aab/qubed-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6832cc6010c2f0fffbca3751c0204876da03e5feae294d2896acaea9482f3e6", size = 376862, upload-time = "2026-02-04T13:26:54.841Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ae/b94eee7a2de48c1fe5fcff2abeb1f0b66f0e2959d8f8319b358814be896d/qubed-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f9273475076dafcb45bb8a510dc7a3a44c81d486edaf8fda88a3da414a318cb", size = 416993, upload-time = "2026-02-04T13:26:02.472Z" }, + { url = "https://files.pythonhosted.org/packages/ea/cc/832aa8537960349d4bb043762d57171e1256611ebda815381cabb7f92ce1/qubed-0.3.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8825a2d7e0ddaf3b841f3a746669ca8a195a86e4a0a04a5a0ce26987f4b976b1", size = 424594, upload-time = "2026-02-04T13:26:12.328Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cd/21bc5fed290401da7774fc05b32cf045dae07b208b3169924ecbb59069fb/qubed-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0758cd417772386f7ba3972c6b4a23258569e654ef5cc77f15d0d19c1db8d7d8", size = 544629, upload-time = "2026-02-04T13:26:23.789Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f1/0c291803b21b811c1398d8d1133dc3fabc2d6a8aab1804c2b8788af5eaee/qubed-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5f3999551b6d888320002a7c7c978c75efbce8f2ad449a2ddafbf3df89f4cfd", size = 453413, upload-time = "2026-02-04T13:26:35.125Z" }, + { url = "https://files.pythonhosted.org/packages/ac/84/8ce812bae0fc382715eaf831bc3d6fbdd10683e1c9d47e0b7f0b62df60b7/qubed-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71e33a38e02b632efb454ae2ca90e818201e6f6706485f2ac1d45e69f977f1c", size = 427902, upload-time = "2026-02-04T13:26:49.156Z" }, + { url = "https://files.pythonhosted.org/packages/69/40/40845475c5153521783adbf80f2455fbb33ff625c29b6ba8e57555970afc/qubed-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9de33e0a06bde6068ef1f2dc1df354826c9a1e63e8263cba4be55db3e24dd7a", size = 450608, upload-time = "2026-02-04T13:26:42.944Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c0/100edf7a233d917f2979fbbe3a18e20d515df4f7564847452e71cc8e914b/qubed-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4ed3902eaf6ffaf248cdd680f52cc48ca7a9c6a259738c013c382d6d9ae9a0bf", size = 592941, upload-time = "2026-02-04T13:27:03.839Z" }, + { url = "https://files.pythonhosted.org/packages/ec/50/18bd283574ad125576b267e37cb906399abb80a3b30eda70cf629ea0d65b/qubed-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fb8344fd7942086f1878c355f5fa3bfd7241022b3264384d72af9dc21083da9e", size = 694756, upload-time = "2026-02-04T13:27:12.072Z" }, + { url = "https://files.pythonhosted.org/packages/c7/44/c8154bb943855c3def9537b9643a901e4be827581b1240a69846ff6811a5/qubed-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a3c85eebed4bc4b229793fb27a2cad19caddd36df4115cbe62e3f2762ac94a6", size = 662092, upload-time = "2026-02-04T13:27:21.837Z" }, + { url = "https://files.pythonhosted.org/packages/19/69/017821dda7e5fe9b69cf5ae962668c632c83448f47c4be1a1256ac7c7fae/qubed-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2e2ad894d86d07181d7345c7555835c3fbbf16655a3adbc15368b44b407c570", size = 634032, upload-time = "2026-02-04T13:27:30.397Z" }, + { url = "https://files.pythonhosted.org/packages/7b/be/3e853dd96781110b82e2d5ba51a14884ef7518a85578f19db1fdfee5f74e/qubed-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:71541f0d98df10e22e40c11f54867df3272436f87758e1c10c49d074571b821d", size = 274558, upload-time = "2026-02-04T13:27:41.563Z" }, + { url = "https://files.pythonhosted.org/packages/f6/78/00920a7dab93468c6abd4364900372adf5a6e02373874fee8a048b173e2f/qubed-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0982545641cb7877c25ceefc788e2e0c5918b8d942419b1b3ebecf8ef64aa6c1", size = 388026, upload-time = "2026-02-04T13:26:59.877Z" }, + { url = "https://files.pythonhosted.org/packages/17/32/763131474decd86745ba83d5c7c77dcb95fc6144e44d61ac26c4970c8bc3/qubed-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:26432bf22b7aeab036c763639c1874471eea8f58b69bcc789c746fcf6a0135e0", size = 376678, upload-time = "2026-02-04T13:26:55.884Z" }, + { url = "https://files.pythonhosted.org/packages/ec/33/859744b54e692514c18d7d1c356b0dd49e01308990962b3d05edacf421f0/qubed-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5144c5f0e9929ef0219b5a06d43d58c5c111c165a21313f98892200d23a46e40", size = 417055, upload-time = "2026-02-04T13:26:03.989Z" }, + { url = "https://files.pythonhosted.org/packages/7b/52/d3fcd58088922485566dac0c613ce54b5afb411a47ac1c0fc30f394e4d56/qubed-0.3.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7be7875347f1fab4342e503f69f2cf7ec77e23134c17ee119489a26c6abf81dc", size = 424312, upload-time = "2026-02-04T13:26:13.767Z" }, + { url = "https://files.pythonhosted.org/packages/6b/46/0159a2f0f3a9ac907454cf5e7e9de53409470535feeab1f005a57cff9869/qubed-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6b44d86229cd4b43b524eab440ae8b3e4a1e7706815d9393c56bf02c09f25f4", size = 544218, upload-time = "2026-02-04T13:26:25.249Z" }, + { url = "https://files.pythonhosted.org/packages/aa/06/b890c192d4d05a9ceeaacfec2c9ef1bc7f4ed5a9a88613442cd409a7103c/qubed-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0426c2cc15f126584a64df6e27ee0162d44d413493689218544b444972d67b2", size = 453095, upload-time = "2026-02-04T13:26:36.147Z" }, + { url = "https://files.pythonhosted.org/packages/01/88/31e64cd98f079243157ced5d0a6ca3c0637e3e93982269bff5d6accd36fa/qubed-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04ed84be17ecff54a813b159b0ade5b6fe1daf9d0d3e8cce58160a71898de084", size = 427903, upload-time = "2026-02-04T13:26:50.046Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c3/6fcdde26e45c18dfaf67cad426580d9efd8b44b839db29755cc10dde7e52/qubed-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ee277521885d362a2f4282874aadaa7b5b021473cf18b62ccbab49d02490738", size = 450209, upload-time = "2026-02-04T13:26:44.927Z" }, + { url = "https://files.pythonhosted.org/packages/87/63/8eb2f83b994ed59c6526f09b72fa8898188a0023ad0348d14bbcfdfc715c/qubed-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5e716bd15a5e614da853a0b835ad16a9c57a13f9243194abd4d7a4aabbf82dd0", size = 592620, upload-time = "2026-02-04T13:27:04.995Z" }, + { url = "https://files.pythonhosted.org/packages/4a/be/4fe1e7634101016eef06843805633c9ec6b8e69bc40ef50190de4284271d/qubed-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:71f18b847fa9bc205368dcd176cc27e1c5c0cd4cfd74d3e2770ba422b3b14ff0", size = 694654, upload-time = "2026-02-04T13:27:13.7Z" }, + { url = "https://files.pythonhosted.org/packages/7c/17/84cf9d4615ea0e29d8709346ffd5bed5bcfdb29baf8101949181c5239cc8/qubed-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:eeeb96bf930b2bd944c0b3145c18dda22673dcbe98af1b4fca0429c96eeefae3", size = 661802, upload-time = "2026-02-04T13:27:22.87Z" }, + { url = "https://files.pythonhosted.org/packages/7c/27/4826d44a5a47ed4d3ba3d64f519d6ce65511239dbd613081a2b5b03a425e/qubed-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c2a3519538aae695c2a129006010d1291bf387e86b2477587dd421d07d0d111", size = 634066, upload-time = "2026-02-04T13:27:31.613Z" }, + { url = "https://files.pythonhosted.org/packages/c9/cf/97f4ea7ca129eea1d97139e56c3af415f082f6b063a0d3da537c4cf77984/qubed-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:677f12a55d20a43beade986c45508668d93762072a7f8710dc768263832305f2", size = 274355, upload-time = "2026-02-04T13:27:42.559Z" }, + { url = "https://files.pythonhosted.org/packages/1c/25/2d77b2aa954c7581dfe614e4edc9e213e0bc537a791567955cc89c908ea3/qubed-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bce5c3ca22b4125f7b2337072892562949c66b22060f1458f0ffc8914dea664", size = 415858, upload-time = "2026-02-04T13:26:05.072Z" }, + { url = "https://files.pythonhosted.org/packages/cd/38/145f404396aedeb65ea110d14a74f02ab5f2c64fcf0441f196a8b509394c/qubed-0.3.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c7eeb24e4d156df188000388b8b93b8659b8ff56a3a0204eb868a63d43c9fb5d", size = 423639, upload-time = "2026-02-04T13:26:15.08Z" }, + { url = "https://files.pythonhosted.org/packages/52/54/04beadee9ce2fb42d9cd9dead26aebfd614f01d9c57287b07406abfbc567/qubed-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57bb442de810879c2e0801b6b9e32e9ec30d37dbd02b464809523ea5294fe655", size = 543014, upload-time = "2026-02-04T13:26:27.385Z" }, + { url = "https://files.pythonhosted.org/packages/e6/f6/37e2e0efb56b29f16d533b0bfa56fdbff94289e527e0a529e9a6547ef8b7/qubed-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:738ab71e1a714f3a3e3110e3eaac2778a5684f21515196b6b3c83843f9c5243b", size = 452627, upload-time = "2026-02-04T13:26:37.269Z" }, + { url = "https://files.pythonhosted.org/packages/e9/aa/699a433b495665b99c4bb2dd37f4c8a15147dc955174d4a4eec3a2105fc7/qubed-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:af5e093933172f0820860b2fb4d909a6bb8b17043bf40c143088bf1529da0d26", size = 591409, upload-time = "2026-02-04T13:27:06.111Z" }, + { url = "https://files.pythonhosted.org/packages/b2/fe/0d701edc6db7c16f50c3d41387791eae38c475d3f63677823ec5549a9b1d/qubed-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f0a5caf87d9fc853adde336759ef88e174be84b74bc29d582788fe70735dbba4", size = 694115, upload-time = "2026-02-04T13:27:14.784Z" }, + { url = "https://files.pythonhosted.org/packages/dd/5b/3a91f3ee0de53bcdb4a6c80590243952acb891c088ddcaf066d4a209d0df/qubed-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8144ab517ef48f43c49b97d07c05d230015222f8c091bb1daac00ef62bfc74d9", size = 661144, upload-time = "2026-02-04T13:27:24.061Z" }, + { url = "https://files.pythonhosted.org/packages/34/3e/28ab2031409540bc38f3f6e2db1d546b9d7c242755b6bf5c1ad4b7cab85a/qubed-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e164e030591f2ed0eb5525efe785ff04fc7080f0ef4ccfe8d83e25091006d709", size = 633167, upload-time = "2026-02-04T13:27:33.18Z" }, + { url = "https://files.pythonhosted.org/packages/a3/90/8651f479d7a726bc5f25cb90f99f33420fec6355b71248eb9b266753bce9/qubed-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:49b0eec981057347991bc80b3886501ca45ee0e426843c0450a8b0710d444659", size = 387842, upload-time = "2026-02-04T13:27:00.858Z" }, + { url = "https://files.pythonhosted.org/packages/1d/69/679e544a4fe1505b9f78f047ce1c81cf6db84b382c58d4a6ca46cfa48327/qubed-0.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97f9c034ae3ad1d7123e269c7fba225c20dbbaeebdd80803c77a69f3b010f8ff", size = 376202, upload-time = "2026-02-04T13:26:56.852Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1d/d4a5fa3a40e697f1ec8337e152cc241ec6aeff84f7514a6cfbee6b6536f5/qubed-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d154b12afffb5891beb06157b5bfc31e33d579d6a8682d866eb848bb18cc55f", size = 416737, upload-time = "2026-02-04T13:26:06.481Z" }, + { url = "https://files.pythonhosted.org/packages/6e/66/efc34b57ee3d21334d6127b187e51a249a37484b707cbed393d464419d09/qubed-0.3.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac14223782c4f346167a23511408347cf2a5c109c07f4319a9eb8f08bb4cdd53", size = 424440, upload-time = "2026-02-04T13:26:16.861Z" }, + { url = "https://files.pythonhosted.org/packages/c2/11/27f13777d9a4f2f0425c32cdc4f6fb528393e238768c185124abe15ff024/qubed-0.3.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e80a636152fa172ac298cb87bdae96412fa5f9e9a2149d1cb94bb4068508c941", size = 540728, upload-time = "2026-02-04T13:26:28.82Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9c/8ed6325f5c9c8ff96a41adef53f111bcf5dec51d2687afd2fac8504f19fc/qubed-0.3.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cb088a6846416ca092be5793c5191df97a94a3c3e5c43468be42b811ef14020", size = 453464, upload-time = "2026-02-04T13:26:38.885Z" }, + { url = "https://files.pythonhosted.org/packages/b1/d6/c0dac0a00e3730130f897389d263042c26b2dd182cbffb2960b93c64007d/qubed-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a5e0cae1aba8bd95d020bc127bc404211c96a0ff66502f2bd5ff04a8fa06643", size = 427694, upload-time = "2026-02-04T13:26:51.557Z" }, + { url = "https://files.pythonhosted.org/packages/de/e6/51e368c70bc5d3ee557b92e059fe1280330ed70d537cf8739ba71f316319/qubed-0.3.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:409c6475c99f28e372e48c9fc13284a48fffadfb6f54e531aad59d608457de41", size = 451222, upload-time = "2026-02-04T13:26:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/3a/74/5deba084e718c14509af8a4bb676785d91dc6516ac633e1b72dbf0598216/qubed-0.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:246332f045e37f6e88c773d4c8684441d0ec2a40c8ede7bae896c8ac6d513471", size = 592438, upload-time = "2026-02-04T13:27:07.033Z" }, + { url = "https://files.pythonhosted.org/packages/28/c6/f41468881fde149c23df5bf568bac54bce9409374c76043ba19f159185c2/qubed-0.3.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2caf36b5cba258fb2f6301f879d4a16ad1a74648a0593d9f057c6b6aff603fd5", size = 694800, upload-time = "2026-02-04T13:27:16.309Z" }, + { url = "https://files.pythonhosted.org/packages/f2/76/409605ac8bf26382d51d0e9df55344fa3cede74feaaebaf75a9fc07b221e/qubed-0.3.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4c5ce4d40840f45d2c359649a49a4fb271ec1650a162d20d5fea1c7106cb375d", size = 661966, upload-time = "2026-02-04T13:27:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/83/56/6efbbf4df4d483390c679456f87daed5e80c8f663d4d5065689ae6e8fc27/qubed-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5aa6c0d749a3186f1d4fb38e5ece4ba3513ee9cf24d182156e35fc7d637ce08", size = 634051, upload-time = "2026-02-04T13:27:34.241Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8b/65aef7336037d71978ea2e33da4a6c43262f2e31b84ee74c32e85f2aff4e/qubed-0.3.1-cp314-cp314-win32.whl", hash = "sha256:f4b7f53c722d0550a6be0e1ac148a79228f0cda2f3c32e9297b86bdd61c228d9", size = 257945, upload-time = "2026-02-04T13:27:44.705Z" }, + { url = "https://files.pythonhosted.org/packages/9b/89/0249375839f15086a08f213d25c0aa3828e16808cf68bdb088eb01125520/qubed-0.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:c861104640c86883a5e0c8ae8682eb5eb417f4506282d36adfa9329bad26a3a7", size = 274944, upload-time = "2026-02-04T13:27:43.771Z" }, + { url = "https://files.pythonhosted.org/packages/9a/3a/4694ed8a3a70b5ea484d8e82cb1988ddc5b19aebf9433ea5ced28263b64f/qubed-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1ba620950ed169f9d9652597181b03fe37b7febef65c18956c5032006d06886", size = 416016, upload-time = "2026-02-04T13:26:07.498Z" }, + { url = "https://files.pythonhosted.org/packages/43/2c/56fcd7992f12856ffb6b01aa3f17b0e799ddeec6cae97eb5e632413750c3/qubed-0.3.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f76e96ae183a5f72a03f36681e995db7b9b6ecd2bce6b880135ef5f0dba51ad5", size = 423689, upload-time = "2026-02-04T13:26:18.458Z" }, + { url = "https://files.pythonhosted.org/packages/8e/40/0a3d024e77ec6223e7256dcb92013a1ba139e569cba5dcd1470679171f1a/qubed-0.3.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d256f1db00336ce347e1d646d2e1065bdfe1d8de9b06cc60ab1e81aa5a135363", size = 544069, upload-time = "2026-02-04T13:26:30.318Z" }, + { url = "https://files.pythonhosted.org/packages/51/de/c32a46fbe272b436681bdda6d3073308598e98af4a74f6c26e1d07c0ddf4/qubed-0.3.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c38414c20f17128d0c62de60515e54d280fb35c13a576aa0d4bbf8e8b6b7ff7", size = 452810, upload-time = "2026-02-04T13:26:39.827Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e9/3059877538ad438428d12200141e155a5e3521fbeacb361a7d95c187fb2d/qubed-0.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6dba1d9c479c79605c1d0ddb841f93b5fac94f80085a9cbdca3319b1111baadd", size = 591547, upload-time = "2026-02-04T13:27:08.312Z" }, + { url = "https://files.pythonhosted.org/packages/2d/0d/10ac0b1f602b6f54bc57b49bb9e672b9dacb70fff960206bcd52aff0de3b/qubed-0.3.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ee0f20cd860ca67136765ef12cdcb04fafc15c0eab33ed9d733603d237d5e328", size = 693845, upload-time = "2026-02-04T13:27:17.444Z" }, + { url = "https://files.pythonhosted.org/packages/5f/47/3ed547c0fce3f7d5e794f739783ee758f72061b792053f68d99db89d852f/qubed-0.3.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9923d183c0c71a8c2a1b3e95a40df128141cedd7cd21f73c9d9a2aa34ad58f5a", size = 661304, upload-time = "2026-02-04T13:27:26.375Z" }, + { url = "https://files.pythonhosted.org/packages/b7/cc/fb5e887dfe9561a96bcd9969f8412736aaf8b40ea7fc76edb7f6791b7787/qubed-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5fcee6ee49265f43fb986860f105b7a2c735e8f7c80feeb02f618f1354ab1", size = 633291, upload-time = "2026-02-04T13:27:35.261Z" }, + { url = "https://files.pythonhosted.org/packages/8a/a4/61c0893c62b70b3ae7096b51071134939ce3a7a8dc6d3be3485a14c704ef/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0525ea3e7286a2e1306c2d53cde122d596fe32c97c4b77ffb791647b6d06df40", size = 417314, upload-time = "2026-02-04T13:26:10.193Z" }, + { url = "https://files.pythonhosted.org/packages/97/88/75d5cea6fa9af6b25e93a6fb6775199601020193c813eba624d626265b6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97b8e5a1ceabf68032b8c38a1a0fa2b425e2f137e1ae0b29d27a9b2c640d2923", size = 424549, upload-time = "2026-02-04T13:26:21.319Z" }, + { url = "https://files.pythonhosted.org/packages/0a/79/c14068df38c8bcadb81c204e06eb4f33388c40061792346b46c55864ec6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:536e9479355758596d552314b29185f8e9606ee1fa7551b9ad71d575fe41bfa0", size = 543966, upload-time = "2026-02-04T13:26:32.643Z" }, + { url = "https://files.pythonhosted.org/packages/34/6d/ead34b0f6aa8049b29db20bdc38c3378a1a71e6a4b3ef4d4b2b658b54774/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:288446a11cb22d194322858ebed1882d48cde40e65c40a5b2bee4d1eb204a7e0", size = 453255, upload-time = "2026-02-04T13:26:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/6c/69/e0616ec49e8bbf7b2f365b93336b63ade3e10c377a0f7921f4f78da1cc5b/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:164eed7d512094c9f6bedcbf62dcc15d78cfcf42133fb594fc68494dac0dde9b", size = 427645, upload-time = "2026-02-04T13:26:52.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/34/3455baea73fd18b29884c9e30806b20fffaccff1b57d533091e6cf849b4a/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48790481e503e6e65d0acd2afdc085bef6cc9f876d9d6ff791c1f6ece99b1e9f", size = 450995, upload-time = "2026-02-04T13:26:47.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/d2/57842a201a430afa1f6eec433f51cfcd08601486daaf074b42a1a4047314/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c7583848ea8e79d7b78427979fe7100fd0c271cf14efadfa5cd25e9878c67850", size = 593098, upload-time = "2026-02-04T13:27:09.828Z" }, + { url = "https://files.pythonhosted.org/packages/09/b3/dacad16f12ce515f8ad3c61ed7b6d1749f90b9c36b1a0947ef5bace5ed0c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:ab4475288640f2e380f3704fb7b44f4e6d8a8987041f6fb3cc76ecdc02e333cd", size = 694846, upload-time = "2026-02-04T13:27:18.574Z" }, + { url = "https://files.pythonhosted.org/packages/84/e6/78473835a64ba33c2e6963c120eeff496182f81006f955c19ca7ea17e25f/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:25d8d3603b16e3202b53145150bcb8ebedce14fc42fd076d17feaf3a0de897a2", size = 662539, upload-time = "2026-02-04T13:27:27.404Z" }, + { url = "https://files.pythonhosted.org/packages/60/7f/ab8d6582ba660b03da7617bab310f1db095a3ce622fdfcc5c2e50778208c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:cd90899b3182ecf6bfac689664be37726a1f28d06200a8b15b22fdc3b79cd72b", size = 633528, upload-time = "2026-02-04T13:27:36.452Z" }, ] [[package]] @@ -1807,9 +1818,9 @@ dependencies = [ { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -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]] @@ -1822,9 +1833,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856 } +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075 }, + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, ] [[package]] @@ -1835,9 +1846,9 @@ dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680 } +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654 }, + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, ] [[package]] @@ -1847,164 +1858,164 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "rich" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6a/e5/1064c43203a357d668cd42435f7a15fe6af51512d85b2104fecb937aa861/rich_argparse-1.8.0.tar.gz", hash = "sha256:679df3d832fa94ad6e4bdb07ded088cd7ea2dddc58ae9b2b46346a40b06cbc0c", size = 38940 } +sdist = { url = "https://files.pythonhosted.org/packages/6a/e5/1064c43203a357d668cd42435f7a15fe6af51512d85b2104fecb937aa861/rich_argparse-1.8.0.tar.gz", hash = "sha256:679df3d832fa94ad6e4bdb07ded088cd7ea2dddc58ae9b2b46346a40b06cbc0c", size = 38940, upload-time = "2026-05-01T15:18:43.604Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl", hash = "sha256:d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142", size = 25616 }, + { url = "https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl", hash = "sha256:d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142", size = 25616, upload-time = "2026-05-01T15:18:42.395Z" }, ] [[package]] name = "rpds-py" version = "2026.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609 }, - { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460 }, - { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031 }, - { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121 }, - { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026 }, - { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865 }, - { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012 }, - { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111 }, - { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225 }, - { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487 }, - { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798 }, - { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053 }, - { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390 }, - { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097 }, - { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361 }, - { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040 }, - { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775 }, - { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329 }, - { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539 }, - { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674 }, - { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268 }, - { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280 }, - { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233 }, - { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009 }, - { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113 }, - { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838 }, - { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436 }, - { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734 }, - { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045 }, - { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967 }, - { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787 }, - { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179 }, - { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173 }, - { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162 }, - { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093 }, - { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829 }, - { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786 }, - { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920 }, - { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059 }, - { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030 }, - { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975 }, - { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178 }, - { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481 }, - { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519 }, - { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446 }, - { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287 }, - { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033 }, - { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891 }, - { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646 }, - { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830 }, - { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830 }, - { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613 }, - { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183 }, - { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578 }, - { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573 }, - { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861 }, - { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633 }, - { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074 }, - { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635 }, - { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756 }, - { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831 }, - { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127 }, - { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034 }, - { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823 }, - { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144 }, - { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959 }, - { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558 }, - { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789 }, - { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405 }, - { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975 }, - { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701 }, - { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806 }, - { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985 }, - { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219 }, - { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148 }, - { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196 }, - { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981 }, - { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961 }, - { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965 }, - { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526 }, - { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190 }, - { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921 }, - { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766 }, - { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343 }, - { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502 }, - { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916 }, - { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855 }, - { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422 }, - { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576 }, - { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640 }, - { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322 }, - { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066 }, - { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586 }, - { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415 }, - { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427 }, - { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615 }, - { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786 }, - { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583 }, - { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941 }, - { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349 }, - { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922 }, - { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003 }, - { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245 }, - { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015 }, - { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016 }, - { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775 }, - { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270 }, - { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285 }, - { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581 }, - { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041 }, - { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946 }, - { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526 }, - { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165 }, - { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778 }, - { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839 }, - { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866 }, - { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441 }, - { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151 }, - { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195 }, - { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850 }, - { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899 }, - { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618 }, - { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003 }, - { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778 }, - { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359 }, - { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820 }, - { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243 }, - { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541 }, - { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326 }, +sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609, upload-time = "2026-05-28T11:58:50.78Z" }, + { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460, upload-time = "2026-05-28T11:58:52.374Z" }, + { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031, upload-time = "2026-05-28T11:58:53.775Z" }, + { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" }, + { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" }, + { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" }, + { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, + { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" }, + { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225, upload-time = "2026-05-28T11:59:02.433Z" }, + { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487, upload-time = "2026-05-28T11:59:04.012Z" }, + { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798, upload-time = "2026-05-28T11:59:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, + { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390, upload-time = "2026-05-28T11:59:08.402Z" }, + { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097, upload-time = "2026-05-28T11:59:09.786Z" }, + { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361, upload-time = "2026-05-28T11:59:11.079Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040, upload-time = "2026-05-28T11:59:12.531Z" }, + { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775, upload-time = "2026-05-28T11:59:13.827Z" }, + { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329, upload-time = "2026-05-28T11:59:15.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539, upload-time = "2026-05-28T11:59:16.665Z" }, + { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674, upload-time = "2026-05-28T11:59:17.991Z" }, + { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268, upload-time = "2026-05-28T11:59:19.434Z" }, + { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280, upload-time = "2026-05-28T11:59:21Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233, upload-time = "2026-05-28T11:59:22.454Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009, upload-time = "2026-05-28T11:59:23.845Z" }, + { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113, upload-time = "2026-05-28T11:59:25.184Z" }, + { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838, upload-time = "2026-05-28T11:59:26.749Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436, upload-time = "2026-05-28T11:59:28.11Z" }, + { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734, upload-time = "2026-05-28T11:59:29.689Z" }, + { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045, upload-time = "2026-05-28T11:59:31.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967, upload-time = "2026-05-28T11:59:32.318Z" }, + { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787, upload-time = "2026-05-28T11:59:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179, upload-time = "2026-05-28T11:59:35Z" }, + { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173, upload-time = "2026-05-28T11:59:36.43Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162, upload-time = "2026-05-28T11:59:37.995Z" }, + { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093, upload-time = "2026-05-28T11:59:39.453Z" }, + { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829, upload-time = "2026-05-28T11:59:40.896Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786, upload-time = "2026-05-28T11:59:42.626Z" }, + { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920, upload-time = "2026-05-28T11:59:44.124Z" }, + { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059, upload-time = "2026-05-28T11:59:47.177Z" }, + { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030, upload-time = "2026-05-28T11:59:48.603Z" }, + { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975, upload-time = "2026-05-28T11:59:50.314Z" }, + { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178, upload-time = "2026-05-28T11:59:51.673Z" }, + { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481, upload-time = "2026-05-28T11:59:53.148Z" }, + { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519, upload-time = "2026-05-28T11:59:54.505Z" }, + { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446, upload-time = "2026-05-28T11:59:56.081Z" }, + { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287, upload-time = "2026-05-28T11:59:57.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033, upload-time = "2026-05-28T11:59:58.881Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891, upload-time = "2026-05-28T12:00:00.516Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646, upload-time = "2026-05-28T12:00:02.394Z" }, + { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830, upload-time = "2026-05-28T12:00:04.189Z" }, + { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830, upload-time = "2026-05-28T12:00:05.797Z" }, + { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613, upload-time = "2026-05-28T12:00:07.433Z" }, + { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183, upload-time = "2026-05-28T12:00:09.227Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578, upload-time = "2026-05-28T12:00:10.779Z" }, + { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573, upload-time = "2026-05-28T12:00:12.443Z" }, + { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861, upload-time = "2026-05-28T12:00:14.09Z" }, + { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633, upload-time = "2026-05-28T12:00:15.66Z" }, + { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074, upload-time = "2026-05-28T12:00:17.291Z" }, + { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635, upload-time = "2026-05-28T12:00:18.73Z" }, + { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756, upload-time = "2026-05-28T12:00:20.217Z" }, + { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831, upload-time = "2026-05-28T12:00:21.711Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127, upload-time = "2026-05-28T12:00:23.326Z" }, + { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034, upload-time = "2026-05-28T12:00:24.89Z" }, + { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823, upload-time = "2026-05-28T12:00:26.676Z" }, + { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144, upload-time = "2026-05-28T12:00:28.577Z" }, + { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959, upload-time = "2026-05-28T12:00:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558, upload-time = "2026-05-28T12:00:31.764Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789, upload-time = "2026-05-28T12:00:33.247Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405, upload-time = "2026-05-28T12:00:34.819Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975, upload-time = "2026-05-28T12:00:36.268Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701, upload-time = "2026-05-28T12:00:37.82Z" }, + { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806, upload-time = "2026-05-28T12:00:39.492Z" }, + { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985, upload-time = "2026-05-28T12:00:40.94Z" }, + { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219, upload-time = "2026-05-28T12:00:43.15Z" }, + { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148, upload-time = "2026-05-28T12:00:44.638Z" }, + { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196, upload-time = "2026-05-28T12:00:46.14Z" }, + { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981, upload-time = "2026-05-28T12:00:47.531Z" }, + { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961, upload-time = "2026-05-28T12:00:49.216Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965, upload-time = "2026-05-28T12:00:51.111Z" }, + { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526, upload-time = "2026-05-28T12:00:52.77Z" }, + { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190, upload-time = "2026-05-28T12:00:54.215Z" }, + { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921, upload-time = "2026-05-28T12:00:55.673Z" }, + { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766, upload-time = "2026-05-28T12:00:57.518Z" }, + { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343, upload-time = "2026-05-28T12:00:58.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502, upload-time = "2026-05-28T12:01:00.656Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916, upload-time = "2026-05-28T12:01:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855, upload-time = "2026-05-28T12:01:03.821Z" }, + { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422, upload-time = "2026-05-28T12:01:05.194Z" }, + { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576, upload-time = "2026-05-28T12:01:06.722Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640, upload-time = "2026-05-28T12:01:08.441Z" }, + { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322, upload-time = "2026-05-28T12:01:09.934Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066, upload-time = "2026-05-28T12:01:11.48Z" }, + { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586, upload-time = "2026-05-28T12:01:13.051Z" }, + { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415, upload-time = "2026-05-28T12:01:14.631Z" }, + { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427, upload-time = "2026-05-28T12:01:16.153Z" }, + { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615, upload-time = "2026-05-28T12:01:17.809Z" }, + { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786, upload-time = "2026-05-28T12:01:19.419Z" }, + { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583, upload-time = "2026-05-28T12:01:21.013Z" }, + { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941, upload-time = "2026-05-28T12:01:22.548Z" }, + { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349, upload-time = "2026-05-28T12:01:24.118Z" }, + { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922, upload-time = "2026-05-28T12:01:25.522Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003, upload-time = "2026-05-28T12:01:27.062Z" }, + { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245, upload-time = "2026-05-28T12:01:28.51Z" }, + { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015, upload-time = "2026-05-28T12:01:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016, upload-time = "2026-05-28T12:01:31.656Z" }, + { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775, upload-time = "2026-05-28T12:01:33.136Z" }, + { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270, upload-time = "2026-05-28T12:01:34.574Z" }, + { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285, upload-time = "2026-05-28T12:01:36.127Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581, upload-time = "2026-05-28T12:01:37.635Z" }, + { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041, upload-time = "2026-05-28T12:01:39.307Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946, upload-time = "2026-05-28T12:01:41.043Z" }, + { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526, upload-time = "2026-05-28T12:01:43.032Z" }, + { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165, upload-time = "2026-05-28T12:01:44.648Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778, upload-time = "2026-05-28T12:01:46.337Z" }, + { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839, upload-time = "2026-05-28T12:01:48.109Z" }, + { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866, upload-time = "2026-05-28T12:01:49.648Z" }, + { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441, upload-time = "2026-05-28T12:01:51.408Z" }, + { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151, upload-time = "2026-05-28T12:01:53.43Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195, upload-time = "2026-05-28T12:01:54.901Z" }, + { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850, upload-time = "2026-05-28T12:01:56.601Z" }, + { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" }, + { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, + { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" }, + { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820, upload-time = "2026-05-28T12:02:06.401Z" }, + { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243, upload-time = "2026-05-28T12:02:08.013Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541, upload-time = "2026-05-28T12:02:09.661Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, ] [[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 = "sortedcontainers" version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594 } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575 }, + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, ] [[package]] @@ -2016,27 +2027,27 @@ 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]] name = "termcolor" version = "3.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/46/79/cf31d7a93a8fdc6aa0fbb665be84426a8c5a557d9240b6239e9e11e35fc5/termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5", size = 14434 } +sdist = { url = "https://files.pythonhosted.org/packages/46/79/cf31d7a93a8fdc6aa0fbb665be84426a8c5a557d9240b6239e9e11e35fc5/termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5", size = 14434, upload-time = "2025-12-29T12:55:21.882Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/33/d1/8bb87d21e9aeb323cc03034f5eaf2c8f69841e40e4853c2627edf8111ed3/termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5", size = 7734 }, + { url = "https://files.pythonhosted.org/packages/33/d1/8bb87d21e9aeb323cc03034f5eaf2c8f69841e40e4853c2627edf8111ed3/termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5", size = 7734, upload-time = "2025-12-29T12:55:20.718Z" }, ] [[package]] name = "toolz" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613 } +sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613, upload-time = "2025-10-17T04:03:21.661Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093 }, + { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093, upload-time = "2025-10-17T04:03:20.435Z" }, ] [[package]] @@ -2046,52 +2057,52 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598 } +sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374 }, + { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" }, ] [[package]] name = "traitlets" version = "5.15.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344 } +sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344, upload-time = "2026-06-03T12:26:06.181Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858 }, + { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858, upload-time = "2026-06-03T12:26:04.395Z" }, ] [[package]] name = "ty" version = "0.0.43" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/37/4ec04de0659b93be37d956dfceca13b1ecab9c959f28d8a1d5e514603f36/ty-0.0.43.tar.gz", hash = "sha256:ea4cff50548f2a1877e848d3abe9e293cde8ab94757a7eb93fc0d4013f98be8e", size = 5798429 } +sdist = { url = "https://files.pythonhosted.org/packages/0d/37/4ec04de0659b93be37d956dfceca13b1ecab9c959f28d8a1d5e514603f36/ty-0.0.43.tar.gz", hash = "sha256:ea4cff50548f2a1877e848d3abe9e293cde8ab94757a7eb93fc0d4013f98be8e", size = 5798429, upload-time = "2026-06-04T00:52:10.013Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/74/1916026a78f20019a2f03adbd6fb4430ddb7ce1e52c2e17a90856a6d192e/ty-0.0.43-py3-none-linux_armv6l.whl", hash = "sha256:3bf70f5446480562bf6c9f639df4b5cb60716b8f8d1a6b8e5811d5c7eccd8bf2", size = 11598153 }, - { url = "https://files.pythonhosted.org/packages/b9/af/58bb0089d2635216c8fa6612dd486a3f986d0ab1c46a41527ab95e57f0e3/ty-0.0.43-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7184741f8b15425a1bc64b950ad005cb353573288ac0e8a04f5481ceb3832596", size = 11357811 }, - { url = "https://files.pythonhosted.org/packages/d6/9c/32c6b14f3feddf87b59c7a50709e2b3da408258f2f583f05575f77bc8f7b/ty-0.0.43-py3-none-macosx_11_0_arm64.whl", hash = "sha256:8c306379ca9a35f6ae5270fe9bda7af4b46d91822725a2586d78c8b9b5493b62", size = 10772024 }, - { url = "https://files.pythonhosted.org/packages/09/fa/98aa4a74bd00cd5efc424923cd1daffbf1e40a0338041cafb203379d746f/ty-0.0.43-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d624b884c9c1fd244ad2a5f026364e7162a22b3f537025941ada2e363e676414", size = 11291034 }, - { url = "https://files.pythonhosted.org/packages/b5/db/4de086c38ce96dcada2bd451f43171d2c237f96d8ed19a1ea8fe51bb8ef4/ty-0.0.43-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:281fc4c00fbc196045141faa085055bddc58846b04a2800204701415a1b9c6aa", size = 11364724 }, - { url = "https://files.pythonhosted.org/packages/b0/d3/e3cd8e3233a6fd8362a49aa025b79e9f40151a2a86d811ace154c6eb7445/ty-0.0.43-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f57d6cc28de89024b48d1788e4758c05299d5749d4a51c02e71ac655ec23d9a5", size = 11890555 }, - { url = "https://files.pythonhosted.org/packages/80/7b/6f46d444e8241606bbde098df3dca93f2ec0b834a42055db85ee7d33646f/ty-0.0.43-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a1d6ad6c5e7792c7eac0a01e550f2c2004462e01a64a91ea1636aba6fef6e71", size = 12450968 }, - { url = "https://files.pythonhosted.org/packages/4a/e1/79fbe51f2e4b9d8347f2013cd7ed0b63f3b499038c02dc0357e9b28a3a47/ty-0.0.43-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:66d474395d7635fb618bdbb58b4e3360259a2056d0a5621b82754b9da2cd8a04", size = 12064187 }, - { url = "https://files.pythonhosted.org/packages/9b/3f/c758a3a8df5b90d331f2b60c8f16021ee64d75e78f99d67cc4efc9bf5f4b/ty-0.0.43-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2663a0003a8b60fb98db7f6f6e673df80b21d0fe3a9868a26fb06b4e049b6fc4", size = 11943208 }, - { url = "https://files.pythonhosted.org/packages/54/5f/f516442749cf1b45ca6720a5d41df2738a486ed9ace774c03d515db89084/ty-0.0.43-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:d5a6c352d374d889189d5ec82b54b26a5885f769f7b7787f7f875500dcb8673e", size = 12143572 }, - { url = "https://files.pythonhosted.org/packages/b7/bf/0d83c7f43bf4c10f3678bfe7d938e51c445298c7b923f155c5204730c2df/ty-0.0.43-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e7dbbeedfad3ca250d74fcc355fa9ab6b38d2a17f22d6304f615716939dbbb27", size = 11279355 }, - { url = "https://files.pythonhosted.org/packages/3e/de/a6c978bef6d9e949f79f4782d9e4ee4df0893713e73b055d84c1a5116b9a/ty-0.0.43-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:24b18a0273ee46154996cfcfa27438f851f440c925587ec200df6f98dffe67d3", size = 11408412 }, - { url = "https://files.pythonhosted.org/packages/ec/b1/d13857c23867f0f76b92e38e5841c64ca5e76dc5d4bf27f52cb81d8ab685/ty-0.0.43-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2ef681951520d692b7e9c0b5e56aacf4f98ccae47cf6ffccaf2c7b6b33dc226e", size = 11541709 }, - { url = "https://files.pythonhosted.org/packages/7c/f1/cd6afc6f6a687e238bf5e12189f7920e81a0bdef6c3dba4c784ef140f7d9/ty-0.0.43-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2af105de7437143aa4676b28016b5bee661aaaa4eff52be5867fb25119641ceb", size = 12041266 }, - { url = "https://files.pythonhosted.org/packages/bd/ba/51ca7c3335da2b8d0a3e477fa4986be9f4a53b05bfab862967d8d2e6ca60/ty-0.0.43-py3-none-win32.whl", hash = "sha256:e4773115b0d6486ee30f1657fc8bdffe7e3a3f5300ab77ef2495da6e83e4694f", size = 10858724 }, - { url = "https://files.pythonhosted.org/packages/9f/29/5d80453e5f7c520145fa058851da87230dbd7ca761a7675447a9fe504e0b/ty-0.0.43-py3-none-win_amd64.whl", hash = "sha256:48d3545094a4ae6395492c7e6ac90550fce969e0ed2815fbf8c5da9756676b7d", size = 11976157 }, - { url = "https://files.pythonhosted.org/packages/dc/ed/befe5a543e5b95e754ed38ee95239e44efda9bc5f578db4ac1bc8dd758d6/ty-0.0.43-py3-none-win_arm64.whl", hash = "sha256:740ca33d7f75f655a4e7d475bc42dfb825c13219bb073fad30fcc04d35790c74", size = 11308680 }, + { url = "https://files.pythonhosted.org/packages/db/74/1916026a78f20019a2f03adbd6fb4430ddb7ce1e52c2e17a90856a6d192e/ty-0.0.43-py3-none-linux_armv6l.whl", hash = "sha256:3bf70f5446480562bf6c9f639df4b5cb60716b8f8d1a6b8e5811d5c7eccd8bf2", size = 11598153, upload-time = "2026-06-04T00:52:20.646Z" }, + { url = "https://files.pythonhosted.org/packages/b9/af/58bb0089d2635216c8fa6612dd486a3f986d0ab1c46a41527ab95e57f0e3/ty-0.0.43-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7184741f8b15425a1bc64b950ad005cb353573288ac0e8a04f5481ceb3832596", size = 11357811, upload-time = "2026-06-04T00:52:24.683Z" }, + { url = "https://files.pythonhosted.org/packages/d6/9c/32c6b14f3feddf87b59c7a50709e2b3da408258f2f583f05575f77bc8f7b/ty-0.0.43-py3-none-macosx_11_0_arm64.whl", hash = "sha256:8c306379ca9a35f6ae5270fe9bda7af4b46d91822725a2586d78c8b9b5493b62", size = 10772024, upload-time = "2026-06-04T00:52:14.312Z" }, + { url = "https://files.pythonhosted.org/packages/09/fa/98aa4a74bd00cd5efc424923cd1daffbf1e40a0338041cafb203379d746f/ty-0.0.43-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d624b884c9c1fd244ad2a5f026364e7162a22b3f537025941ada2e363e676414", size = 11291034, upload-time = "2026-06-04T00:52:37.249Z" }, + { url = "https://files.pythonhosted.org/packages/b5/db/4de086c38ce96dcada2bd451f43171d2c237f96d8ed19a1ea8fe51bb8ef4/ty-0.0.43-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:281fc4c00fbc196045141faa085055bddc58846b04a2800204701415a1b9c6aa", size = 11364724, upload-time = "2026-06-04T00:52:33.138Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d3/e3cd8e3233a6fd8362a49aa025b79e9f40151a2a86d811ace154c6eb7445/ty-0.0.43-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f57d6cc28de89024b48d1788e4758c05299d5749d4a51c02e71ac655ec23d9a5", size = 11890555, upload-time = "2026-06-04T00:52:22.711Z" }, + { url = "https://files.pythonhosted.org/packages/80/7b/6f46d444e8241606bbde098df3dca93f2ec0b834a42055db85ee7d33646f/ty-0.0.43-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a1d6ad6c5e7792c7eac0a01e550f2c2004462e01a64a91ea1636aba6fef6e71", size = 12450968, upload-time = "2026-06-04T00:52:28.94Z" }, + { url = "https://files.pythonhosted.org/packages/4a/e1/79fbe51f2e4b9d8347f2013cd7ed0b63f3b499038c02dc0357e9b28a3a47/ty-0.0.43-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:66d474395d7635fb618bdbb58b4e3360259a2056d0a5621b82754b9da2cd8a04", size = 12064187, upload-time = "2026-06-04T00:52:12.039Z" }, + { url = "https://files.pythonhosted.org/packages/9b/3f/c758a3a8df5b90d331f2b60c8f16021ee64d75e78f99d67cc4efc9bf5f4b/ty-0.0.43-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2663a0003a8b60fb98db7f6f6e673df80b21d0fe3a9868a26fb06b4e049b6fc4", size = 11943208, upload-time = "2026-06-04T00:52:31.14Z" }, + { url = "https://files.pythonhosted.org/packages/54/5f/f516442749cf1b45ca6720a5d41df2738a486ed9ace774c03d515db89084/ty-0.0.43-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:d5a6c352d374d889189d5ec82b54b26a5885f769f7b7787f7f875500dcb8673e", size = 12143572, upload-time = "2026-06-04T00:52:18.457Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/0d83c7f43bf4c10f3678bfe7d938e51c445298c7b923f155c5204730c2df/ty-0.0.43-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e7dbbeedfad3ca250d74fcc355fa9ab6b38d2a17f22d6304f615716939dbbb27", size = 11279355, upload-time = "2026-06-04T00:52:26.726Z" }, + { url = "https://files.pythonhosted.org/packages/3e/de/a6c978bef6d9e949f79f4782d9e4ee4df0893713e73b055d84c1a5116b9a/ty-0.0.43-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:24b18a0273ee46154996cfcfa27438f851f440c925587ec200df6f98dffe67d3", size = 11408412, upload-time = "2026-06-04T00:52:35.282Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b1/d13857c23867f0f76b92e38e5841c64ca5e76dc5d4bf27f52cb81d8ab685/ty-0.0.43-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2ef681951520d692b7e9c0b5e56aacf4f98ccae47cf6ffccaf2c7b6b33dc226e", size = 11541709, upload-time = "2026-06-04T00:52:16.451Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f1/cd6afc6f6a687e238bf5e12189f7920e81a0bdef6c3dba4c784ef140f7d9/ty-0.0.43-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2af105de7437143aa4676b28016b5bee661aaaa4eff52be5867fb25119641ceb", size = 12041266, upload-time = "2026-06-04T00:52:43.541Z" }, + { url = "https://files.pythonhosted.org/packages/bd/ba/51ca7c3335da2b8d0a3e477fa4986be9f4a53b05bfab862967d8d2e6ca60/ty-0.0.43-py3-none-win32.whl", hash = "sha256:e4773115b0d6486ee30f1657fc8bdffe7e3a3f5300ab77ef2495da6e83e4694f", size = 10858724, upload-time = "2026-06-04T00:52:07.843Z" }, + { url = "https://files.pythonhosted.org/packages/9f/29/5d80453e5f7c520145fa058851da87230dbd7ca761a7675447a9fe504e0b/ty-0.0.43-py3-none-win_amd64.whl", hash = "sha256:48d3545094a4ae6395492c7e6ac90550fce969e0ed2815fbf8c5da9756676b7d", size = 11976157, upload-time = "2026-06-04T00:52:41.438Z" }, + { url = "https://files.pythonhosted.org/packages/dc/ed/befe5a543e5b95e754ed38ee95239e44efda9bc5f578db4ac1bc8dd758d6/ty-0.0.43-py3-none-win_arm64.whl", hash = "sha256:740ca33d7f75f655a4e7d475bc42dfb825c13219bb073fad30fcc04d35790c74", size = 11308680, upload-time = "2026-06-04T00:52:39.233Z" }, ] [[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]] @@ -2101,36 +2112,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949 } +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611 }, + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, ] [[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 = "urllib3" version = "2.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602 } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087 }, + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, ] [[package]] name = "wcwidth" version = "0.8.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/34/74/c6428f875774288bec1396f5bfcbc2d925700a4dad61727fd5f2b12f249d/wcwidth-0.8.2.tar.gz", hash = "sha256:91fbef97204b96a3d4d421609b80340b760cf33e26da123ff243d76b1fda8dda", size = 1466253 } +sdist = { url = "https://files.pythonhosted.org/packages/34/74/c6428f875774288bec1396f5bfcbc2d925700a4dad61727fd5f2b12f249d/wcwidth-0.8.2.tar.gz", hash = "sha256:91fbef97204b96a3d4d421609b80340b760cf33e26da123ff243d76b1fda8dda", size = 1466253, upload-time = "2026-06-29T18:11:11.601Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl", hash = "sha256:d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85", size = 323166 }, + { url = "https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl", hash = "sha256:d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85", size = 323166, upload-time = "2026-06-29T18:11:09.888Z" }, ] [[package]] @@ -2142,16 +2153,16 @@ dependencies = [ { name = "packaging" }, { name = "pandas" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311 } +sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311, upload-time = "2026-04-13T19:45:36.688Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326 }, + { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326, upload-time = "2026-04-13T19:45:34.659Z" }, ] [[package]] name = "zipp" version = "4.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214 } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238 }, + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, ] From 92c9c11c36217e30a4666ce8cf12a2f9cc7e3ccb Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 22 Jul 2026 14:37:58 +0100 Subject: [PATCH 49/95] Move configuration for thermal indices into schema --- pproc-core/pyproject.toml | 1 + .../plugins/pproc/config/accumulation.py | 5 +- .../workflows/plugins/pproc/fluent.py | 182 ++- .../workflows/plugins/pproc/utils/request.py | 16 +- .../ppcore/configs/common/preprocessing.py | 17 +- .../src/ppcore/configs/product/ensemble.py | 14 +- pproc-core/src/ppcore/products/ensemble.py | 58 +- .../ppcore/products/templates/thermo.yaml | 22 + .../tests/ppcore/products/test_products.py | 26 +- pproc-core/tests/ppcore/schema/test_schema.py | 1 - pproc-core/tests/schema.yaml | 1196 +++++------------ 11 files changed, 511 insertions(+), 1027 deletions(-) create mode 100644 pproc-core/tests/ppcore/products/templates/thermo.yaml diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index d6280ac1..857a5103 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -41,6 +41,7 @@ dependencies = [ ] scripts.ppcore-config = "ppcore.config:main" +scripts.pproc-product = "ppcore.product:main" [dependency-groups] dev = [ diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py index a7e34513..aec39afc 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py @@ -1,4 +1,4 @@ -from typing import Literal, Optional, Union +from typing import Literal, Optional, Union, Annotated import datetime from earthkit.time.calendar import MonthInYear @@ -49,3 +49,6 @@ def name(self, coords: Coords) -> str: month_length = MonthInYear(this_month.year, this_month.month).length() * 24 start = end - month_length return f"{start}-{end}" + + +AccumName = Annotated[Union[Default, Monthly], Field(discriminator="type")] diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index ba8b9724..f377a390 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -10,13 +10,20 @@ import inspect from typing import Optional, Union, Any +from pydantic import TypeAdapter +import logging import numpy as np from earthkit.workflows.backends.earthkit import FieldListBackend from earthkit.workflows.nodetree import nodetree_size from earthkit.workflows import fluent -from earthkit.workflows.nodetree import nodetree_arrays, nodetree_dimensions +from earthkit.workflows.nodetree import ( + nodetree_array, + nodetree_arrays, + nodetree_dimensions, + nodetree_from_dict, +) from earthkit.workflows.plugins.pproc.utils.request import MultiSourceRequest from earthkit.workflows.plugins.pproc.utils.request import Request from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values @@ -25,7 +32,7 @@ from earthkit.workflows.plugins.pproc.config.accumulation import ( Coords, Default, - Monthly, + AccumName, ) from earthkit.workflows.plugins.pproc.metadata.accumulation import accumulation_metadata from earthkit.workflows.plugins.pproc.metadata.threshold import threshold_metadata @@ -38,64 +45,10 @@ } -class Action(fluent.Action): - # TODO: migrate to schema - _THERMAL_CONFIG: dict[str, dict[str, Any]] = { - "utci": { - "operation": "ppruntime.thermal_indices.calc_utci", - "params": ["2t", "2d", "10si", "mrt"], - }, - "10si": { - "operation": "norm", - "metadata": {"paramId": 207}, - "params": ["10u", "10v"], - }, - "mrt": { - "operation": "ppruntime.thermal_indices.calc_mrt", - "params": ["cossza", "dsrp", "ssrd", "fdir", "strd", "str", "ssr"], - }, - "cossza": { - "operation": "ppruntime.thermal_indices.calc_cossza", - "params": ["2t", "fdir"], - }, - "dsrp": { - "operation": "ppruntime.thermal_indices.calc_dsrp", - "params": ["fdir", "cossza"], - }, - "hmdx": { - "operation": "ppruntime.thermal_indices.calc_hmdx", - "params": ["2t", "2d"], - }, - "2r": { - "operation": "ppruntime.thermal_indices.calc_rhp", - "params": ["2t", "2d"], - }, - "heatx": { - "operation": "ppruntime.thermal_indices.calc_heatx", - "params": ["2t", "2d"], - }, - "wbgt": { - "operation": "ppruntime.thermal_indices.calc_wbgt", - "params": ["2t", "2d", "10si", "mrt"], - }, - "gt": { - "operation": "ppruntime.thermal_indices.calc_gt", - "params": ["2t", "10si", "mrt"], - }, - "nefft": { - "operation": "ppruntime.thermal_indices.calc_nefft", - "params": ["2t", "10si", "2r"], - }, - "wcf": { - "operation": "ppruntime.thermal_indices.calc_wcf", - "params": ["2t", "10si"], - }, - "aptmp": { - "operation": "ppruntime.thermal_indices.calc_aptmp", - "params": ["2t", "2r", "10si"], - }, - } +logger = logging.getLogger(__name__) + +class Action(fluent.Action): def _reduction_with_metadata( self, operation: str, @@ -511,38 +464,73 @@ def preprocessing( """ return self._wrapped_reduction(operation, dim, **kwargs) - # TODO: turn this into more general param operation that scans schema to look for - # computation method of missing parameters. Or should it be that in the creation of the - # configuration returned by the schema, we list configuration for creating all required - # intermediate parameters def thermal_index( - self, param: str, dim: str = "param", metadata: dict | None = None + self, + function: str, + params: list[str], + deaccumulate: Optional[list[str]] = None, + dim: str = "param", + join: bool = True, + metadata: dict | None = None, ) -> Action: - config: dict[str, Any] = self._THERMAL_CONFIG[param] - new_action = self - for inp in config["params"]: - if ( - inp not in new_action.nodes.coords[dim] - and inp in new_action._THERMAL_CONFIG - ): - dependency = new_action.thermal_index(inp, dim=dim, metadata=metadata) - dependency._add_dimension(dim, inp) - new_action = new_action.join(dependency, dim) - try: - selection = new_action.sel(param=(config["params"])) - except IndexError: - selection = new_action - config_metadata: dict[str, str] = config.get("metadata", {}) - new_metadata = ( - config_metadata if not metadata else {**metadata, **config_metadata} + """ + Thermal index computation + + Params + ------ + function: str, pproc-runtime function to call for thermal index computation + params: list[str], list of input parameters + deaccumulate: list[str], list of parameters that require deaccumulating + dim: str, parameter dimension + join: bool, whether to join the resulting action with input action + metadata: dict, metadata to set on the output + """ + logger.debug( + f"Thermal index: function {function}, params {params}, deaccumulate {deaccumulate}" ) - ret = selection._wrapped_reduction( - fluent.Payload( - func=str(config["operation"]), kwargs={"metadata": new_metadata} - ), + if deaccumulate is not None: + deaccum = self.sel(param=deaccumulate) + array = nodetree_array(deaccum.nodes) + steps = array.coords["step"].data.tolist() + deaccum = deaccum.accumulation( + operation=None, + coords=[[steps[x], steps[x + 1]] for x in range(len(steps) - 1)], + deaccumulate=True, + ) + deaccum = type(self)( + nodetree_from_dict( + { + path: array.assign_coords( + {"step": steps[1] if len(steps) <= 2 else steps[1:]} + ) + for path, array in nodetree_arrays(deaccum.nodes) + } + ) + ) + param_action = fluent.merge( + self.select( + param=[x for x in params if x not in deaccumulate], + step=steps[1:], + expand=True, + ), + deaccum, + ) + param_action._squeeze_dimension("step") + param_action = param_action.combine_branches(dim=dim) + else: + param_action = self.select(param=params, expand=True) + param_action._squeeze_dimension("step") + param_action = param_action.combine_branches(dim=dim) + + ret = param_action._wrapped_reduction( + fluent.Payload(func=function, kwargs={"metadata": metadata or {}}), dim=dim, ) - return ret + ret._add_dimension(dim, str(metadata.get("paramId"))) + if not join: + return ret + ret = ret.set_path(f"/{metadata.get('paramId')}") + return fluent.merge(self, ret) def mask( self, @@ -623,7 +611,7 @@ def accumulation( dim: str = "step", metadata: dict | None = None, deaccumulate: bool = False, - name: Union[Default, Monthly, dict] = Default(), + name: Union[AccumName, dict] = Default(), **kwargs, ) -> Action: """ @@ -751,7 +739,7 @@ def _accum_transform( operation: str | fluent.Payload, metadata: Optional[dict] = None, deaccumulate: bool = False, - name: Union[Default, Monthly, dict] = Default(), + name: Union[AccumName, dict] = Default(), kwargs: dict = {}, ) -> fluent.Action: if deaccumulate: @@ -764,16 +752,17 @@ def _accum_transform( accum_action = action.select({dim: coords}) if isinstance(name, dict): - name = Default(**name) if name.get("type_") == "default" else Monthly(**name) + name = TypeAdapter(AccumName, name).validate_python() accum_name = name.name(coords) accum_metadata = accumulation_metadata(dim, coords, accum_name, metadata) if operation is None: accum_action._squeeze_dimension(dim) - if metadata is not None: + if len(accum_metadata) > 0: accum_action = accum_action.map( fluent.Payload( - FieldListBackend.set_metadata, [fluent.Node.input_name(0), metadata] + FieldListBackend.set_metadata, + [fluent.Node.input_name(0), accum_metadata], ) ) else: @@ -799,7 +788,7 @@ def from_source( for request in requests: if isinstance(request, dict): request = Request(request) - payloads = np.empty(tuple(request.dims.values()), dtype=object) + payloads = np.empty(tuple(request.dims().values()), dtype=object) for indices, new_request in request.expand(): payloads[indices] = fluent.Payload( "ppruntime.io.retrieve", @@ -808,7 +797,10 @@ def from_source( ) new_action = fluent.from_source( payloads, - coords={key: list(request[key]) for key in request.dims.keys()}, + dims=request.dims().keys(), + coords={ + key: request[key] for key in request.dims(exclude_scalar=False).keys() + }, action=Action, ) @@ -822,3 +814,7 @@ def from_source( raise ValueError("Join key must be specified for multiple requests") all_actions = all_actions.join(new_action, join_key) return all_actions + + +def path_from_request(request: dict, keys: list[str] = ["levtype", "param"]) -> str: + return "/".join([str(request[x]) for x in keys]) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py index 0a2421ca..356f5bd2 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py @@ -22,14 +22,14 @@ def __init__(self, request: dict, no_expand: Optional[tuple[str]] = None): self.no_expand = no_expand or tuple() self.ignore = ["interpolate"] - @property - def dims(self) -> OrderedDict: + def dims(self, exclude_scalar: bool = True) -> OrderedDict: dimensions = OrderedDict() for key, values in self.request.items(): if key in self.ignore or key in self.no_expand: continue - if hasattr(values, "__iter__") and not isinstance(values, str): - dimensions[key] = len(values) + if exclude_scalar and np.ndim(values) == 0: + continue + dimensions[key] = np.size(values) return dimensions def __setitem__(self, key, value): @@ -58,12 +58,12 @@ def make_dim(self, key, value=None): self.fake_dims.append(key) def expand(self): - reqs = [self.request[x] for x in self.dims.keys()] + reqs = [self.request[x] for x in self.dims().keys()] for indices, params in zip( itertools.product(*(range(len(x)) for x in reqs)), itertools.product(*reqs) ): new_request = self.request.copy() - for index, expand_param in enumerate(self.dims.keys()): + for index, expand_param in enumerate(self.dims().keys()): new_request[expand_param] = params[index] # Remove fake dims from request @@ -109,10 +109,10 @@ def pop(self, key, default=None): return default def expand(self): - for params in itertools.product(*[self.request[x] for x in self.dims.keys()]): + for params in itertools.product(*[self.request[x] for x in self.dims().keys()]): indices = [] new_requests = copy.deepcopy(self.requests) - for index, expand_param in enumerate(self.dims.keys()): + for index, expand_param in enumerate(self.dims().keys()): [x.__setitem__(expand_param, params[index]) for x in new_requests] indices.append(list(self.request[expand_param]).index(params[index])) diff --git a/pproc-core/src/ppcore/configs/common/preprocessing.py b/pproc-core/src/ppcore/configs/common/preprocessing.py index ee791e16..4ebebf1b 100644 --- a/pproc-core/src/ppcore/configs/common/preprocessing.py +++ b/pproc-core/src/ppcore/configs/common/preprocessing.py @@ -49,6 +49,21 @@ class Expand(PProcBaseModel): backend_kwargs: Optional[dict] = None +class Select(PProcBaseModel): + operation: Literal["select"] = "select" + dim: str + values: Union[int, str, list[int], list[str]] + + +class ThermalIndex(PProcBaseModel): + operation: Literal["thermal_index"] = "thermal_index" + function: str + params: list[str] + deaccumulate: Optional[list[str]] = None + metadata: Optional[dict] = None + join: bool = True + + # class Expression(Preprocessing): # operation: Literal["expression"] = "expression" # expr: str @@ -77,7 +92,7 @@ class PreprocessingConfig(PProcBaseModel): # value: 3600 actions: List[ Annotated[ - Union[Scale, Divide, Combination, Masking, Expand], + Union[Scale, Divide, Combination, Masking, Expand, Select, ThermalIndex], Field(discriminator="operation"), ] ] = Field(default_factory=list) diff --git a/pproc-core/src/ppcore/configs/product/ensemble.py b/pproc-core/src/ppcore/configs/product/ensemble.py index 3942322f..d4e76376 100644 --- a/pproc-core/src/ppcore/configs/product/ensemble.py +++ b/pproc-core/src/ppcore/configs/product/ensemble.py @@ -7,7 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Any, Union, Literal, Annotated +from typing import Any, Union, Literal, Annotated, Optional from pydantic import Field, model_validator from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel @@ -33,10 +33,12 @@ class Ensemble(PProcBaseModel): name: Literal["ensemble"] = Field("ensemble") preprocessing: PreprocessingConfig = Field(default_factory=PreprocessingConfig) accumulations: dict[str, Accumulation] = Field(default_factory=dict) - statistics: Annotated[ - Union[Mean, StandardDeviation, Quantiles, ThresholdProbability], - Field(discriminator="operation"), - ] + statistics: Optional[ + Annotated[ + Union[Mean, StandardDeviation, Quantiles, ThresholdProbability], + Field(discriminator="operation"), + ] + ] = None inputs: EnsembleInputModel # type: ignore output: Output @@ -64,7 +66,7 @@ def validate_config(cls, data: Any) -> Any: "request": extract_mars(original), } if metadata := data.pop("metadata", None): - stat_metadata = data["statistics"].setdefault("metadata", {}) + stat_metadata = data.get("statistics", {}).setdefault("metadata", {}) stat_metadata.update(metadata) if data.pop("quantiles", None) is not None: data["statistics"]["quantiles"] = original["quantile"] diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index eb52d0a4..cbecb4bd 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -9,15 +9,16 @@ from typing import Optional, Iterator from dataclasses import dataclass +import numpy as np -from earthkit.workflows.nodetree import nodetree_dimensions +from earthkit.workflows.fluent import merge from earthkit.workflows.plugins.pproc.fluent import ( Action, from_source, + path_from_request, ) from earthkit.workflows.plugins.pproc.utils.request import Request -from ppcore.utils.requests import validate_request from ppcore.utils.mars import extract_mars from ppcore.configs.product.ensemble import Config from ppcore.products.base import Product @@ -32,21 +33,33 @@ class Ensemble(Product): def source(self, ensemble_dim: Optional[str] = None) -> Action: input_config = self.config.inputs.fc ensemble_dim = ensemble_dim or self.ensemble_dim + expand_dims = { + ensemble_dim, + self.preprocessing_dim, + "step", + *self.config.accumulations.keys(), + } if len(input_config.sources) == 0: raise ValueError("No sources provided for ensemble config") - action: Action = None # type: ignore - for x in [dict(x, **self.input_overrides) for x in input_config.requests]: + actions = [] + for req_dict in [ + dict(x, **self.input_overrides) for x in input_config.requests + ]: req = Request( - validate_request(x), no_expand=("number", *input_config.expand_exclude) + { + k: [val] if np.ndim(val) == 0 and k in expand_dims else val + for k, val in req_dict.items() + }, + no_expand=("number", *input_config.expand_exclude), ) new_action = from_source( input_config.sources, [req], input_config.dtype, ) - new_action = new_action.set_path(f"/levtype={x['levtype']}") - if "number" in x: + new_action = new_action.set_path(path_from_request(req_dict)) + if "number" in req_dict: new_action = new_action.expand( "number", ("number", req["number"]), @@ -54,10 +67,8 @@ def source(self, ensemble_dim: Optional[str] = None) -> Action: ) else: new_action._add_dimension("number", 0) - if action is None: - action = new_action - else: - action = action.join(new_action, dim=ensemble_dim) # type: ignore + actions.append(new_action) + action = merge(*actions) return action def action( @@ -67,13 +78,15 @@ def action( ensemble_dim: Optional[str] = None, ) -> Action: if forecast: - ret = forecast.sel( - { - key: value - for key, value in self.config.inputs.fc.requests[0].items() - if key in nodetree_dimensions(forecast.nodes) - } - ) + actions = [] + for req in self.config.inputs.fc.requests: + req.setdefault("number", [0]) + selected = forecast.sel(req) + selected.set_path(path_from_request(req)) + if np.size(req["number"]) == 1: + selected._add_dimension("number", np.atleast_1d(req["number"])[0]) + actions.append(selected) + ret = merge(*actions) else: ret = self.source(ensemble_dim=ensemble_dim) for preprocessing in self.config.preprocessing.actions: @@ -86,10 +99,11 @@ def action( dim=dim, **accumulation.create_action(), ) - ret = ret.ensemble_statistics( - dim=ensemble_dim or self.ensemble_dim, - **self.config.statistics.model_dump(), - ) + if self.config.statistics is not None: + ret = ret.ensemble_statistics( + dim=ensemble_dim or self.ensemble_dim, + **self.config.statistics.model_dump(), + ) if len(self.config.output.targets) > 0: output_config = self.config.output.model_dump() diff --git a/pproc-core/tests/ppcore/products/templates/thermo.yaml b/pproc-core/tests/ppcore/products/templates/thermo.yaml new file mode 100644 index 00000000..e5867bd0 --- /dev/null +++ b/pproc-core/tests/ppcore/products/templates/thermo.yaml @@ -0,0 +1,22 @@ +- class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: [261002, 261001, 260004, 260005, 260255, 260242, 261016, 261018, 261015, 261014, 261023] + date: "20260721" + time: 12 + expver: "0001" + step: [1, 2] + sources: "fdb:" +- class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: [260242, 261023, 261018, 260255, 260004, 260005, 261016] + date: "20260721" + time: 12 + expver: "0001" + step: 0 + sources: "fdb:" diff --git a/pproc-core/tests/ppcore/products/test_products.py b/pproc-core/tests/ppcore/products/test_products.py index 10394f54..bccbd572 100644 --- a/pproc-core/tests/ppcore/products/test_products.py +++ b/pproc-core/tests/ppcore/products/test_products.py @@ -32,8 +32,9 @@ os.path.join(ROOT_DIR, "templates", "ensms.yaml"), os.path.join(ROOT_DIR, "templates", "prob.yaml"), os.path.join(ROOT_DIR, "templates", "quantiles.yaml"), + os.path.join(ROOT_DIR, "templates", "thermo.yaml"), ], - ids=["ensms", "prob", "quantiles"], + ids=["ensms", "prob", "quantiles", "thermo"], ) def test_graph_construction(requests): with open(requests, "r") as f: @@ -60,9 +61,11 @@ def test_custom_source(requests): output_requests = yaml.safe_load(f) graph = Graph([]) + defaults = {"class": "od", "date": "20230914", "time": "1200", "expver": "0001"} for req in expand(output_requests): inputs = [ { + **defaults, "stream": "oper", "type": "fc", "step": list(range(0, 24, 3)), @@ -70,6 +73,7 @@ def test_custom_source(requests): "levtype": "sfc", }, { + **defaults, "stream": "enfo", "type": "pf", "step": list(range(0, 24, 3)), @@ -78,6 +82,7 @@ def test_custom_source(requests): "levtype": "sfc", }, { + **defaults, "stream": "oper", "type": "fc", "step": list(range(0, 24, 3)), @@ -86,6 +91,7 @@ def test_custom_source(requests): "levelist": [250, 500, 850], }, { + **defaults, "stream": "enfo", "type": "pf", "step": list(range(0, 24, 3)), @@ -103,22 +109,22 @@ def test_custom_source(requests): ), metadata={"edition": 2}, ) - source_actions = {} + source_actions = [] for levtype in ["sfc", "pl"]: - source_requests = [] for request in inputs: if request["levtype"] != levtype: continue req = Request(request) if "number" not in req: req.make_dim("number", 0) - source_requests.append(req) - source_actions[f"/levtype={levtype}"] = from_source( - ["fdb"], - source_requests, - join_key="number", - ) - sources = merge(**source_actions) + new_action = from_source( + ["fdb"], + [req], + join_key="number", + ) + new_action = new_action.set_path(f"/levtype={levtype}/{req['param']}") + source_actions.append(new_action) + sources = merge(*source_actions) new_action = product.action( ensemble_dim="number", forecast=sources, diff --git a/pproc-core/tests/ppcore/schema/test_schema.py b/pproc-core/tests/ppcore/schema/test_schema.py index bc7a8a30..f1613c95 100644 --- a/pproc-core/tests/ppcore/schema/test_schema.py +++ b/pproc-core/tests/ppcore/schema/test_schema.py @@ -231,7 +231,6 @@ ) def test_schema_from_output(req, dataset, config, num_generated): test_schema = Schema(**schema()) - print("REQ", req) test_config = test_schema.config_from_output(req, test_schema.definition(dataset)) # type: ignore test_config.pop("metadata", None) assert config == test_config diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index 59a3ab21..206a89b3 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -137,34 +137,318 @@ config: number: {} "*": filter:param: - "261016/260242/260004/260005/261018/260255/261023": + "200189/200142/200143/200144/228216/200228": + entrypoint: pproc-accumulate + accumulations: + step: + type: legacywindow + operation: difference + name: + type: default + length: "{steplength}:int" + metadata: + timeRangeIndicator: 5 + stepType: diff + "261016": entrypoint: pproc-thermal-indices - outputs: - indices: + preprocessing: + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_hmdx" + params: ["167", "168"] metadata: edition: 2 bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - "261001/261002/261014/261015": + paramId: "{param}:int" + join: false + "261023": entrypoint: pproc-thermal-indices - outputs: - indices: + preprocessing: + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_wbt" + params: ["167", "168"] metadata: edition: 2 bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - accumulations: - step: - operation: difference - "*": - entrypoint: pproc-accumulate - filter:stream: - "enfh/enwh/eefh/weeh": - accumulations: - hdate: {} - "*": {} + paramId: "{param}:int" + join: false + "260242": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_rhp" + params: ["167", "168"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false + "260004": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_heatx" + params: ["167", "168"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false + "260005": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: norm + params: ["167", "168"] + metadata: + paramId: 207 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_wcf" + params: ["167", "207"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false + "214001": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_cossza" + params: ["167", "228021"] + deaccumulate: ["228021"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false + "47": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_cossza" + params: ["167", "228021"] + deaccumulate: ["228021"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 214001 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_dsrp" + params: ["228021", "214001"] + deaccumulate: ["228021"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false + "261002": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_cossza" + params: ["167", "228021"] + deaccumulate: ["228021"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 214001 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_mrt" + params: ["214001", "47", "169", "228021", "175", "177", "176"] + deaccumulate: ["47", "169", "228021", "175", "177", "176"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false + "261001": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: norm + params: ["167", "168"] + metadata: + paramId: 207 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_cossza" + params: ["167", "228021"] + deaccumulate: ["228021"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 214001 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_mrt" + params: ["214001", "47", "169", "228021", "175", "177", "176"] + deaccumulate: ["47", "169", "228021", "175", "177", "176"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 261002 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_utci" + params: ["167", "168", "207", "261002"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false + "261014": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: norm + params: ["167", "168"] + metadata: + paramId: 207 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_cossza" + params: ["167", "228021"] + deaccumulate: ["228021"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 214001 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_mrt" + params: ["214001", "47", "169", "228021", "175", "177", "176"] + deaccumulate: ["47", "169", "228021", "175", "177", "176"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 261002 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_wbgt" + params: ["167", "168", "207", "261002"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false + "261015": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: norm + params: ["167", "168"] + metadata: + paramId: 207 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_cossza" + params: ["167", "228021"] + deaccumulate: ["228021"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 214001 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_mrt" + params: ["214001", "47", "169", "228021", "175", "177", "176"] + deaccumulate: ["47", "169", "228021", "175", "177", "176"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 261002 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_gt" + params: ["167", "207", "261002"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false + "261018": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: norm + params: ["167", "168"] + metadata: + paramId: 207 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_rhp" + params: ["167", "168"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 260242 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_nefft" + params: ["167", "207", "260242"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false + "260255": + entrypoint: pproc-thermal-indices + preprocessing: + - operation: thermal_index + function: norm + params: ["167", "168"] + metadata: + paramId: 207 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_rhp" + params: ["167", "168"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 260242 + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_aptmp" + params: ["167", "260242", "207"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: "{param}:int" + join: false em/es: entrypoint: "pproc-ensms" metadata_from_output: ["param", "stream", "date", "type"] @@ -854,6 +1138,17 @@ config: edition: 2 productDefinitionTemplateNumber: 5 typeOfGeneratingProcess: 5 + pb: + entrypoint: pproc-quantiles + metadata_from_output: ["param", "stream", "date", "type"] + statistics: + operation: quantiles + filter:stream: + enfo/waef: + statistics: + metadata: + localDefinitionNumber: 30 + "*": {} fcmean: filter:param: 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: @@ -1181,875 +1476,6 @@ config: metadata: type: fcmean bitsPerValue: 16 - fcstdev: - dtype: float64 - filter:stream: - oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: - entrypoint: pproc-accumulate - filter:stream: - enfh/enwh/eefh/weeh: - accumulations: - hdate: {} - "*": {} - accumulations: - levelist: {} - step: - type: legacywindow - operation: standard_deviation - name: - type: default - length: "{steplength}:int" - metadata: - type: fcstdev - bitsPerValue: 16 - legBaseDate: 0 - legNumber: 0 - filter:param: - "*": - accumulations: - step: - metadata: - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" - "201": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 201 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" - "202": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 202 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" - "239117": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - edition: 2 - paramId: 239117 - stepType: sd - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 6 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 - msmm/swmm: - entrypoint: pproc-monthly-stats - accumulations: - step: - type: legacywindow - operation: standard_deviation - name: - type: monthly - date: "{date}:str" - metadata: - type: fcstdev - bitsPerValue: 16 - fcmin: - dtype: float64 - filter:stream: - oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: - entrypoint: pproc-accumulate - filter:stream: - enfh/enwh/eefh/weeh: - accumulations: - hdate: {} - "*": {} - accumulations: - levelist: {} - step: - type: legacywindow - operation: minimum - name: - type: default - length: "{steplength}:int" - metadata: - type: fcmin - bitsPerValue: 16 - legBaseDate: 0 - legNumber: 0 - filter:param: - "*": - accumulations: - step: - metadata: - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" - "201": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 201 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" - "202": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 202 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" - "238117": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - edition: 2 - paramId: 238117 - stepType: min - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 3 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 - msmm/swmm: - entrypoint: pproc-monthly-stats - accumulations: - step: - type: legacywindow - operation: minimum - name: - type: monthly - date: "{date}:str" - metadata: - type: fcmin - bitsPerValue: 16 - fcmax: - dtype: float64 - filter:stream: - oper/enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: - entrypoint: pproc-accumulate - filter:stream: - enfh/enwh/eefh/weeh: - accumulations: - hdate: {} - "*": {} - accumulations: - levelist: {} - step: - type: legacywindow - operation: maximum - name: - type: default - length: "{steplength}:int" - metadata: - type: fcmax - bitsPerValue: 16 - legBaseDate: 0 - legNumber: 0 - filter:param: - "*": - accumulations: - step: - metadata: - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" - "201": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 201 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" - "202": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - paramId: 202 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" - "237117": - metadata_from_output: ["stream", "date"] - accumulations: - step: - metadata: - edition: 2 - paramId: 237117 - stepType: max - discipline: 0 - parameterCategory: 7 - parameterNumber: 6 - typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 2 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 - msmm/swmm: - entrypoint: pproc-monthly-stats - accumulations: - step: - type: legacywindow - operation: maximum - name: - type: monthly - date: "{date}:str" - metadata: - type: fcmax - bitsPerValue: 16 - pb: - entrypoint: pproc-quantiles - metadata_from_output: ["param", "stream", "date", "type"] - statistics: - operation: quantiles - filter:stream: - enfo/waef: - statistics: - metadata: - localDefinitionNumber: 30 - "*": {} - taem/taes: - filter:stream: - eefo: - filter:param: - 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: - entrypoint: pproc-anomaly - dtype: float64 - metadata: - bitsPerValue: 24 - accumulations: - step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - metadata: - timeRangeIndicator: 3 - stepType: avg - clim: - accumulations: - date: - operation: mean - 234167/234139/234151/234228: - entrypoint: pproc-significance - epsilon: 1e-10 - use_clim_anomaly: true - accumulations: - step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - metadata: - timeRangeIndicator: 3 - stepType: avg - clim: - total_fields: 220 - accumulations: - date: - operation: aggregation - clim_em: - accumulations: - date: - operation: aggregation - "235117": - entrypoint: pproc-ensms - dtype: float64 - outputs: - default: - metadata: - edition: 2 - productDefinitionTemplateNumber: 12 - mean: - metadata: - derivedForecast: 0 - type: taem - std: - metadata: - derivedForecast: 4 - type: taes - metadata: - typeOfGeneratingProcess: 4 - typeOfTimeIncrement: 2 - indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 - bitsPerValue: 16 - packingType: "grid_ccsds" - "*": - entrypoint: pproc-ensms - outputs: - mean: - metadata: - type: taem - std: - metadata: - type: taes - dtype: float64 - metadata: - perturbationNumber: 0 - bitsPerValue: 16 - timeRangeIndicator: 3 - stepType: "avg" - efhs/eehs: - entrypoint: pproc-ensms - dtype: float64 - accumulations: - step: {} - levelist: {} - hdate: - operation: aggregation - metadata: - climateDateFrom: "{start_coord}:int" - climateDateTo: "{end_coord}:int" - filter:param: - "235117": - outputs: - default: - metadata: - edition: 2 - productDefinitionTemplateNumber: 11 - mean: - metadata: - type: taem - std: - metadata: - type: taes - metadata: - perturbationNumber: 0 - numberOfForecastsInEnsemble: "{num_fields}:int" - yearOfEndOfOverallTimeInterval: "{year}:int" - typeOfGeneratingProcess: 4 - typeOfTimeIncrement: 3 - dataDate: "{date}:int" - bitsPerValue: 16 - packingType: "grid_ccsds" - "*": - outputs: - mean: - metadata: - type: taem - std: - metadata: - type: taes - metadata: - perturbationNumber: 0 - numberOfForecastsInEnsemble: "{num_fields}:int" - bitsPerValue: 16 - timeRangeIndicator: 3 - stepType: avg - dataDate: "{date}:int" - cd: - filter:stream: - efhs/wehs/eehs: - entrypoint: pproc-quantiles - total_fields: 220 - outputs: - quantiles: - metadata: - localDefinitionNumber: 19 - type: cd - metadata: - bitsPerValue: 12 - sampleSizeOfModelClimate: "{num_fields}:int" - versionOfModelClimate: 0 - efiOrder: 0 - numberOfReforecastYearsInModelClimate: 20 - filter:param: - "140249": - entrypoint: pproc-histogram - outputs: - histogram: - metadata: - localDefinitionNumber: 19 - type: cd - total_fields: 880 - bins: [-22.5, 22.5, 67.5, 112.5, 157.5, 202.5, 247.5, 292.5, 337.5] - mod: 360. - normalise: true - scale_out: 200. - metadata: - numberOfDaysInClimateSamplingWindow: 31 - sampleSizeOfModelClimate: 1980 - accumulations: - date: - operation: "sum" - "*": - filter:param: - "140200": # TODO: Remove after 50r1 - preprocessing: - - operation: mask - select: {param: "229.140"} - mask: [{param: "229.140"}, "<=", 0.1] - "*": {} - accumulations: - date: - operation: "aggregation" - filter:steplength: - "*": - metadata: - numberOfDaysInClimateSamplingWindow: 31 - "168": - metadata: - numberOfDaysInClimateSamplingWindow: 7 - pfc: - entrypoint: pproc-quantiles - outputs: - quantiles: - metadata: - edition: 2 - productDefinitionTemplateNumber: 90 - type: pfc - typeOfGeneratingProcess: 13 - typeOfPostProcessing: 206 - filter:class: - od: - outputs: - quantiles: - metadata: - typeOfProcessedData: 5 - accumulations: - step: {} - number: - operation: aggregation - ea: - outputs: - quantiles: - metadata: - typeOfProcessedData: 1 - total_fields: 100 - gwt: - metadata_from_output: ["param", "date"] - entrypoint: pproc-ecpoint - outputs: - default: - metadata: - edition: 2 - bitsPerValue: 24 - generatingProcessIdentifier: 3 - bias_corrected: - metadata: - type: gbf - weather_types: - metadata: - type: gwt - filter:class: - od: - outputs: - bias_corrected: - metadata: - numberOfForecastsInEnsemble: 51 # TODO: Remove in 50r2 when oper/fc encodes this correctly - weather_types: - metadata: - numberOfForecastsInEnsemble: 51 - members: - metadata: - grib2LocalSectionNumber: 1 - type: fcmean - filter:stream: - oper: - outputs: - members: - metadata: - stream: enfo - enfo: {} - filter:param: - "228": - predictant: tp - min_predictant: 0.04 - scale_outputs: 0.001 - interp_keys: - legendre-loader: "shmem" - matrix-loader: "file-io" - interpolation: grid-box-average - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - type: legacywindow - operation: difference - name: - type: default - length: "{steplength}:int" - metadata: - stepType: accum - filter:steplength: - "6": - num_inputs: 7 - predictors: ["cp_ratio", "tp", "mxcape6", "2t", "local_solar_time", "ws", "cdir"] - dependencies: - wind: - vod2uv: true - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - cp: - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - operation: difference - cdir: - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - operation: difference - cape: - accumulations: - step: - type: legacywindow - operation: maximum - 2t: - preprocessing: - - operation: expression - expr: t2_k - d2_k - expr_data: - t2_k: - param: '167' - d2_k: - param: '168' - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - "12": - num_inputs: 7 - predictors: ["cp_ratio", "tp", "mxcape6", "2t", "ws", "cdir"] - dependencies: - wind: - vod2uv: true - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - cp: - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - operation: difference - cdir: - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - operation: difference - cape: - accumulations: - step: - type: legacywindow - operation: maximum - 2t: - preprocessing: - - operation: expression - expr: t2_k - d2_k - expr_data: - t2_k: - param: '167' - d2_k: - param: '168' - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - "24": - num_inputs: 7 - predictors: ["cp_ratio", "tp", "mxcape6", "2t", "ws", "cdir"] - dependencies: - wind: - vod2uv: true - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - cp: - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - operation: difference - cdir: - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - operation: difference - cape: - accumulations: - step: - type: legacywindow - operation: maximum - 2t: - preprocessing: - - operation: expression - expr: t2_k - d2_k - expr_data: - t2_k: - param: '167' - d2_k: - param: '168' - accumulations: - step: - operation: weighted_mean - weights: [0.125, 0.25, 0.25, 0.25, 0.125] - ea: - outputs: - default: - metadata: - productionStatusOfProcessedData: 3 - typeOfTimeIncrement: 1 - bias_corrected: - metadata: - productDefinitionTemplateNumber: 72 - weather_types: - metadata: - productDefinitionTemplateNumber: 72 - filter:param: - "228": - predictant: tp - min_predictant: 0.04 - scale_outputs: 0.001 - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - type: legacywindow - operation: sum - name: - type: default - length: "{steplength}:int" - metadata: - stepType: accum - filter:steplength: - "12/24": - num_inputs: 8 - predictors: ["cp_ratio", "lsm", "sdfor", "tp", "ws", "cape", "cdir", "2r"] - dependencies: - wind: - preprocessing: - actions: - - operation: norm - output: - paramId: 10 - accumulations: - step: - type: legacywindow - operation: mean - cp: - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - type: legacywindow - operation: sum - cdir: - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - type: legacywindow - operation: sum - cape: - accumulations: - step: - type: legacywindow - operation: maximum - r2: - preprocessing: - actions: - - operation: expression - expr: (100 * (((112 - (0.1 * (t2_k - 273.17)) + ( d2_k - 273.15)) / (112 + (0.9 * (t2_k - 273.17)))) ** 8)) + 0.5 - expr_data: - t2_k: - param: '167.128' - d2_k: - param: '168.128' - dtype: "int64" - output: - edition: 2 - paramId: 260242 - accumulations: - step: - type: legacywindow - operation: maximum - sdfor: - accumulations: null - lsm: - accumulations: null - "201": - predictant: mx2t - min_predictant: null - scale_outputs: null - accumulations: - step: - type: legacywindow - operation: maximum - name: - type: default - length: "{steplength}:int" - metadata: - stepType: max - filter:steplength: - "24": - num_inputs: 11 - predictors: - - lsm - - sdfor - - vegdiff - - cdir - - mx2t - - tp - - {expr: "((sd * 1000)/rsn)*100", expr_data: {sd: {param: sd}, rsn: {param: rsn}}} - - rsn - - {expr: "swv * 1000", expr_data: {swv: {param: swvl1}}} - - 100si - dependencies: - tp: - accumulations: - step: - type: legacywindow - operation: filter - filter_op: max - filter_index: -1 - preprocessing: - actions: - - operation: scale - value: 1000 - - operation: reshape - shape: 1 - filtered: - accumulations: - step: - operation: filter - filter_op: max - filter_index: -1 - neighbours: [-1] - neighbours_op: mean - preprocessing: - actions: - - operation: reshape - shape: 1 - cdir: - preprocessing: - actions: - - operation: scale - value: 1.157407e-05 - accumulations: - step: - type: legacywindow - operation: sum - sdfor: - accumulations: null - lsm: - accumulations: null - urbanfrac: - accumulations: null - "202": - predictant: mn2t - min_predictant: null - scale_outputs: null - accumulations: - step: - type: legacywindow - operation: minimum - name: - type: default - length: "{steplength}:int" - metadata: - stepType: min - filter:steplength: - "24": - num_inputs: 15 - predictors: - - lsm - - sdfor - - vegdiff - - mn2t - - {expr: "((sd * 1000)/rsn)*100", expr_data: {sd: {param: sd}, rsn: {param: rsn}}} - - lai - - {expr: "t2m - skt", expr_data: {t2m: {param: 2t}, skt: {param: skt}}} - - 100si - - lcc - dependencies: - filtered: - accumulations: - step: - operation: filter - filter_op: min - filter_index: -1 - neighbours: [-1] - neighbours_op: mean - preprocessing: - actions: - - operation: reshape - shape: 1 - sdfor: - accumulations: null - lsm: - accumulations: null - urbanfrac: - accumulations: null - lai: - preprocessing: - actions: - - operation: reshape - shape: 1 - accumulations: null - cm/cr: - entrypoint: pproc-clustereps - step_del: 12 - bbox: - lat_n: 75.0 - lat_s: 30.0 - lon_w: 340.0 - lon_e: 40.0 - max_anom: 10000. - num_components: 50 - var_th: 80.0 - ncl_max: 6 - init: sector - npass: 100 - nrsamples: 500 - max_sig: 95.0 - med_sig: 90.0 - min_sig: 55.0 - sig_tol: 3.0 - ncl_clim: 4 - clim_means: "{season}_means.grd" - clim_pcs: "{season}_pcs.gts" - clim_sdv: "{season}_sdv.gts" - clim_eof: "{season}_eof.grd" - clim_cluster_index: "era_clind_{season}.gts" - clim_cluster_centroids_eof: "era_clcen_eof_{season}.gts" - seasons: - - [5, 9] - - [10, 4] - generate_dummy: true - deterministic_is_control: true - compute_spread: true windows: filter:type: em/es/pb: From 8436ef6c2a77c93d57ab6951af5fafe22cda0b19 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Thu, 23 Jul 2026 14:17:44 +0100 Subject: [PATCH 50/95] Bug fix --- pproc-core/src/ppcore/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py index f3f83e9b..016660c8 100644 --- a/pproc-core/src/ppcore/config.py +++ b/pproc-core/src/ppcore/config.py @@ -59,7 +59,7 @@ def from_outputs(args): entrypoint_config = EntrypointConfig( products=list( config_from_outputs( - output_requests, args.schem, forecast=forecast, climatology=climatology + output_requests, args.schema, forecast=forecast, climatology=climatology ) ), **overrides, @@ -96,7 +96,7 @@ def from_inputs(args): products=list( config_from_inputs( args.restriction, - args.schem, + args.schema, forecast, climatology=climatology, **overrides, From fd0761227f3c7e0a3a508380e3249dfab00ed935 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 27 Jul 2026 08:14:45 +0100 Subject: [PATCH 51/95] Update workflows --- .github/workflows/cd-ppcore.yml | 25 +++++++++------ .github/workflows/cd-ppruntime.yml | 50 ++++++++++++++++++------------ 2 files changed, 45 insertions(+), 30 deletions(-) diff --git a/.github/workflows/cd-ppcore.yml b/.github/workflows/cd-ppcore.yml index f87719e5..251501c9 100644 --- a/.github/workflows/cd-ppcore.yml +++ b/.github/workflows/cd-ppcore.yml @@ -66,18 +66,23 @@ jobs: with: python-version: ${{ matrix.python_version }} - - name: Install build tools - run: python -m pip install --upgrade build twine - - - name: Build package + - name: Install dependencies run: | - cd pproc-core - python -m build + python -m pip install --upgrade pip + pip install setuptools wheel twine build - - name: Check package + - name: Check version run: | - cd pproc-core - twine check dist/* + if [ -f "setup.py" ]; then + if [ -f "pyproject.toml" ] ; then + # we need to install eg setuptools_scm to correctly determine version later + extra_deps=$(python -c 'import tomllib; print(" ".join(f"{e}" for e in tomllib.load(open("pyproject.toml", "rb"))["build-system"]["requires"]))') + pip install --upgrade $extra_deps + fi + version=$(python setup.py --version) + release=${{ github.ref_name }} + if [ "${{ inputs.testpypi }}" != "true" ] ; then test "$release" == "$version"; fi + fi - run: | cd pproc-core @@ -91,7 +96,7 @@ jobs: TARGET="" export TWINE_PASSWORD="$TWINE_PASSWORD_PROD" fi - twine upload $TARGET --verbose --skip-existing dist/*whl + twine upload $TARGET --verbose dist/* env: TWINE_USERNAME: __token__ TWINE_PASSWORD_PROD: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/cd-ppruntime.yml b/.github/workflows/cd-ppruntime.yml index 19d823aa..8e089427 100644 --- a/.github/workflows/cd-ppruntime.yml +++ b/.github/workflows/cd-ppruntime.yml @@ -66,28 +66,38 @@ jobs: with: python-version: ${{ matrix.python_version }} - - name: Install build tools - run: python -m pip install --upgrade build twine - - - name: Build package + - name: Install dependencies run: | - cd pproc-runtime - python -m build + python -m pip install --upgrade pip + pip install setuptools wheel twine build - - name: Check package + - name: Check version run: | + if [ -f "setup.py" ]; then + if [ -f "pyproject.toml" ] ; then + # we need to install eg setuptools_scm to correctly determine version later + extra_deps=$(python -c 'import tomllib; print(" ".join(f"{e}" for e in tomllib.load(open("pyproject.toml", "rb"))["build-system"]["requires"]))') + pip install --upgrade $extra_deps + fi + version=$(python setup.py --version) + release=${{ github.ref_name }} + if [ "${{ inputs.testpypi }}" != "true" ] ; then test "$release" == "$version"; fi + fi + + - run: | cd pproc-runtime + python -m pip install --upgrade build twine + python -m build twine check dist/* - - - name: Publish to Test PyPI - if: inputs.environment == 'testpypi' - uses: pypa/gh-action-pypi-publish@release/v1 - with: - packages-dir: pproc-runtime/dist/ - repository-url: https://test.pypi.org/legacy/ - - - name: Publish to PyPI - if: inputs.environment == 'pypi' - uses: pypa/gh-action-pypi-publish@release/v1 - with: - packages-dir: pproc-runtime/dist/ + if [ "${{ inputs.environment }}" = "testpypi" ] ; then + TARGET="--repository testpypi" + export TWINE_PASSWORD="$TWINE_PASSWORD_TEST" + else + TARGET="" + export TWINE_PASSWORD="$TWINE_PASSWORD_PROD" + fi + twine upload $TARGET --verbose dist/* + env: + TWINE_USERNAME: __token__ + TWINE_PASSWORD_PROD: ${{ secrets.PYPI_API_TOKEN }} + TWINE_PASSWORD_TEST: ${{ secrets.PYPI_TEST_API_TOKEN }} From 96e512b96ad7f9f686b4b00db158cbddc91c01b9 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 28 Jul 2026 18:01:51 +0100 Subject: [PATCH 52/95] Print fields --- pproc-runtime/src/ppruntime/thermo/helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pproc-runtime/src/ppruntime/thermo/helpers.py b/pproc-runtime/src/ppruntime/thermo/helpers.py index d15a1c3e..ab2be01d 100644 --- a/pproc-runtime/src/ppruntime/thermo/helpers.py +++ b/pproc-runtime/src/ppruntime/thermo/helpers.py @@ -158,7 +158,7 @@ def step_interval(fields) -> int: # Derive step interval from de-accumulated fields accum_field = fields.sel(stepType="diff") if len(accum_field) == 0: - raise ValueError("No accumulation fields found, can not derive step interval") + raise ValueError(f"No accumulation fields found in {fields.ls(namespace='mars')}, can not derive step interval") delta = ( accum_field[0].metadata()["endStep"] - accum_field[0].metadata()["startStep"] ) From f35e588b9771574d2deafa6ac26e4b8b25a3a61c Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 28 Jul 2026 18:13:43 +0100 Subject: [PATCH 53/95] Change from shortname to paramId --- .../src/ppruntime/thermal_indices.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/pproc-runtime/src/ppruntime/thermal_indices.py b/pproc-runtime/src/ppruntime/thermal_indices.py index 80dc1bcd..f9e67098 100644 --- a/pproc-runtime/src/ppruntime/thermal_indices.py +++ b/pproc-runtime/src/ppruntime/thermal_indices.py @@ -24,11 +24,11 @@ def metadata_intensity(fields: FieldList) -> list[ekMetadata]: - return fields.sel(param="2t").metadata() + return fields.sel(param=167).metadata() def metadata_accumulation(fields: FieldList) -> list[ekMetadata]: - return fields.sel(param="fdir").metadata() + return fields.sel(param=228021).metadata() def field_values(fields: FieldList, params: list[str]): @@ -79,7 +79,7 @@ def calc_cossza(*fields: FieldList, metadata: Optional[dict] = None) -> FieldLis @metered("hmdx", out=logger.debug) def calc_hmdx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["2t", "2d"]) + inputs = field_values(summed_fields, [167, 168]) hmdx = thermofeel.calculate_humidex(*inputs) return create_surface_output( hmdx, @@ -91,7 +91,7 @@ def calc_hmdx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: @metered("rhp", out=logger.debug) def calc_rhp(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["2t", "2d"]) + inputs = field_values(summed_fields, [167, 168]) rhp = thermofeel.calculate_relative_humidity_percent(*inputs) return create_surface_output( rhp, @@ -103,7 +103,7 @@ def calc_rhp(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: @metered("heatx", out=logger.debug) def calc_heatx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["2t", "2d"]) + inputs = field_values(summed_fields, [167, 168]) heatx = thermofeel.calculate_heat_index_adjusted(*inputs) return create_surface_output( heatx, @@ -119,7 +119,7 @@ def calc_dsrp(*fields: FieldList, metadata: Optional[dict] = None): Note this introduces some amount of error as cossza approaches zero """ summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["fdir", "cossza"]) + inputs = field_values(summed_fields, [228021, 214001]) dsrp = thermofeel.approximate_dsrp(*inputs) return create_output( dsrp, @@ -131,7 +131,7 @@ def calc_dsrp(*fields: FieldList, metadata: Optional[dict] = None): @metered("utci", out=logger.debug) def calc_utci(*fields: FieldList, metadata: Optional[dict] = None, validate=True): summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["2t", "2d", "10si", "mrt"]) + inputs = field_values(summed_fields, [167, 168, 207, 261002]) ehPa = compute_ehPa(inputs[0], inputs[1]) utci = thermofeel.calculate_utci( @@ -162,7 +162,7 @@ def calc_utci(*fields: FieldList, metadata: Optional[dict] = None, validate=True @metered("wbgt", out=logger.debug) def calc_wbgt(*fields: FieldList, metadata: Optional[dict] = None): summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["2t", "mrt", "10si", "2d"]) + inputs = field_values(summed_fields, [167, 261002, 207, 168]) wbgt = thermofeel.calculate_wbgt(*inputs) return create_surface_output( wbgt, @@ -174,7 +174,7 @@ def calc_wbgt(*fields: FieldList, metadata: Optional[dict] = None): @metered("gt", out=logger.debug) def calc_gt(*fields: FieldList, metadata: Optional[dict] = None): summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["2t", "mrt", "10si"]) + inputs = field_values(summed_fields, [167, 261002, 207]) gt = thermofeel.calculate_bgt(*inputs) @@ -188,7 +188,7 @@ def calc_gt(*fields: FieldList, metadata: Optional[dict] = None): @metered("wbt", out=logger.debug) def calc_wbt(*fields: FieldList, metadata: Optional[dict] = None): summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["2t", "2r"]) + inputs = field_values(summed_fields, [167, 260242]) wbt = thermofeel.calculate_wbt(*inputs) return create_surface_output( wbt, @@ -200,7 +200,7 @@ def calc_wbt(*fields: FieldList, metadata: Optional[dict] = None): @metered("nefft", out=logger.debug) def calc_nefft(*fields: FieldList, metadata: Optional[dict] = None): summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["2t", "10si", "2r"]) + inputs = field_values(summed_fields, [167, 207, 260242]) nefft = thermofeel.calculate_normal_effective_temperature(*inputs) return create_surface_output( nefft, @@ -212,7 +212,7 @@ def calc_nefft(*fields: FieldList, metadata: Optional[dict] = None): @metered("wcf", out=logger.debug) def calc_wcf(*fields: FieldList, metadata: Optional[dict] = None): summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["2t", "10si"]) + inputs = field_values(summed_fields, [167, 207]) wcf = thermofeel.calculate_wind_chill(*inputs) return create_surface_output( wcf, @@ -224,7 +224,7 @@ def calc_wcf(*fields: FieldList, metadata: Optional[dict] = None): @metered("aptmp", out=logger.debug) def calc_aptmp(*fields: FieldList, metadata: Optional[dict] = None): summed_fields: FieldList = sum(fields[1:], fields[0]) - inputs = field_values(summed_fields, ["2t", "10si", "2r"]) + inputs = field_values(summed_fields, [167, 207, 260242]) aptmp = thermofeel.calculate_apparent_temperature(*inputs) return create_surface_output( aptmp, @@ -237,7 +237,7 @@ def calc_aptmp(*fields: FieldList, metadata: Optional[dict] = None): def calc_mrt(*fields: FieldList, metadata: Optional[dict] = None): summed_fields: FieldList = sum(fields[1:], fields[0]) ssrd, ssr, dsrp, strd, fdir, strr, cossza = field_values( - summed_fields, ["ssrd", "ssr", "dsrp", "strd", "fdir", "str", "cossza"] + summed_fields, [169, 176, 47, 175, 228021, 177, 214001] ) delta = step_interval(summed_fields) From 1255fe5d478d7f57bc1cac89762730004db19f3f Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 28 Jul 2026 20:34:07 +0100 Subject: [PATCH 54/95] Pin earthkit-data version --- pproc-runtime/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index 1e1fa184..bc47ca25 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -33,7 +33,7 @@ dynamic = [ "version" ] dependencies = [ "array-api-compat", "code-meters", - "earthkit-data[mars,fdb]", + "earthkit-data[mars,fdb]<1.0", "earthkit-meteo", "eccodes", "fdb5lib", From f94068778c77b83c30a9dbe546a74cbf62c4befa Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 28 Jul 2026 20:43:09 +0100 Subject: [PATCH 55/95] Select based on paramId --- pproc-runtime/src/ppruntime/thermal_indices.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pproc-runtime/src/ppruntime/thermal_indices.py b/pproc-runtime/src/ppruntime/thermal_indices.py index f9e67098..c67744ea 100644 --- a/pproc-runtime/src/ppruntime/thermal_indices.py +++ b/pproc-runtime/src/ppruntime/thermal_indices.py @@ -31,11 +31,11 @@ def metadata_accumulation(fields: FieldList) -> list[ekMetadata]: return fields.sel(param=228021).metadata() -def field_values(fields: FieldList, params: list[str]): +def field_values(fields: FieldList, params: list[int]): shape = None out_values = [] for param in params: - selected = fields.sel(param=param) + selected = fields.sel(paramId=param) if len(selected) == 0: raise ValueError( f"Field {param} not found in fields: \n {fields.ls(namespace='mars')}" From 2b380d7b783a3c7a7920c4a7bb7cca8adb486e7e Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 28 Jul 2026 20:47:35 +0100 Subject: [PATCH 56/95] Increase logging --- pproc-runtime/src/ppruntime/thermal_indices.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pproc-runtime/src/ppruntime/thermal_indices.py b/pproc-runtime/src/ppruntime/thermal_indices.py index c67744ea..c0bdf286 100644 --- a/pproc-runtime/src/ppruntime/thermal_indices.py +++ b/pproc-runtime/src/ppruntime/thermal_indices.py @@ -51,6 +51,7 @@ def field_values(fields: FieldList, params: list[int]): @metered("cossza", out=logger.debug) def calc_cossza(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: + logger.debug(f"calc_cossza: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) lats, lons = latlon(summed_fields) @@ -78,6 +79,7 @@ def calc_cossza(*fields: FieldList, metadata: Optional[dict] = None) -> FieldLis @metered("hmdx", out=logger.debug) def calc_hmdx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: + logger.debug(f"calc_hmdx: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [167, 168]) hmdx = thermofeel.calculate_humidex(*inputs) @@ -90,6 +92,7 @@ def calc_hmdx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: @metered("rhp", out=logger.debug) def calc_rhp(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: + logger.debug(f"calc_rhp: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [167, 168]) rhp = thermofeel.calculate_relative_humidity_percent(*inputs) @@ -102,6 +105,7 @@ def calc_rhp(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: @metered("heatx", out=logger.debug) def calc_heatx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: + logger.debug(f"calc_heatx: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [167, 168]) heatx = thermofeel.calculate_heat_index_adjusted(*inputs) @@ -118,6 +122,7 @@ def calc_dsrp(*fields: FieldList, metadata: Optional[dict] = None): In the absence of dsrp, approximate it with fdir and cossza. Note this introduces some amount of error as cossza approaches zero """ + logger.debug(f"calc_dsrp: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [228021, 214001]) dsrp = thermofeel.approximate_dsrp(*inputs) @@ -130,6 +135,7 @@ def calc_dsrp(*fields: FieldList, metadata: Optional[dict] = None): @metered("utci", out=logger.debug) def calc_utci(*fields: FieldList, metadata: Optional[dict] = None, validate=True): + logger.debug(f"calc_utci: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [167, 168, 207, 261002]) @@ -161,6 +167,7 @@ def calc_utci(*fields: FieldList, metadata: Optional[dict] = None, validate=True @metered("wbgt", out=logger.debug) def calc_wbgt(*fields: FieldList, metadata: Optional[dict] = None): + logger.debug(f"calc_wbgt: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [167, 261002, 207, 168]) wbgt = thermofeel.calculate_wbgt(*inputs) @@ -173,6 +180,7 @@ def calc_wbgt(*fields: FieldList, metadata: Optional[dict] = None): @metered("gt", out=logger.debug) def calc_gt(*fields: FieldList, metadata: Optional[dict] = None): + logger.debug(f"calc_gt: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [167, 261002, 207]) @@ -187,6 +195,7 @@ def calc_gt(*fields: FieldList, metadata: Optional[dict] = None): @metered("wbt", out=logger.debug) def calc_wbt(*fields: FieldList, metadata: Optional[dict] = None): + logger.debug(f"calc_wbt: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [167, 260242]) wbt = thermofeel.calculate_wbt(*inputs) @@ -199,6 +208,7 @@ def calc_wbt(*fields: FieldList, metadata: Optional[dict] = None): @metered("nefft", out=logger.debug) def calc_nefft(*fields: FieldList, metadata: Optional[dict] = None): + logger.debug(f"calc_nefft: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [167, 207, 260242]) nefft = thermofeel.calculate_normal_effective_temperature(*inputs) @@ -211,6 +221,7 @@ def calc_nefft(*fields: FieldList, metadata: Optional[dict] = None): @metered("wcf", out=logger.debug) def calc_wcf(*fields: FieldList, metadata: Optional[dict] = None): + logger.debug(f"calc_wcf: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [167, 207]) wcf = thermofeel.calculate_wind_chill(*inputs) @@ -223,6 +234,7 @@ def calc_wcf(*fields: FieldList, metadata: Optional[dict] = None): @metered("aptmp", out=logger.debug) def calc_aptmp(*fields: FieldList, metadata: Optional[dict] = None): + logger.debug(f"calc_aptmp: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) inputs = field_values(summed_fields, [167, 207, 260242]) aptmp = thermofeel.calculate_apparent_temperature(*inputs) @@ -235,6 +247,7 @@ def calc_aptmp(*fields: FieldList, metadata: Optional[dict] = None): @metered("mrt", out=logger.debug) def calc_mrt(*fields: FieldList, metadata: Optional[dict] = None): + logger.debug(f"calc_mrt: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) ssrd, ssr, dsrp, strd, fdir, strr, cossza = field_values( summed_fields, [169, 176, 47, 175, 228021, 177, 214001] From a2f94d15de9c8e31fe9aab849d9b72689d72fa1e Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 28 Jul 2026 20:54:34 +0100 Subject: [PATCH 57/95] Fix metadata extraction --- .../src/ppruntime/thermal_indices.py | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pproc-runtime/src/ppruntime/thermal_indices.py b/pproc-runtime/src/ppruntime/thermal_indices.py index c0bdf286..99623bb2 100644 --- a/pproc-runtime/src/ppruntime/thermal_indices.py +++ b/pproc-runtime/src/ppruntime/thermal_indices.py @@ -24,11 +24,11 @@ def metadata_intensity(fields: FieldList) -> list[ekMetadata]: - return fields.sel(param=167).metadata() + return fields.sel(paramId=167).metadata() def metadata_accumulation(fields: FieldList) -> list[ekMetadata]: - return fields.sel(param=228021).metadata() + return fields.sel(paramId=228021).metadata() def field_values(fields: FieldList, params: list[int]): @@ -51,8 +51,8 @@ def field_values(fields: FieldList, params: list[int]): @metered("cossza", out=logger.debug) def calc_cossza(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: - logger.debug(f"calc_cossza: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_cossza: {summed_fields.ls(namespace='mars')}") lats, lons = latlon(summed_fields) basetime, validtime = get_datetime(summed_fields) @@ -79,8 +79,8 @@ def calc_cossza(*fields: FieldList, metadata: Optional[dict] = None) -> FieldLis @metered("hmdx", out=logger.debug) def calc_hmdx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: - logger.debug(f"calc_hmdx: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_hmdx: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 168]) hmdx = thermofeel.calculate_humidex(*inputs) return create_surface_output( @@ -92,8 +92,8 @@ def calc_hmdx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: @metered("rhp", out=logger.debug) def calc_rhp(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: - logger.debug(f"calc_rhp: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_rhp: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 168]) rhp = thermofeel.calculate_relative_humidity_percent(*inputs) return create_surface_output( @@ -105,8 +105,8 @@ def calc_rhp(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: @metered("heatx", out=logger.debug) def calc_heatx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: - logger.debug(f"calc_heatx: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_heatx: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 168]) heatx = thermofeel.calculate_heat_index_adjusted(*inputs) return create_surface_output( @@ -122,8 +122,8 @@ def calc_dsrp(*fields: FieldList, metadata: Optional[dict] = None): In the absence of dsrp, approximate it with fdir and cossza. Note this introduces some amount of error as cossza approaches zero """ - logger.debug(f"calc_dsrp: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_dsrp: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [228021, 214001]) dsrp = thermofeel.approximate_dsrp(*inputs) return create_output( @@ -135,8 +135,8 @@ def calc_dsrp(*fields: FieldList, metadata: Optional[dict] = None): @metered("utci", out=logger.debug) def calc_utci(*fields: FieldList, metadata: Optional[dict] = None, validate=True): - logger.debug(f"calc_utci: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_utci: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 168, 207, 261002]) ehPa = compute_ehPa(inputs[0], inputs[1]) @@ -167,8 +167,8 @@ def calc_utci(*fields: FieldList, metadata: Optional[dict] = None, validate=True @metered("wbgt", out=logger.debug) def calc_wbgt(*fields: FieldList, metadata: Optional[dict] = None): - logger.debug(f"calc_wbgt: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_wbgt: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 261002, 207, 168]) wbgt = thermofeel.calculate_wbgt(*inputs) return create_surface_output( @@ -180,8 +180,8 @@ def calc_wbgt(*fields: FieldList, metadata: Optional[dict] = None): @metered("gt", out=logger.debug) def calc_gt(*fields: FieldList, metadata: Optional[dict] = None): - logger.debug(f"calc_gt: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_gt: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 261002, 207]) gt = thermofeel.calculate_bgt(*inputs) @@ -195,8 +195,8 @@ def calc_gt(*fields: FieldList, metadata: Optional[dict] = None): @metered("wbt", out=logger.debug) def calc_wbt(*fields: FieldList, metadata: Optional[dict] = None): - logger.debug(f"calc_wbt: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_wbt: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 260242]) wbt = thermofeel.calculate_wbt(*inputs) return create_surface_output( @@ -208,8 +208,8 @@ def calc_wbt(*fields: FieldList, metadata: Optional[dict] = None): @metered("nefft", out=logger.debug) def calc_nefft(*fields: FieldList, metadata: Optional[dict] = None): - logger.debug(f"calc_nefft: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_nefft: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 207, 260242]) nefft = thermofeel.calculate_normal_effective_temperature(*inputs) return create_surface_output( @@ -221,8 +221,8 @@ def calc_nefft(*fields: FieldList, metadata: Optional[dict] = None): @metered("wcf", out=logger.debug) def calc_wcf(*fields: FieldList, metadata: Optional[dict] = None): - logger.debug(f"calc_wcf: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_wcf: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 207]) wcf = thermofeel.calculate_wind_chill(*inputs) return create_surface_output( From 0a93cb5b812cc68b88c12e2af531d6a69ca9beb5 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Tue, 28 Jul 2026 22:24:48 +0100 Subject: [PATCH 58/95] Tidy pproc-runtime --- pproc-runtime/pyproject.toml | 2 +- pproc-runtime/src/ppruntime/io.py | 6 +- .../src/ppruntime/thermal_indices.py | 4 +- pproc-runtime/src/ppruntime/thermo/helpers.py | 4 +- pproc-runtime/tests/conftest.py | 71 +- pproc-runtime/tests/templates/fdb/schema | 588 +++ pproc-runtime/tests/test_accumulation.py | 4 +- pproc-runtime/tests/test_io.py | 25 +- pproc-runtime/tests/test_thermal_indices.py | 49 + pproc-runtime/uv.lock | 3173 +++++++++-------- 10 files changed, 2372 insertions(+), 1554 deletions(-) create mode 100644 pproc-runtime/tests/templates/fdb/schema create mode 100644 pproc-runtime/tests/test_thermal_indices.py diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index bc47ca25..319b05f3 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -33,7 +33,7 @@ dynamic = [ "version" ] dependencies = [ "array-api-compat", "code-meters", - "earthkit-data[mars,fdb]<1.0", + "earthkit-data[mars,fdb]<1", "earthkit-meteo", "eccodes", "fdb5lib", diff --git a/pproc-runtime/src/ppruntime/io.py b/pproc-runtime/src/ppruntime/io.py index d17e00b6..9b7ce1dd 100644 --- a/pproc-runtime/src/ppruntime/io.py +++ b/pproc-runtime/src/ppruntime/io.py @@ -28,9 +28,9 @@ def mir_job( - input: mir.MultiDimensionalGribFileInput, + input: mir.MultiDimensionalGribFileInput, # type: ignore[ty:unresolved-attribute] mir_options: dict, - cache: Optional[str] = None, # type: ignore[ty:unresolved-attribute] + cache: Optional[str] = None, ) -> FieldList: job = mir.Job(**mir_options) # type: ignore[ty:unresolved-attribute] stream = BytesIO() @@ -130,7 +130,7 @@ def retrieve( requests: list[dict], dtype: Optional[str] = None, ) -> FieldList: - ds = from_source("empty") + ds: FieldList = from_source("empty") # type: ignore for request in requests: with ResourceMeter(f"Retrieve {request}"): for source in sources: diff --git a/pproc-runtime/src/ppruntime/thermal_indices.py b/pproc-runtime/src/ppruntime/thermal_indices.py index 99623bb2..d141970d 100644 --- a/pproc-runtime/src/ppruntime/thermal_indices.py +++ b/pproc-runtime/src/ppruntime/thermal_indices.py @@ -234,8 +234,8 @@ def calc_wcf(*fields: FieldList, metadata: Optional[dict] = None): @metered("aptmp", out=logger.debug) def calc_aptmp(*fields: FieldList, metadata: Optional[dict] = None): - logger.debug(f"calc_aptmp: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_aptmp: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 207, 260242]) aptmp = thermofeel.calculate_apparent_temperature(*inputs) return create_surface_output( @@ -247,8 +247,8 @@ def calc_aptmp(*fields: FieldList, metadata: Optional[dict] = None): @metered("mrt", out=logger.debug) def calc_mrt(*fields: FieldList, metadata: Optional[dict] = None): - logger.debug(f"calc_mrt: {fields.ls(namespace='mars')}") summed_fields: FieldList = sum(fields[1:], fields[0]) + logger.debug(f"calc_mrt: {summed_fields.ls(namespace='mars')}") ssrd, ssr, dsrp, strd, fdir, strr, cossza = field_values( summed_fields, [169, 176, 47, 175, 228021, 177, 214001] ) diff --git a/pproc-runtime/src/ppruntime/thermo/helpers.py b/pproc-runtime/src/ppruntime/thermo/helpers.py index ab2be01d..9d65174d 100644 --- a/pproc-runtime/src/ppruntime/thermo/helpers.py +++ b/pproc-runtime/src/ppruntime/thermo/helpers.py @@ -158,7 +158,9 @@ def step_interval(fields) -> int: # Derive step interval from de-accumulated fields accum_field = fields.sel(stepType="diff") if len(accum_field) == 0: - raise ValueError(f"No accumulation fields found in {fields.ls(namespace='mars')}, can not derive step interval") + raise ValueError( + f"No accumulation fields found in {fields.ls(namespace='mars')}, can not derive step interval" + ) delta = ( accum_field[0].metadata()["endStep"] - accum_field[0].metadata()["startStep"] ) diff --git a/pproc-runtime/tests/conftest.py b/pproc-runtime/tests/conftest.py index a218e933..ac51baa0 100644 --- a/pproc-runtime/tests/conftest.py +++ b/pproc-runtime/tests/conftest.py @@ -9,11 +9,17 @@ import os import requests -from typing import List +from typing import List, Generator +import pytest +import shutil +import tempfile + +import eccodes +import pyfdb TEST_DIR = os.path.dirname(os.path.realpath(__file__)) DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "data") -NEXUS = "https://sites.ecmwf.int/repository/pproc/test-data/pproc-runtime" +NEXUS = "https://sites.ecmwf.int/repository/pproc/test-data" SCHEMA = os.path.join(TEST_DIR, "schema.yaml") @@ -40,10 +46,57 @@ def download_test_data( return local_files -download_test_data( - [ - "test_2t_12.grib", - ], - f"{NEXUS}", - f"{DATA_DIR}", -) +def populate_fdb( + fdb, + test_files: List[str], + dir_url: str = NEXUS, + local_dir: str = DATA_DIR, +): + data_files = download_test_data(test_files, dir_url, local_dir) + for filepath in data_files: + if os.path.isfile(filepath): + reader = eccodes.FileReader(filepath) + for msg in reader: + fdb.archive(msg.get_buffer()) + fdb.flush() + + +@pytest.fixture(scope="session") +def fdb() -> Generator[pyfdb.FDB]: + tmpdir = tempfile.mkdtemp() + print("Using temporary directory", tmpdir) + os.makedirs(f"{tmpdir}/etc/fdb") + os.mkdir(f"{tmpdir}/fdb") + shutil.copyfile(f"{TEST_DIR}/templates/fdb/schema", f"{tmpdir}/etc/fdb/schema") + with open(f"{tmpdir}/etc/fdb/config.yaml", "w") as f: + f.write( + f""" +--- +type: local +engine: toc +schema: "{tmpdir}/etc/fdb/schema" +spaces: +- roots: + - path: {tmpdir}/fdb +""" + ) + os.environ["FDB_HOME"] = str(tmpdir) + os.environ["FDB_HANDLE_LUSTRE_STRIPE"] = "0" + temp_fdb = pyfdb.FDB() + populate_fdb( + temp_fdb, + [ + "test_2t_12.grib", + ], + os.path.join(NEXUS, "pproc-runtime"), + ) + populate_fdb( + temp_fdb, + [ + "wind.grib", + ], + os.path.join(NEXUS, "test-data"), + ) + + yield temp_fdb + shutil.rmtree(tmpdir) diff --git a/pproc-runtime/tests/templates/fdb/schema b/pproc-runtime/tests/templates/fdb/schema new file mode 100644 index 00000000..0eb23544 --- /dev/null +++ b/pproc-runtime/tests/templates/fdb/schema @@ -0,0 +1,588 @@ + +# * Format of the rules is: + +# [a1, a2, a3 ...[b1, b2, b3... [c1, c2, c3...]]] + +# - The first level (a) defines which attributes are used to name the top level directory +# - The second level (b) defines which attributes are used to name the data files +# - The third level (c) defines which attributes are used as index keys + +# * Rules can be grouped + +# [a1, a2, a3 ... +# [b1, b2, b3... [c1, c2, c3...]] +# [B1, B2, B3... [C1, C2, C3...]] +# ] + +# * A list of values can be given for an attribute +# [ ..., stream=enfo/efov, ... ] +# This will be used when matching rules. + +# * Attributes can be typed +# Globally, at the begining of this file: + +# refdate: Date; + +# or in the context of a rule: +# [type=cl, ... [date:ClimateMonth, ...]] + +# Typing attributes is done when the user's requests or the GRIB values need to be modified before directories, files and indexes are created. For example, ClimateMonth will transform 2010-04-01 to 'may' internally. + +# * Attributes can be optional +# [ step, levelist?, param ] +# They will be replaced internally by an empty value. It is also posiible to provide a default subtitution value: e.g. [domain?g] will consider the domain to be 'g' if missing. + +# * Attributes can be removed: +# [grid-] +# This is useful to remove attributes present in the GRIB that should not be ignored + +# * Rules are matched: + +# - If the attributes are present in the GRIB/Request, or marked optional or ignored +# - If a list of possible value is provided, one of them must match, for example +# [ class, expver, stream=enfo/efov, date, time, domain ] +# will match either stream=enfo or stream=efov, all other attributes will be matched if they exist in the GRIB or user's request + +# * On archive: +# - Attributes are extracted from the GRIB (namespace 'mars'), possibly modified by the attribute type +# - Only the first rule is used, so order is important +# - All GRIB attributes must be used by the rules, otherwise an error is raised + +# * On retrieve: +# - Attributes are extracted from the user's request, possibly modified by the attribute type (e.g. for handling of U/V) +# - All the matching rules are considered +# - Only attributes listed in the rules are used to extract values from the user's request + + +# Default types + +param: Param; +step: Step; +date: Date; +hdate: Date; +refdate: Date; +latitude: Double; +longitude: Double; +levelist: Double; +grid: Grid; +expver: Expver; + +time: Time; +fcmonth: Integer; + +number: Integer; +frequency: Integer; +direction: Integer; +channel: Integer; + +instrument: Integer; +ident: Integer; + +diagnostic: Integer; +iteration: Integer; +system: Integer; +method: Integer; + +# ??????? + +# reference: Integer; +# fcperiod: Integer; + +# opttime: Integer; +# leadtime: Integer; + +# quantile: ?????? +# range: ?????? + +# band: Integer; + + +######################################################## +# These rules must be first, otherwise fields of These +# classes will be index with the default rule for oper +[ class=ti/s2, expver, stream, date, time, model + [ origin, type, levtype, hdate? + [ step, number?, levelist?, param ]] +] + +[ class=ms, expver, stream, date, time, country=de + [ domain, type, levtype, dbase, rki, rty, ty + [ step, levelist?, param ]] +] + +[ class=ms, expver, stream, date, time, country=it + [ domain, type, levtype, model, bcmodel, icmodel:First3 + [ step, levelist?, param ] + ] +] + +[ class=el, expver, stream, date, time, domain + [ origin, type, levtype + [ step, levelist?, param ]] +] + +######################################################## +# The are the rules matching most of the fields +# oper/dcda +[ class, expver, stream=oper/dcda/scda, date, time, domain? + + [ type=im/sim + [ step?, ident, instrument, channel ]] + + [ type=ssd + [ step, param, ident, instrument, channel ]] + + [ type=4i, levtype + [ step, iteration, levelist, param ]] + + [ type=me, levtype + [ step, number, levelist?, param ]] + + [ type=ef, levtype + [ step, levelist?, param, channel? ]] + + [ type=ofb/mfb + [ obsgroup, reportype ]] + + [ type, levtype + [ step, levelist?, param ]] + +] + +# dcwv/scwv/wave +[ class, expver, stream=dcwv/scwv/wave, date, time, domain + [ type, levtype + [ step, param, frequency?, direction? ]]] + +# enfo +[ class, expver, stream=enfo/efov, date, time, domain + + [ type, levtype=dp, product?, section? + [ step, number?, levelist?, latitude?, longitude?, range?, param ]] + + [ type=tu, levtype, reference + [ step, number, levelist?, param ]] + + [ type, levtype + [ step, quantile?, number?, levelist?, param ]] + +] + +# waef/weov +[ class, expver, stream=waef/weov, date, time, domain + [ type, levtype + [ step, number?, param, frequency?, direction? ]] +] + +######################################################## +# enda +[ class, expver, stream=enda, date, time, domain + + [ type=ef/em/es/ses, levtype + [ step, number?, levelist?, param, channel? ]] + + [ type=ssd + [ step, number, param, ident, instrument, channel ]] + + + [ type, levtype + [ step, number?, levelist?, param ]] +] + +# ewda +[ class, expver, stream=ewda, date, time, domain + [ type, levtype + [ step, number?, param, frequency?, direction? ]] +] + + +######################################################## +# elda +[ class, expver, stream=elda, date, time, domain? + + [ type=ofb/mfb + [ obsgroup, reportype ]] + + [ type, levtype, anoffset + [ step, number?, levelist?, iteration?, param, channel? ]] +] + +# ewda +[ class, expver, stream=ewla, date, time, domain + [ type, levtype, anoffset + [ step, number?, param, frequency?, direction? ]] +] + +######################################################## +# elda +[ class, expver, stream=lwda, date, time, domain? + + [ type=ssd, anoffset + [ step, param, ident, instrument, channel ]] + + [type=me, levtype, anoffset + [ number, step, levelist?, param]] + + [ type=4i, levtype, anoffset + [ step, iteration, levelist, param ]] + + [ type=ofb/mfb + [ obsgroup, reportype ]] + + [ type, levtype, anoffset + [ step, levelist?, param]] +] + +# ewda +[ class, expver, stream=lwwv, date, time, domain + [ type, levtype, anoffset + [ step, param, frequency?, direction? ]] +] +######################################################## +# amap +[ class, expver, stream=amap, date, time, domain + [ type, levtype, origin + [ step, levelist?, param ]]] + +# maed +[ class, expver, stream=maed, date, time, domain + [ type, levtype, origin + [ step, levelist?, param ]]] + +# mawv +[ class, expver, stream=mawv, date, time, domain + [ type, levtype, origin + [ step, param, frequency?, direction? ]]] + +# cher +[ class, expver, stream=cher, date, time, domain + [ type, levtype + [ step, levelist, param ]]] + + +# efhc +[ class, expver, stream=efhc, refdate, time, domain + [ type, levtype, date + [ step, number?, levelist?, param ]]] + +# efho +[ class, expver, stream=efho, date, time, domain + [ type, levtype, hdate + [ step, number?, levelist?, param ]]] + + +# efhs +[ class, expver, stream=efhs, date, time, domain + [ type, levtype + [ step, quantile?, number?, levelist?, param ]]] + +# wehs +[ class, expver, stream=wehs, date, time, domain + [ type, levtype + [ step, quantile?, number?, levelist?, param ]]] + +# kwbc +[ class, expver, stream=kwbc, date, time, domain + [ type, levtype + [ step, number?, levelist?, param ]]] + +# ehmm +[ class, expver, stream=ehmm, date, time, domain + [ type, levtype, hdate + [ fcmonth, levelist?, param ]]] + + +# ammc/cwao/edzw/egrr/lfpw/rjtd/toga +[ class, expver, stream=ammc/cwao/edzw/egrr/lfpw/rjtd/toga/fgge, date, time, domain + [ type, levtype + [ step, levelist?, param ]]] + +######################################################################## + +# enfh +[ class, expver, stream=enfh, date, time, domain + + [ type, levtype=dp, hdate, product?, section? + [ step, number?, levelist?, latitude?, longitude?, range?, param ]] + + [ type, levtype, hdate + [ step, number?, levelist?, param ]] +] + +# enwh +[ class, expver, stream=enwh, date, time, domain + [ type, levtype, hdate + [ step, number?, param, frequency?, direction? ]] +] + +######################################################################## +# sens +[ class, expver, stream=sens, date, time, domain + [ type, levtype + [ step, diagnostic, iteration, levelist?, param ]]] + +######################################################################## +# esmm +[ class, expver, stream=esmm, date, time, domain + [ type, levtype + [ fcmonth, levelist?, param ]]] +# ewhc +[ class, expver, stream=ewhc, refdate, time, domain + [ type, levtype, date + [ step, number?, param, frequency?, direction? ]]] + +######################################################################## +# ewho +[ class, expver, stream=ewho, date, time, domain + [ type, levtype, hdate + [ step, number?, param, frequency?, direction? ]]] + +# mfam +[ class, expver, stream=mfam, date, time, domain + + [ type=pb/pd, levtype, origin, system?, method + [ fcperiod, quantile, levelist?, param ]] + + [ type, levtype, origin, system?, method + [ fcperiod, number?, levelist?, param ]] + +] + +# mfhm +[ class, expver, stream=mfhm, refdate, time, domain + [ type, levtype, origin, system?, method, date? + [ fcperiod, number?, levelist?, param ]]] +# mfhw +[ class, expver, stream=mfhw, refdate, time, domain + [ type, levtype, origin, system?, method, date + [ step, number?, param ]]] +# mfwm +[ class, expver, stream=mfwm, date, time, domain + [ type, levtype, origin, system?, method + [ fcperiod, number, param ]]] +# mhwm +[ class, expver, stream=mhwm, refdate, time, domain + [ type, levtype, origin, system?, method, date + [ fcperiod, number, param ]]] + +# mmsf +[ class, expver, stream=mmsf, date, time, domain + + [ type, levtype=dp, origin, product, section, system?, method + [ step, number, levelist?, latitude?, longitude?, range?, param ]] + + [ type, levtype, origin, system?, method + [ step, number, levelist?, param ]] +] + +# mnfc +[ class, expver, stream=mnfc, date, time, domain + + [ type, levtype=dp, origin, product, section, system?, method + [ step, number?, levelist?, latitude?, longitude?, range?, param ]] + + [ type, levtype, origin, system?, method + [ step, number?, levelist?, param ]] +] + +# mnfh +[ class, expver, stream=mnfh, refdate, time, domain + [ type, levtype=dp, origin, product, section, system?, method, date + [ step, number?, levelist?, latitude?, longitude?, range?, param ]] + [ type, levtype, origin, system?, method, date? + [ step, number?, levelist?, param ]] +] + +# mnfm +[ class, expver, stream=mnfm, date, time, domain + [ type, levtype, origin, system?, method + [ fcperiod, number?, levelist?, param ]]] + +# mnfw +[ class, expver, stream=mnfw, date, time, domain + [ type, levtype, origin, system?, method + [ step, number?, param ]]] + +# ea/mnth +[ class=ea, expver, stream=mnth, date, domain + [ type, levtype + [ time, step?, levelist?, param ]]] + +# mnth +[ class, expver, stream=mnth, domain + [ type=cl, levtype + [ date: ClimateMonthly, time, levelist?, param ]] + [ type, levtype + [ date , time, step?, levelist?, param ]]] + +# mofc +[ class, expver, stream=mofc, date, time, domain + [ type, levtype=dp, product, section, system?, method + [ step, number?, levelist?, latitude?, longitude?, range?, param ]] + [ type, levtype, system?, method + [ step, number?, levelist?, param ]] +] + +# mofm +[ class, expver, stream=mofm, date, time, domain + [ type, levtype, system?, method + [ fcperiod, number, levelist?, param ]]] + +# mmsa/msmm +[ class, expver, stream=mmsa, date, time, domain + [ type, levtype, origin, system?, method + [ fcmonth, number?, levelist?, param ]]] + +[ class, expver, stream=msmm, date, time, domain + [ type, levtype, origin, system?, method + [ fcmonth, number?, levelist?, param ]]] + +# ocea +[ class, expver, stream=ocea, date, time, domain + [ type, levtype, product, section, system?, method + [ step, number, levelist?, latitude?, longitude?, range?, param ]] +] + +#=# seas +[ class, expver, stream=seas, date, time, domain + + [ type, levtype=dp, product, section, system?, method + [ step, number, levelist?, latitude?, longitude?, range?, param ]] + + [ type, levtype, system?, method + [ step, number, levelist?, param ]] +] + +# sfmm/smma +[ class, expver, stream=sfmm/smma, date, time, domain + [ type, levtype, system?, method + [ fcmonth, number?, levelist?, param ]]] + +# supd +[ class=od, expver, stream=supd, date, time, domain + [ type, levtype, origin?, grid + [ step, levelist?, param ]]] + +# For era +[ class, expver, stream=supd, date, time, domain + [ type, levtype, grid- # The minus sign is here to consume 'grid', but don't index it + [ step, levelist?, param ]]] + +# swmm +[ class, expver, stream=swmm, date, time, domain + [ type, levtype, system?, method + [ fcmonth, number, param ]]] + +# wamf +[ class, expver, stream=wamf, date, time, domain + [ type, levtype, system?, method + [ step, number?, param ]]] + +# ea/wamo +[ class=ea, expver, stream=wamo, date, domain + [ type, levtype + [ time, step?, param ]]] + +# wamo +[ class, expver, stream=wamo, domain + [ type=cl, levtype + [ date: ClimateMonthly, time, param ]] + [ type, levtype + [ date, time, step?, param ]]] + +# wamd +[ class, expver, stream=wamd, date, domain + [ type, levtype + [ param ]]] + +# wasf +[ class, expver, stream=wasf, date, time, domain + [ type, levtype, system?, method + [ step, number, param ]]] +# wmfm +[ class, expver, stream=wmfm, date, time, domain + [ type, levtype, system?, method + [ fcperiod, number, param ]]] + +# moda +[ class, expver, stream=moda, date, domain + [ type, levtype + [ levelist?, param ]]] + +# msdc/mdfa/msda +[ class, expver, stream=msdc/mdfa/msda, domain + [ type, levtype + [ date, time?, step?, levelist?, param ]]] + + + +# seap +[ class, expver, stream=seap, date, time, domain + [ type=sv/svar, levtype, origin, method? + [ step, leadtime, opttime, number, levelist?, param ]] + + [ type=ef, levtype, origin + [ step, levelist?, param, channel? ]] + + [ type, levtype, origin + [ step, levelist?, param ]] + + ] + +[ class, expver, stream=mmaf, date, time, domain + [ type, levtype, origin, system?, method + [ step, number, levelist?, param ]] +] + +[ class, expver, stream=mmam, date, time, domain + [ type, levtype, origin, system?, method + [ fcmonth, number, levelist?, param ]] +] + + +[ class, expver, stream=dacl, domain + [ type=pb, levtype + [ date: ClimateDaily, time, step, quantile, levelist?, param ]] + [ type, levtype + [ date: ClimateDaily, time, step, levelist?, param ]] + +] + +[ class, expver, stream=dacw, domain + [ type=pb, levtype + [ date: ClimateDaily, time, step, quantile, param ]] + [ type, levtype + [ date: ClimateDaily, time, step, param ]] + +] + +[ class, expver, stream=edmm/ewmm, date, time, domain + [ type=ssd + [ step, number, param, ident, instrument, channel ]] + [ type, levtype + [ step, number, levelist?, param ]] +] + +[ class, expver, stream=edmo/ewmo, date, domain + [ type, levtype + [ number, levelist?, param ]] +] + +# stream gfas +[ class=mc/rd, expver, stream=gfas, date, time, domain + [ type=ga, levtype + [ step, param ]] + + [ type=gsd + [ param, ident, instrument ]] + +] + +# class is e2 +[ class, expver, stream=espd, date, time, domain + [ type, levtype, origin, grid + [ step, number, levelist?, param ]]] + +[ class=cs, expver, stream, date:Default, time, domain + [ type, levtype + [ step, levelist?, param ]]] diff --git a/pproc-runtime/tests/test_accumulation.py b/pproc-runtime/tests/test_accumulation.py index a078a21b..515b3379 100644 --- a/pproc-runtime/tests/test_accumulation.py +++ b/pproc-runtime/tests/test_accumulation.py @@ -9,7 +9,9 @@ def test_difference_rate(): - fl = earthkit.data.from_source("file", os.path.join(DATA_DIR, "test_2t_12.grib")) + fl: earthkit.data.FieldList = earthkit.data.from_source( + "file", os.path.join(DATA_DIR, "test_2t_12.grib") + ) # type: ignore fl2 = earthkit.data.FieldList.from_array( fl.values * 2, [x.override({"step": 24}) for x in fl.metadata()] ) diff --git a/pproc-runtime/tests/test_io.py b/pproc-runtime/tests/test_io.py index 0c1fa1e9..bff6ea1d 100644 --- a/pproc-runtime/tests/test_io.py +++ b/pproc-runtime/tests/test_io.py @@ -48,7 +48,7 @@ def test_mars_retrieve(overrides): test_request = request.copy() test_request.update(overrides) - retrieve(["mars"], [test_request]) + retrieve([{"name": "mars"}], [test_request]) @pytest.mark.parametrize( @@ -61,6 +61,10 @@ def test_mars_retrieve(overrides): {}, {"interpolate": {"grid": "O640"}}, { + "date": "20240507", + "stream": "enfo", + "type": "cf", + "step": 3, "param": [138, 155], "levtype": "pl", "levelist": [250, 850], @@ -69,9 +73,19 @@ def test_mars_retrieve(overrides): ], ids=["default", "interpolate", "wind"], ) -def test_fdb_retrieve(stream, overrides): - os.environ["FDB_HOME"] = "/home/fdbprod" - test_request = request.copy() +def test_fdb_retrieve(fdb, stream, overrides): + test_request = { + "class": "od", + "expver": "0001", + "stream": "enfo", + "type": "cf", + "date": "20240507", + "time": "12", + "domain": "g", + "levtype": "sfc", + "step": "12", + "param": 167, + } test_request.update(overrides) retrieve([{"name": "fdb", "stream": stream}], [test_request]) @@ -101,7 +115,7 @@ def test_file_retrieve(source): retrieve([source], [request]) -def test_multi_source_retrieve(): +def test_multi_source_retrieve(fdb): request = { "stream": "enfo", "type": "cf", @@ -118,5 +132,4 @@ def test_multi_source_retrieve(): "path": os.path.join(DATA_DIR, "test_2t_12.grib"), }, ] - os.environ["FDB_HOME"] = "/home/fdbprod" retrieve(sources, [request]) diff --git a/pproc-runtime/tests/test_thermal_indices.py b/pproc-runtime/tests/test_thermal_indices.py new file mode 100644 index 00000000..fb34b64f --- /dev/null +++ b/pproc-runtime/tests/test_thermal_indices.py @@ -0,0 +1,49 @@ +import os +import pytest +from typing import Optional +import numpy as np + +import earthkit.data + +from ppruntime import thermal_indices + +TEST_DIR = os.path.dirname(os.path.realpath(__file__)) +DATA_DIR = os.path.join(TEST_DIR, "data") + + +@pytest.mark.parametrize( + "function", [ + thermal_indices.calc_mrt, + thermal_indices.calc_aptmp, + thermal_indices.calc_wcf, + thermal_indices.calc_nefft, + thermal_indices.calc_wbt, + thermal_indices.calc_gt, + thermal_indices.calc_wbgt, + thermal_indices.calc_utci, + thermal_indices.calc_dsrp, + thermal_indices.calc_heatx, + thermal_indices.calc_rhp, + thermal_indices.calc_hmdx, + thermal_indices.calc_cossza, + ] +) +def test_thermal_indices(monkeypatch, function): + inputs: earthkit.data.FieldList = earthkit.data.from_source("file", os.path.join(DATA_DIR, "test_2t_12.grib")) # type: ignore + def patched_sel(paramId: Optional[int] = None, stepType: Optional[str] = None): + if paramId is not None: + selected = inputs.sel(param="2t") + if paramId == 214001: + # To avoid invalid value warnings for arcsin + return earthkit.data.FieldList.from_array( + np.random.rand(*selected.values.shape), selected[0].metadata().override(stepType="diff", stepRange="0-12") + ) + return selected + if stepType is not None: + param = inputs.sel(param="2t") + return earthkit.data.FieldList.from_array( + param.values, param[0].metadata().override(stepType="diff", stepRange="0-12") + ) + ds = earthkit.data.FieldList.from_array(inputs.values, inputs.metadata()) + monkeypatch.setattr(ds, "sel", patched_sel) + function(ds, metadata={"edition": 2}) \ No newline at end of file diff --git a/pproc-runtime/uv.lock b/pproc-runtime/uv.lock index 2205c46a..a09ab81c 100644 --- a/pproc-runtime/uv.lock +++ b/pproc-runtime/uv.lock @@ -1,162 +1,188 @@ version = 1 +revision = 3 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", ] -[options] -prerelease-mode = "allow" - [[package]] name = "array-api-compat" -version = "1.14.0" +version = "1.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/89/e5/9a12dd1c2b0ad61f3c3ad0fc14b888c65fd735dd9d26805f77317303cbe5/array_api_compat-1.14.0.tar.gz", hash = "sha256:c819ba707f5c507800cb545f7e6348ff1ecc46538381d9ad9b371ffc9cd6d784", size = 106369 } +sdist = { url = "https://files.pythonhosted.org/packages/86/12/65d297d3e425cb7fe5247b7ec14b4ed83539e9b5e89b65c15ea7ee274182/array_api_compat-1.15.0.tar.gz", hash = "sha256:53c5f922491bf15f62847afafc4e39eedfae57d218988fefb8cce39c2a9b3dea", size = 129305, upload-time = "2026-06-07T20:53:24.964Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/d3/54cd560804a8c2b898824778e86c13c2a14600bc83532a9c4f69f2f469c3/array_api_compat-1.14.0-py3-none-any.whl", hash = "sha256:ed5af1f9b6595a199c942505f281ec994892556b6efc24679a0501e87a7d6279", size = 60124 }, + { url = "https://files.pythonhosted.org/packages/86/16/1a8fd2b19544b84575cf84ef7aa3ad4c173b756d5f087c91f85d1b295777/array_api_compat-1.15.0-py3-none-any.whl", hash = "sha256:7b1b9c53269061403fd5f45a8de349f16e7887653328bfa0c5f2d45299ff0a8e", size = 79113, upload-time = "2026-06-07T20:53:23.621Z" }, ] [[package]] name = "atlaslib-ecmwf" -version = "0.45.1.14" +version = "0.46.0.26" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/c0/c0718bd50c0650923fc3ebac9e04d2bf00365791762e6d3a4e5e60cf18bc/atlaslib_ecmwf-0.45.1.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:e9db775dadcfa7e8cfb34881ff4853327b7c81605ed5b143f74eda7b97ce3f53", size = 5198658 }, - { url = "https://files.pythonhosted.org/packages/06/2c/c96932c9897fa19752079e69cd3706a53fa31711536a2f7d079935374a57/atlaslib_ecmwf-0.45.1.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:e73d7e27d02787bb6cf6c1d53455dc4b3e0c437a717cbf14133c8b9d17ce62d6", size = 5792122 }, - { url = "https://files.pythonhosted.org/packages/a1/77/e64617b68177c4b495777f875a84133ec9e9f199df181685706319f53aa6/atlaslib_ecmwf-0.45.1.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:cd9141bd2a9e1d2d00f689434082ef2bd8ec04e46db63e1ccf5334851142261d", size = 6063038 }, - { url = "https://files.pythonhosted.org/packages/1a/73/c312fed6bbe01810663a5157450506fe381086f94508b2e773d64623e585/atlaslib_ecmwf-0.45.1.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3f4f93eb6cb7539f56a3dbee828a105ac5c9f09f047059de29a31128f4afd725", size = 6424318 }, - { url = "https://files.pythonhosted.org/packages/71/5e/6fb2974d89cbafbf3240cd24c4fec55bef89739d8c385d39a0d6ac435284/atlaslib_ecmwf-0.45.1.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:a6cbece7665a66145531c1c4a7ef416fd5e4adc0c5a97a5330c4063e7b7c95c7", size = 5198654 }, - { url = "https://files.pythonhosted.org/packages/7f/c0/7e9ec1233549467a933c72134b5fef3159f6bbc3334b0227185eed6b0c74/atlaslib_ecmwf-0.45.1.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:0100478c5ad41363bebc90ea46b01f902c22396028239afd8a49ebe9757f4919", size = 5792119 }, - { url = "https://files.pythonhosted.org/packages/50/fa/9529117cafef15fca392343cece4ae10d5cf6b5571a3a6e8f019f6b13f53/atlaslib_ecmwf-0.45.1.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5bc3dc754ceb4105a83d6f0169b2d16b5832429123a6cb4ce4961d85d1129dc8", size = 6063037 }, - { url = "https://files.pythonhosted.org/packages/1e/fe/ce87bc76504ca395bbddb95510ec8b16974afac8d42f9ea99a4b804d8a7f/atlaslib_ecmwf-0.45.1.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d74f7594619bbb6c53cdd4d1130f5365e7b41532f17b2e8c45fafbf69e6a57d0", size = 6424321 }, - { url = "https://files.pythonhosted.org/packages/18/0a/afff44b21966024da4323e48ef40845aea23bf729b976dfcce6bf483bb04/atlaslib_ecmwf-0.45.1.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:c28b9d0447d4daf96e5454ff277ea3c7183889957fe5f60b8916047b8f71e98a", size = 5198654 }, - { url = "https://files.pythonhosted.org/packages/e3/a4/c8330b3a81912c69b7f6fc76a6eb4d133af08d379f1ae5e01aa3ef3f3176/atlaslib_ecmwf-0.45.1.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:210f217290b14f9b0298c41111addbc249e0e1ff20171157bc1be584ddf138af", size = 5792117 }, - { url = "https://files.pythonhosted.org/packages/bb/36/86230628fff1a20e09fbb8a48a407adacdb37a9cbf708ecce4f33f820f51/atlaslib_ecmwf-0.45.1.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:7429ab727e50e492969be401cb3ab586ca5c42e65f1edc3d050ff67ee0b3826b", size = 6063036 }, - { url = "https://files.pythonhosted.org/packages/25/f3/e12daa9d06debc21e5122c13cde53423bca56d5806b70c51c40fe1c24781/atlaslib_ecmwf-0.45.1.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:89bd1ea173ec2c5c6aea86a9e028f8498d97b8c8ab155480d9d62c4c62816c10", size = 6424310 }, - { url = "https://files.pythonhosted.org/packages/1e/0d/c7e6c8e74114b64c7fec4bae3b181d2052372ba3ca55aea124c8aa5e67cd/atlaslib_ecmwf-0.45.1.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:bcbc89ffa87b5e08ee4490e2c9e76579084529950336f5bcfaa0bba2bdfb4557", size = 5198658 }, - { url = "https://files.pythonhosted.org/packages/c5/c0/133bf6918fb34bf2aacfe6068288875ce4464dd08e5711b0003b7644fc19/atlaslib_ecmwf-0.45.1.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:5085edd09287b8715bc7e1f6fb7eb4f28d69fc83259e703ac2ffbd6119af5680", size = 5792127 }, - { url = "https://files.pythonhosted.org/packages/fa/ea/0180a21a787abeb727591a2474d9d4d8bc30528d1921e5034f0f18cb4205/atlaslib_ecmwf-0.45.1.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:baba35a31912f07fe6dfa904842be7cc80876198ff6061f8342d0ce4b474a58b", size = 6063026 }, - { url = "https://files.pythonhosted.org/packages/a4/9b/32f96724b45d0d3edc8f667d8d0126e0064d766f9a8f3399badf428d9e34/atlaslib_ecmwf-0.45.1.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1ba1091758f1c6a02104f4aac4a7925ac9d9024d82ed3d3d02a708d155d73b54", size = 6424320 }, - { url = "https://files.pythonhosted.org/packages/36/bb/e5a93db079eb285a46e5ac18afd93f96296e91b235ea189623a8b75f704c/atlaslib_ecmwf-0.45.1.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:2d5e1cab38fa02f56efde302886ac5f52ad935666a5c79559d902b8d49aff1d8", size = 5198658 }, - { url = "https://files.pythonhosted.org/packages/37/0a/d4308d7d9c8f79d1adb09129f834c9578febe6ee1e4115ad2ec3eebb28b0/atlaslib_ecmwf-0.45.1.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:a174e1f1f0668fa73018218cd4f4ce14c13c098192bf8b4f8eba6fec21d55aac", size = 5792121 }, - { url = "https://files.pythonhosted.org/packages/ec/fe/f1370b316efe0c474fab34cf0b8c1414678ed266c963fa997398527da913/atlaslib_ecmwf-0.45.1.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:f4b1e2b5d633b7c2dcf12a72ddbeb63e22bb89bfceea9e6302759d1938f897a1", size = 6063037 }, - { url = "https://files.pythonhosted.org/packages/7d/99/c24f8aa004d76a54b022060ef2aad92e9ffa59b0ba21a5e006db68c00e9d/atlaslib_ecmwf-0.45.1.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:6db5bf80d9a6d0f692dc6545fb1db27e06efc4eb7078b16a3cb8bb93bfdff349", size = 6424322 }, + { url = "https://files.pythonhosted.org/packages/6c/01/c351861ef5f0b4439a55a0fe25e09af6a182cc9107abe3421e45b554c516/atlaslib_ecmwf-0.46.0.26-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:9eeba51dcf2a08d8f8bd857a457b3a2a25a05518b7939ff884a0933faabc7320", size = 5200843, upload-time = "2026-07-17T13:32:29.415Z" }, + { url = "https://files.pythonhosted.org/packages/42/b2/0f731843d3a976f8e1039ab69b372eb60be4c329274a13a42827babbb8b8/atlaslib_ecmwf-0.46.0.26-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:38ee3c841486fce63dbf1f57e0f0618348ddf42a8d4404ab15d487f7d9f43490", size = 5706274, upload-time = "2026-07-17T14:05:16.326Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ab/167897974fbf8fdc5e7baa5271f3508a881c56b88d41a8dff5d1c43bbbea/atlaslib_ecmwf-0.46.0.26-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6b2cd815062e03e288ab709832ac61f68e716ab47cb0286a1dfb2c02714b4d65", size = 6062335, upload-time = "2026-07-17T13:16:35.575Z" }, + { url = "https://files.pythonhosted.org/packages/64/14/804b565c7b0fcb09d849d8e0f9a0649482c35070a137f8606057998a187d/atlaslib_ecmwf-0.46.0.26-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:5933d2c74fb2538f40f42a01ed9679f37146dc4b622e71f53c16e4857edd0eb9", size = 6423424, upload-time = "2026-07-17T13:39:46.986Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b2/9a09dffb2b9def1f5cf0f4e3a8cb25a39fdc48ed41214e43b01554b73bd0/atlaslib_ecmwf-0.46.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4db3ca8319143af942bfde5a6334d10d60931c0e32dc876e5fd59582f5a6ed12", size = 5200839, upload-time = "2026-07-17T13:27:18.716Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ba/87905f125cfa3198193d4c6780ae65cb7de2bb280f5b00f1a0e86eb5d6a8/atlaslib_ecmwf-0.46.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:9bcd0444e225131064aa2b3d0fa4fe2900e8480168e846da1fe68ddebc1827a5", size = 5712549, upload-time = "2026-07-17T13:23:37.599Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fb/0bc4cc7dde2daeb4174ef264dfd7af35c7652a2bbcd6aae9d03a088982a0/atlaslib_ecmwf-0.46.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:977ecdffa7d14b664bfb44837f2b5960e6809fff78b6f444b3e10ad5d447aca9", size = 6062331, upload-time = "2026-07-17T13:16:40.343Z" }, + { url = "https://files.pythonhosted.org/packages/e4/dd/b022f3e71199ed819156086ad4e2e351018fc209a4530e2f97f49d70e513/atlaslib_ecmwf-0.46.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:376bd697906b346ae60e45e467133720f1a4e34117fd4f8195ca7c5439da76c7", size = 6423487, upload-time = "2026-07-17T13:32:35.996Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ed/257d774da7803a86739990351cea4c808fbbbd234c7fb9d454bb2eb224d7/atlaslib_ecmwf-0.46.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:7e082635d8be0cd6de29e927c3286c7315230886936987406bf3bb8cab888252", size = 5200837, upload-time = "2026-07-17T13:59:21.463Z" }, + { url = "https://files.pythonhosted.org/packages/0c/48/bfd4fbb3f78e456ea31c43e2ce09a6727534b6dd4ac59be67d8de9edc368/atlaslib_ecmwf-0.46.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:f1f2823efec418f6811fe4a445d0f16648fd28dfb3a5289276fa12c94736c6aa", size = 5712561, upload-time = "2026-07-17T13:46:37.58Z" }, + { url = "https://files.pythonhosted.org/packages/cd/6b/1896493b0ccce45efd56c705ea89c0e077d3f2115163b3ce40aa8d5907e9/atlaslib_ecmwf-0.46.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:df61850318fcad8055949d4aacab5c0ac1bc128235cad38e18c428f9fc787dbb", size = 6062325, upload-time = "2026-07-17T13:16:58.857Z" }, + { url = "https://files.pythonhosted.org/packages/cb/da/6192049ee1cdb22fc3b8bc34e18163852da07589b4157ab80ceb9f3ca46c/atlaslib_ecmwf-0.46.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:59ada48b4bfac8dc59cb626ec4b09cfec988c85506f949e824bd3aa082842191", size = 6423492, upload-time = "2026-07-17T13:31:43.162Z" }, + { url = "https://files.pythonhosted.org/packages/c9/73/6301050439b9e2cbbc9887c8a8b7b6ae5c6fb572b79e8c3b3435f3934fd8/atlaslib_ecmwf-0.46.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:ceb4914a07fbbe9f1f968b93cbc5ac00fde728a2c7ac3694c3214ee814fa10da", size = 5200846, upload-time = "2026-07-17T13:15:42.274Z" }, + { url = "https://files.pythonhosted.org/packages/d8/2e/fe86dec20a1aa34ef6b21566faf25283cfb29101f878e950ca437df09fd5/atlaslib_ecmwf-0.46.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:8993e823e1bf3ee78a8b60ff539d38886c346cdca04406dad8544600b28e9cdb", size = 5706278, upload-time = "2026-07-17T13:43:31.548Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ec/02c2aa71f610e09f26c1b81dc5dca821b792a6e5ccec22931ce5e80fbc22/atlaslib_ecmwf-0.46.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:cf9e8ed30906f3df1c87660c58c84957a4078ee80f7d53e8eb44376e10678742", size = 6062296, upload-time = "2026-07-17T13:16:49.267Z" }, + { url = "https://files.pythonhosted.org/packages/a9/4c/d5bbbdd643a6319011c6e2a3fe5e0306aaf10ef9ea6e3c179522fbbe11ba/atlaslib_ecmwf-0.46.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:31607725a5f4bcc4512c5cf445e264718602b9b29212f76ca0825f2adec10c82", size = 6423486, upload-time = "2026-07-17T13:28:58.598Z" }, + { url = "https://files.pythonhosted.org/packages/ea/bc/9d0f7fed54b7dcff382fc0d7ce1a12bc8515bad29f6a09dd9dceab20ba6c/atlaslib_ecmwf-0.46.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:0ded369d12923d91c3fce81237cbfe443a40a95ceedd71f8951df132dbc6dc29", size = 5200844, upload-time = "2026-07-17T13:58:52.991Z" }, + { url = "https://files.pythonhosted.org/packages/58/91/61308161d4dd72e63c67a1a93a1468aab6b48b8a8c0debe0808f78f74097/atlaslib_ecmwf-0.46.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:4c0257d0a2f309fe12d489ab5e46408b6e5f51768937658c233adb6f066a51d9", size = 5706269, upload-time = "2026-07-17T13:21:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/84/91/867537823d5b5b0753edeb5f9f62ea4c9ae0621c5c5488ebe1000ae7c8cc/atlaslib_ecmwf-0.46.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:aa600616407f4201abb1b1f934b71f22b088dad089f73266a685e4e45ed867de", size = 6062338, upload-time = "2026-07-17T13:17:25.495Z" }, + { url = "https://files.pythonhosted.org/packages/75/d0/ec7f1c7aab7168909a34c162bec99729ce6474191394f6b3b0f94f658f30/atlaslib_ecmwf-0.46.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:eba6324c4ea2ad772c28822f8f3803df72143d197e66131ad697122878dd29bd", size = 6423485, upload-time = "2026-07-17T13:29:46.309Z" }, ] [[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 }, + { 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 = "certifi" -version = "2026.5.20" +version = "2026.7.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422 } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134 }, + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, ] [[package]] name = "cffi" -version = "2.0.0" +version = "2.1.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/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283 }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504 }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811 }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402 }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217 }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079 }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475 }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829 }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211 }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036 }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184 }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790 }, - { 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/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, +sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/e9/6d7724983b3d5a0908dbf74f64038ade77c18646ff6636ec7894fd392ce1/cffi-2.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:b65f590ef2a44640f9a05dbb548a429b4ade77913ce683ac8b1480777658a6c0", size = 183837, upload-time = "2026-07-06T21:32:09.655Z" }, + { url = "https://files.pythonhosted.org/packages/69/aa/24580a278de21fd7322635556334d9b535f1cbc00b0a3919447cdf464c65/cffi-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164bff1657b2a74f0b6d54e11c9b375bc97b931f2ca9c43fcf875838da1570dd", size = 184226, upload-time = "2026-07-06T21:32:11.196Z" }, + { url = "https://files.pythonhosted.org/packages/88/a9/02cae418ec4beb282ace11958d9d4737793439d561fadc7e6d56f2e2b354/cffi-2.1.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:c941bb58d5a6e1c3892d86e42927ed6c180302f07e6d395d08c416e594b98b46", size = 211107, upload-time = "2026-07-06T21:32:12.328Z" }, + { url = "https://files.pythonhosted.org/packages/3b/30/c806937ed5e4c2c7ac30d9d6b76b5dc57ff8b75d83800d9bb11a8253cf2a/cffi-2.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a016194dbe13d14ee9556e734b772d8d67b947092b268d757fd4290e3ba2dfc2", size = 218733, upload-time = "2026-07-06T21:32:13.67Z" }, + { url = "https://files.pythonhosted.org/packages/f9/cf/398272b8bbfd58aa314fda5a7f1cdbb26d1d78ae324a11211521315dd1f0/cffi-2.1.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:03e9810d18c646077e501f661b682fbf5dee4676048527ca3cffe66faa9960dd", size = 205543, upload-time = "2026-07-06T21:32:15.148Z" }, + { url = "https://files.pythonhosted.org/packages/45/ca/f91641185cdd90c36d317a9dc7f85e88ef8682d8b300977baff5e23c35d8/cffi-2.1.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:19c54ac121cad98450b4896fa9a43ee0180d57bc4bc911a33db6cab1efab6cd3", size = 205460, upload-time = "2026-07-06T21:32:16.479Z" }, + { url = "https://files.pythonhosted.org/packages/38/66/04781a77b411f0bb5b234d62c1814754ab75ebe455ccff1b08e8d7aae98f/cffi-2.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d433a51f1870e43a13b6732f92aaf540ff77c2015097c78556f75a2d6c030e0", size = 218760, upload-time = "2026-07-06T21:32:17.98Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9a/bb1d5ed9c3fcae158e9f6391bf309c95d98c2ac37ed56573228471d0af5e/cffi-2.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3d7f118b5adbfdfead90c25822690b02bc8074fba949bb7858bec4ebd55adb43", size = 221230, upload-time = "2026-07-06T21:32:19.407Z" }, + { url = "https://files.pythonhosted.org/packages/41/aa/3c1409cdd26094efacd1c36c66e0a6eb9d4296e4fd4f9901b8b2042f4323/cffi-2.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c5f5df567f6eb216de69be06ce55c8b714090fae02b18a3b40da8163b8c5fa9c", size = 213524, upload-time = "2026-07-06T21:32:20.828Z" }, + { url = "https://files.pythonhosted.org/packages/fa/75/74dfb7c3fc6ebbd408038476bd4c1d7e925c62614e7b9c534ecc34218288/cffi-2.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:11b3fb55f4f8ad92274ed26705f65d8f91457de71f5380061eb6d125a768fecd", size = 220341, upload-time = "2026-07-06T21:32:21.9Z" }, + { url = "https://files.pythonhosted.org/packages/70/b6/9003c33a3e7d2c1306f5962e646457dcfe5a8cd8fce6bbe02d7af25db783/cffi-2.1.0-cp310-cp310-win32.whl", hash = "sha256:9d72af0cf10a76a600a9690078fe31c63b9588c8e86bf9fd353f713c84b5db0f", size = 174578, upload-time = "2026-07-06T21:32:23.073Z" }, + { url = "https://files.pythonhosted.org/packages/8a/26/710688310447531c7a22f857c7f79d9855ec18b03e04494ced723fb37e2f/cffi-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb62edb5bb52cca65fab91a63afa7561607120d26090a7e8fda6fb9f064726da", size = 185071, upload-time = "2026-07-06T21:32:24.671Z" }, + { url = "https://files.pythonhosted.org/packages/d3/67/85c89a59ba36a671e79638f44d466749f08179266a57e4f2ffdf92174072/cffi-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc", size = 183845, upload-time = "2026-07-06T21:32:26.32Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dd/e3b0baa2d3d6a857ac72b7efbf18e32e487c9cdafcc13049ad765495b15e/cffi-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7", size = 184186, upload-time = "2026-07-06T21:32:28.025Z" }, + { url = "https://files.pythonhosted.org/packages/65/68/9f3ef890cf3c6ab97bd531c5677f67613d302165d16f8142b2811782a614/cffi-2.1.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93", size = 211892, upload-time = "2026-07-06T21:32:29.565Z" }, + { url = "https://files.pythonhosted.org/packages/22/d7/1a74539db16d8bfd839ff1515948948efbb162e574650fd3d846896eea95/cffi-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2", size = 218793, upload-time = "2026-07-06T21:32:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d1/9a5b7169499e8e8d8e636de70b97ac7c9447104d2ff1a2cd94790cea5162/cffi-2.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c", size = 205737, upload-time = "2026-07-06T21:32:32.216Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b0/e131a9c41f10607926278453d9596163594fe1c4ebc46efe3b5e5b34eb84/cffi-2.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f", size = 204909, upload-time = "2026-07-06T21:32:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d2/4398416cd699b35167947c6e22aca52c47e69ad5695073c9f1f2c52e04aa/cffi-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565", size = 217883, upload-time = "2026-07-06T21:32:35.173Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a5/d4fe77b589e5e82d43ebc809bf2e6474afe8e48e32ea050b9357645b6471/cffi-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c", size = 221251, upload-time = "2026-07-06T21:32:36.527Z" }, + { url = "https://files.pythonhosted.org/packages/22/f0/a2fc43084c0433caf7f461bccc013e28f848d04ee1c5ed7fce71423cf4d9/cffi-2.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02", size = 214250, upload-time = "2026-07-06T21:32:37.852Z" }, + { url = "https://files.pythonhosted.org/packages/04/8c/b925975448cf20634a9fbd5efceb807219db452653648d2897c0989cab2d/cffi-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e", size = 219441, upload-time = "2026-07-06T21:32:39.146Z" }, + { url = "https://files.pythonhosted.org/packages/eb/da/5c4918a2d61d86fa927d716cb3d8e4626ef8dc8f605a599d32f33897f59a/cffi-2.1.0-cp311-cp311-win32.whl", hash = "sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479", size = 174496, upload-time = "2026-07-06T21:32:40.467Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c8/6c2de1d55cf35ef8b92885d5ef280790f0fb9634d87ea1cc315176aecd61/cffi-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458", size = 185113, upload-time = "2026-07-06T21:32:41.761Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4e/e8d7cb5783f1841a3c8fb3a7735838d7484d08ec08c9f984b14cac1ac0e9/cffi-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d", size = 179927, upload-time = "2026-07-06T21:32:42.961Z" }, + { url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" }, + { url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" }, + { url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" }, + { url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" }, + { url = "https://files.pythonhosted.org/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda", size = 194331, upload-time = "2026-07-06T21:33:03.697Z" }, + { url = "https://files.pythonhosted.org/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b", size = 196966, upload-time = "2026-07-06T21:33:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a", size = 184795, upload-time = "2026-07-06T21:33:06.699Z" }, + { url = "https://files.pythonhosted.org/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea", size = 184746, upload-time = "2026-07-06T21:33:08.071Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db", size = 214747, upload-time = "2026-07-06T21:33:09.671Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f", size = 222392, upload-time = "2026-07-06T21:33:10.896Z" }, + { url = "https://files.pythonhosted.org/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d", size = 210285, upload-time = "2026-07-06T21:33:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0", size = 208801, upload-time = "2026-07-06T21:33:13.617Z" }, + { url = "https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224", size = 221808, upload-time = "2026-07-06T21:33:15.466Z" }, + { url = "https://files.pythonhosted.org/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c", size = 225241, upload-time = "2026-07-06T21:33:16.869Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a", size = 223588, upload-time = "2026-07-06T21:33:18.239Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2", size = 175248, upload-time = "2026-07-06T21:33:19.799Z" }, + { url = "https://files.pythonhosted.org/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512", size = 185717, upload-time = "2026-07-06T21:33:21.47Z" }, + { url = "https://files.pythonhosted.org/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f", size = 180114, upload-time = "2026-07-06T21:33:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a", size = 194142, upload-time = "2026-07-06T21:33:23.657Z" }, + { url = "https://files.pythonhosted.org/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3", size = 196819, upload-time = "2026-07-06T21:33:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d", size = 184965, upload-time = "2026-07-06T21:33:26.605Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac", size = 184952, upload-time = "2026-07-06T21:33:27.823Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6", size = 222353, upload-time = "2026-07-06T21:33:29.178Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913", size = 210051, upload-time = "2026-07-06T21:33:30.534Z" }, + { url = "https://files.pythonhosted.org/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d", size = 208630, upload-time = "2026-07-06T21:33:31.753Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5", size = 221593, upload-time = "2026-07-06T21:33:33.044Z" }, + { url = "https://files.pythonhosted.org/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce", size = 225146, upload-time = "2026-07-06T21:33:34.224Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326", size = 223240, upload-time = "2026-07-06T21:33:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd", size = 177723, upload-time = "2026-07-06T21:33:51.626Z" }, + { url = "https://files.pythonhosted.org/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb", size = 187937, upload-time = "2026-07-06T21:33:53.403Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804", size = 183001, upload-time = "2026-07-06T21:33:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714", size = 188538, upload-time = "2026-07-06T21:33:36.792Z" }, + { url = "https://files.pythonhosted.org/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376", size = 188230, upload-time = "2026-07-06T21:33:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98", size = 223899, upload-time = "2026-07-06T21:33:39.514Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13", size = 211652, upload-time = "2026-07-06T21:33:40.851Z" }, + { url = "https://files.pythonhosted.org/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d", size = 210755, upload-time = "2026-07-06T21:33:42.183Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056", size = 223933, upload-time = "2026-07-06T21:33:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4", size = 226749, upload-time = "2026-07-06T21:33:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94", size = 225703, upload-time = "2026-07-06T21:33:46.374Z" }, + { url = "https://files.pythonhosted.org/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76", size = 182857, upload-time = "2026-07-06T21:33:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5", size = 194065, upload-time = "2026-07-06T21:33:48.953Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8", size = 186404, upload-time = "2026-07-06T21:33:50.309Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c", size = 194121, upload-time = "2026-07-06T21:33:56.109Z" }, + { url = "https://files.pythonhosted.org/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001", size = 196820, upload-time = "2026-07-06T21:33:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3", size = 184936, upload-time = "2026-07-06T21:33:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc", size = 185045, upload-time = "2026-07-06T21:34:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699", size = 222342, upload-time = "2026-07-06T21:34:01.814Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022", size = 210073, upload-time = "2026-07-06T21:34:03.255Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0", size = 208551, upload-time = "2026-07-06T21:34:04.433Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1", size = 221649, upload-time = "2026-07-06T21:34:06.157Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28", size = 225203, upload-time = "2026-07-06T21:34:07.489Z" }, + { url = "https://files.pythonhosted.org/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629", size = 223263, upload-time = "2026-07-06T21:34:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6", size = 177696, upload-time = "2026-07-06T21:34:26.355Z" }, + { url = "https://files.pythonhosted.org/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853", size = 187914, upload-time = "2026-07-06T21:34:27.58Z" }, + { url = "https://files.pythonhosted.org/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda", size = 183004, upload-time = "2026-07-06T21:34:28.905Z" }, + { url = "https://files.pythonhosted.org/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc", size = 188378, upload-time = "2026-07-06T21:34:09.926Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca", size = 188319, upload-time = "2026-07-06T21:34:11.101Z" }, + { url = "https://files.pythonhosted.org/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d", size = 223904, upload-time = "2026-07-06T21:34:12.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8", size = 211554, upload-time = "2026-07-06T21:34:13.987Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd", size = 210795, upload-time = "2026-07-06T21:34:15.972Z" }, + { url = "https://files.pythonhosted.org/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f", size = 223843, upload-time = "2026-07-06T21:34:17.509Z" }, + { url = "https://files.pythonhosted.org/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc", size = 226773, upload-time = "2026-07-06T21:34:19.05Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9", size = 225719, upload-time = "2026-07-06T21:34:20.576Z" }, + { url = "https://files.pythonhosted.org/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b", size = 182760, upload-time = "2026-07-06T21:34:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5", size = 193769, upload-time = "2026-07-06T21:34:23.589Z" }, + { url = "https://files.pythonhosted.org/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210", size = 186405, upload-time = "2026-07-06T21:34:24.857Z" }, ] [[package]] @@ -169,11 +195,11 @@ dependencies = [ { name = "eccodes" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591 } +sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591, upload-time = "2025-09-30T22:46:14.133Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123 }, + { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123, upload-time = "2025-09-30T22:46:12.206Z" }, ] [[package]] @@ -183,199 +209,181 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/45/dcc38d7b293107d3e33b3d94b2619687eb414a4f16880e2e841cdb6ac49a/cftime-1.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ad81e8cb0eb873b33c3d1e22c6168163fdc64daa8f7aeb4da8092f272575f4d", size = 510221 }, - { url = "https://files.pythonhosted.org/packages/68/63/2875341516fcfe80f1a16f86b420aec9441223ab5381d554441c9fdae56e/cftime-1.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12d95c6af852114a13301c5a61e41afdbd1542e72939c1083796f8418b9b8b0e", size = 490684 }, - { url = "https://files.pythonhosted.org/packages/80/7f/85f2c4c7ae8300b7871af7d7d144ad06f71dc0dd6258f0d18fd966067d1b/cftime-1.6.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2659b7df700e27d9e3671f686ce474dfb5fc274966961edf996acc148dfa094a", size = 1592268 }, - { url = "https://files.pythonhosted.org/packages/6c/9a/72dbd72498e958edf41a770bbd05e68141774325a945092059f4eb9c653d/cftime-1.6.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:94cebdfcda6a985b8e69aed22d00d6b8aa1f421495adbdcff1d59b3e896d81e2", size = 1624716 }, - { url = "https://files.pythonhosted.org/packages/bc/9e/2c4c720ad8bbe87994ca62a0e3c09d3786b984af664a91a6f3a668aa0b13/cftime-1.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:179681b023349a2fe277ceccc89d4fc52c0dd105cb59b7187b5bc5d442875133", size = 1705927 }, - { url = "https://files.pythonhosted.org/packages/da/77/66484061dee5fbcb2fdcfa6a491d4efb880725117f4a339d20a5323105df/cftime-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:d8b9fdecb466879cfe8ca4472b229b6f8d0bb65e4ffd44266ae17484bac2cf38", size = 472435 }, - { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733 }, - { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946 }, - { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856 }, - { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573 }, - { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563 }, - { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631 }, - { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383 }, - { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175 }, - { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980 }, - { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166 }, - { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614 }, - { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090 }, - { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840 }, - { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534 }, - { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453 }, - { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541 }, - { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014 }, - { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625 }, - { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269 }, - { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364 }, - { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468 }, - { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725 }, - { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445 }, - { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434 }, - { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812 }, - { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768 }, - { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818 }, - { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862 }, - { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781 }, - { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218 }, - { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932 }, - { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894 }, - { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027 }, - { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065 }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605, upload-time = "2025-10-13T18:56:26.352Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/45/dcc38d7b293107d3e33b3d94b2619687eb414a4f16880e2e841cdb6ac49a/cftime-1.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ad81e8cb0eb873b33c3d1e22c6168163fdc64daa8f7aeb4da8092f272575f4d", size = 510221, upload-time = "2025-10-13T18:55:52.976Z" }, + { url = "https://files.pythonhosted.org/packages/68/63/2875341516fcfe80f1a16f86b420aec9441223ab5381d554441c9fdae56e/cftime-1.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12d95c6af852114a13301c5a61e41afdbd1542e72939c1083796f8418b9b8b0e", size = 490684, upload-time = "2025-10-13T18:55:54.685Z" }, + { url = "https://files.pythonhosted.org/packages/80/7f/85f2c4c7ae8300b7871af7d7d144ad06f71dc0dd6258f0d18fd966067d1b/cftime-1.6.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2659b7df700e27d9e3671f686ce474dfb5fc274966961edf996acc148dfa094a", size = 1592268, upload-time = "2025-10-13T19:39:10.992Z" }, + { url = "https://files.pythonhosted.org/packages/6c/9a/72dbd72498e958edf41a770bbd05e68141774325a945092059f4eb9c653d/cftime-1.6.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:94cebdfcda6a985b8e69aed22d00d6b8aa1f421495adbdcff1d59b3e896d81e2", size = 1624716, upload-time = "2025-10-13T18:55:55.848Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9e/2c4c720ad8bbe87994ca62a0e3c09d3786b984af664a91a6f3a668aa0b13/cftime-1.6.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:179681b023349a2fe277ceccc89d4fc52c0dd105cb59b7187b5bc5d442875133", size = 1705927, upload-time = "2025-10-13T18:55:57.711Z" }, + { url = "https://files.pythonhosted.org/packages/da/77/66484061dee5fbcb2fdcfa6a491d4efb880725117f4a339d20a5323105df/cftime-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:d8b9fdecb466879cfe8ca4472b229b6f8d0bb65e4ffd44266ae17484bac2cf38", size = 472435, upload-time = "2025-10-13T18:55:59.092Z" }, + { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733, upload-time = "2025-10-13T18:56:00.189Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946, upload-time = "2025-10-13T18:56:01.262Z" }, + { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856, upload-time = "2025-10-13T19:39:12.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573, upload-time = "2025-10-13T18:56:02.788Z" }, + { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563, upload-time = "2025-10-13T18:56:04.075Z" }, + { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631, upload-time = "2025-10-13T18:56:05.159Z" }, + { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383, upload-time = "2026-01-02T21:16:47.317Z" }, + { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175, upload-time = "2025-10-13T18:56:06.398Z" }, + { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980, upload-time = "2025-10-13T18:56:08.669Z" }, + { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166, upload-time = "2025-10-13T19:39:14.109Z" }, + { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614, upload-time = "2025-10-13T18:56:09.815Z" }, + { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090, upload-time = "2025-10-13T18:56:11.442Z" }, + { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840, upload-time = "2025-10-13T18:56:12.506Z" }, + { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534, upload-time = "2026-01-02T21:16:48.784Z" }, + { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453, upload-time = "2025-10-13T18:56:13.545Z" }, + { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541, upload-time = "2025-10-13T18:56:14.612Z" }, + { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014, upload-time = "2025-10-13T19:39:15.346Z" }, + { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625, upload-time = "2025-10-13T18:56:15.745Z" }, + { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269, upload-time = "2025-10-13T18:56:17.04Z" }, + { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364, upload-time = "2025-10-13T18:56:18.05Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468, upload-time = "2026-01-02T21:16:50.193Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725, upload-time = "2025-10-13T18:56:19.424Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445, upload-time = "2025-10-13T18:56:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434, upload-time = "2025-10-13T19:39:17.084Z" }, + { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812, upload-time = "2025-10-13T18:56:21.971Z" }, + { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768, upload-time = "2025-10-13T18:56:24.027Z" }, + { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818, upload-time = "2025-10-13T18:56:25.376Z" }, + { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862, upload-time = "2026-01-02T20:45:02.625Z" }, + { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781, upload-time = "2026-01-02T20:45:04.818Z" }, + { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218, upload-time = "2026-01-02T20:45:06.788Z" }, + { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932, upload-time = "2026-01-02T20:45:11.194Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894, upload-time = "2026-01-02T20:45:16.351Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027, upload-time = "2026-01-02T20:45:20.023Z" }, + { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065, upload-time = "2026-01-02T20:45:23.398Z" }, ] [[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/26/08/0f303cb0b529e456bb116f2d50565a482694fbb94340bf56d44677e7ed03/charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", size = 315182 }, - { url = "https://files.pythonhosted.org/packages/24/47/b192933e94b546f1b1fe4df9cc1f84fcdbf2359f8d1081d46dd029b50207/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", size = 209329 }, - { url = "https://files.pythonhosted.org/packages/c2/b4/01fa81c5ca6141024d89a8fc15968002b71da7f825dd14113207113fabbd/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", size = 231230 }, - { url = "https://files.pythonhosted.org/packages/20/f7/7b991776844dfa058017e600e6e55ff01984a063290ca5622c0b63162f68/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", size = 225890 }, - { url = "https://files.pythonhosted.org/packages/20/e7/bed0024a0f4ab0c8a9c64d4445f39b30c99bd1acd228291959e3de664247/charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", size = 216930 }, - { url = "https://files.pythonhosted.org/packages/e2/ab/b18f0ab31cdd7b3ddb8bb76c4a414aeb8160c9810fdf1bc62f269a539d87/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", size = 202109 }, - { url = "https://files.pythonhosted.org/packages/82/e5/7e9440768a06dfb3075936490cb82dbf0ee20a133bf0dd8551fa096914ec/charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", size = 214684 }, - { url = "https://files.pythonhosted.org/packages/71/94/8c61d8da9f062fdf457c80acfa25060ec22bf1d34bbeaca4350f13bcfd07/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", size = 212785 }, - { url = "https://files.pythonhosted.org/packages/66/cd/6e9889c648e72c0ab2e5967528bb83508f354d706637bc7097190c874e13/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", size = 203055 }, - { url = "https://files.pythonhosted.org/packages/92/2e/7a951d6a08aefb7eb8e1b54cdfb580b1365afdd9dd484dc4bee9e5d8f258/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", size = 232502 }, - { url = "https://files.pythonhosted.org/packages/58/d5/abcf2d83bf8e0a1286df55cd0dc1d49af0da4282aa77e986df343e7de124/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", size = 214295 }, - { url = "https://files.pythonhosted.org/packages/47/3a/7d4cd7ed54be99973a0dc176032cba5cb1f258082c31fa6df35cff46acfc/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", size = 227145 }, - { url = "https://files.pythonhosted.org/packages/1d/98/3a45bf8247889cf28262ebd3d0872edff11565b2a1e3064ccb132db3fbb0/charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", size = 218884 }, - { url = "https://files.pythonhosted.org/packages/ad/80/2e8b7f8915ed5c9ef13aa828d82738e33888c485b65ebf744d615040c7ea/charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", size = 148343 }, - { url = "https://files.pythonhosted.org/packages/35/1b/3b8c8c77184af465ee9ad88b5aea46ea6b2e1f7b9dc9502891e37af21e30/charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", size = 159174 }, - { url = "https://files.pythonhosted.org/packages/be/c1/feb40dca40dbb21e0a908801782d9288c64fc8d8e562c2098e9994c8c21b/charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", size = 147805 }, - { 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/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328 }, - { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061 }, - { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031 }, - { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239 }, - { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589 }, - { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733 }, - { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652 }, - { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229 }, - { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552 }, - { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806 }, - { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316 }, - { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274 }, - { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468 }, - { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460 }, - { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330 }, - { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828 }, - { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627 }, - { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008 }, - { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303 }, - { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282 }, - { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595 }, - { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986 }, - { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711 }, - { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036 }, - { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998 }, - { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056 }, - { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537 }, - { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176 }, - { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723 }, - { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085 }, - { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819 }, - { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915 }, - { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234 }, - { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042 }, - { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706 }, - { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727 }, - { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882 }, - { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860 }, - { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564 }, - { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276 }, - { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238 }, - { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189 }, - { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352 }, - { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024 }, - { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869 }, - { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541 }, - { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634 }, - { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384 }, - { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133 }, - { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257 }, - { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851 }, - { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393 }, - { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251 }, - { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609 }, - { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014 }, - { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979 }, - { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238 }, - { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110 }, - { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824 }, - { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103 }, - { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194 }, - { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827 }, - { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168 }, - { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018 }, - { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958 }, +version = "3.4.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/2a/23f34ec9d04624958e137efdc394888716353190e75f25dd22c7a2c7a8aa/charset_normalizer-3.4.9.tar.gz", hash = "sha256:673611bbd43f0810bec0b0f028ddeaaa501190339cac411f347ac76917c3ae7b", size = 152439, upload-time = "2026-07-07T14:34:58.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/81/8e983840c6e5b93b33c2ba81aa3d52c2e42f0e9a690ce7607a2e61da4a5c/charset_normalizer-3.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd6280cf040f233bd7d3407b743b4b4c74f70e8e1c4199cb112a62c941c0772a", size = 322240, upload-time = "2026-07-07T14:32:36.236Z" }, + { url = "https://files.pythonhosted.org/packages/de/d1/b4319dc3229d8272fba305e206fc0a148e2de8d4087917ce62ae6382f359/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa99adc8f081b475a12843953db36831eaf83ec33eb46a90629ca6a5de45a616", size = 216475, upload-time = "2026-07-07T14:32:38.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/33/6c99c1b3e6b8bf730e1bc809b9a2608f224145069114c479a2e9e1494346/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c1225416b463483160e4af85d5fc3a9690ccb53fd4b1865a6437825f5ede3209", size = 238670, upload-time = "2026-07-07T14:32:39.658Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f4/ffbb83546e1f198ecc70ecd372b65cf2b50f9068b380abd67640f17a8e18/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:16d10d789dd9bcca1173c95af82c58433122564b7bc39385124be735a35cbe99", size = 233476, upload-time = "2026-07-07T14:32:41.155Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5f/b98b8da398637b551e427e7be922bdec19177dc54d6811dcdaa503f23aac/charset_normalizer-3.4.9-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9bb41182d93ea91f60b4bc8fbf4c820c69ef8a12ab2d917f3f1834f1acad07e8", size = 223817, upload-time = "2026-07-07T14:32:42.592Z" }, + { url = "https://files.pythonhosted.org/packages/36/31/a276bb2e66243072a3fd06fdcab9cbb61a305b02143d70d2bda21d888fa8/charset_normalizer-3.4.9-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:bcf74c1df76758a395bf0af608c04c82257523f55c9868b334f06270d0f2112b", size = 207974, upload-time = "2026-07-07T14:32:44.258Z" }, + { url = "https://files.pythonhosted.org/packages/5e/be/7ee4453d7e88dfbc4104ccd34900b9f2c7c17dac22881865fe0e82424a25/charset_normalizer-3.4.9-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b5314963fce9b0b12743891de876e724997864ee22aa496f903f426c7e2fa5b2", size = 221655, upload-time = "2026-07-07T14:32:45.64Z" }, + { url = "https://files.pythonhosted.org/packages/1d/85/181c652953eb5276d198f375b1dd641047392050098100a3a02d6534f657/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e9701d0049d92c16703a42771b98d560b95248949f23f8cf7b4eddd201814fb9", size = 219229, upload-time = "2026-07-07T14:32:47.376Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e7/aaf6da33fc9f4691cda8f7efbc9f69179d3d39ec8a4799baf273ee1d8db0/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:65a7ff3f705e57d392f7261b6d0550fe137c3019477431f1c355e0db0a7d3e15", size = 209704, upload-time = "2026-07-07T14:32:48.855Z" }, + { url = "https://files.pythonhosted.org/packages/63/01/f2fb3bd3a73be48b173ee0c6aa8d2497af97d5663a8c4c4b491de4c62f7a/charset_normalizer-3.4.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79580094b00d1789d1f93ea55bc43cb2f611910c72235b7657f3482ddcc1b22d", size = 226243, upload-time = "2026-07-07T14:32:50.239Z" }, + { url = "https://files.pythonhosted.org/packages/c4/02/c57a22739fe05246b0b5783b3bfb6afaac4eebb46f3ececdfb2f048f780e/charset_normalizer-3.4.9-cp310-cp310-win32.whl", hash = "sha256:432786d3561e69aeeae6c7e8648964ce0ad05736120135601f87ac26b9c83381", size = 150935, upload-time = "2026-07-07T14:32:51.676Z" }, + { url = "https://files.pythonhosted.org/packages/37/8d/ca39a7559a4797505530d084fd3a49a2c959efbbbff146302fb7be4e3b35/charset_normalizer-3.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:8c041122946b7ba21bb32c45b1aa57b1be35527690aeb3c5c234521085632eee", size = 162314, upload-time = "2026-07-07T14:32:53.193Z" }, + { url = "https://files.pythonhosted.org/packages/01/da/a44bd7a13d426e69e4894557106cd58669097bfad4a8681123b618fbfc5d/charset_normalizer-3.4.9-cp310-cp310-win_arm64.whl", hash = "sha256:375b83ed0aecfce76c16d198fbc21f3b11b337d68662bea0a995046682a11419", size = 153075, upload-time = "2026-07-07T14:32:54.554Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e3/85ec501f206fb049259288c1f3506e53876937fb00edb47009348e66756b/charset_normalizer-3.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0e94703ec9684807f20cfb5eed95c70f67f2a8f21ad620146d7b5a13677b93e5", size = 317075, upload-time = "2026-07-07T14:32:56.021Z" }, + { url = "https://files.pythonhosted.org/packages/c3/69/2a5385192e67175f7d8bd5ce4f57c24bc956439adeae5c13a99aa28a53d1/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a441ea71902098ffe78c5abe6c494f44160b4af614ed16c3d9a3b1d17fd8ee2", size = 213837, upload-time = "2026-07-07T14:32:57.78Z" }, + { url = "https://files.pythonhosted.org/packages/b3/46/03ddc7da576d814fe0a36dd1f0fd3258e95404b4b2e3c026b7923d7e133f/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:304b13570067b2547562e308af560b3963857b1fa90bd6afd978130130fe2d6a", size = 235503, upload-time = "2026-07-07T14:32:59.205Z" }, + { url = "https://files.pythonhosted.org/packages/4e/6e/de0229a7ef40f6f9d28a837eebf4ec47bdca5dab4e900c84f22919af636a/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4773092f8019072343a7447203308b176e10199920eb02d6195e81bbb3274c29", size = 229944, upload-time = "2026-07-07T14:33:00.803Z" }, + { url = "https://files.pythonhosted.org/packages/a5/34/49b9060e8418b14fb5cba9cf6bfb383111e2538a03a1fb18e66a95aeb3d5/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04ce310cb89c15df659582aee80a0603788732a5e017d5bd5c81158106ce249c", size = 221276, upload-time = "2026-07-07T14:33:02.199Z" }, + { url = "https://files.pythonhosted.org/packages/44/95/80282cce0fae9c3061203d723ee87da996aed79679e65d8935050ee7ca1f/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:c0323c9daef75ef2e5083624b4585018a0c9d5e3b40f607eed81a311270b934b", size = 205260, upload-time = "2026-07-07T14:33:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/0c/74/2f62c8821b969ea3bd67cc2e6976834f48ca5d12664d2559ebcd9bcfbed7/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:871ff67ea1aad4dfd91736464934d56b32dac49f9fbe16cddba36198a7b3a0db", size = 217786, upload-time = "2026-07-07T14:33:05.12Z" }, + { url = "https://files.pythonhosted.org/packages/d9/8d/feabb82cb49fcad14515b1d7d1ca4787b0da7fc723a212bf89bc9e0fac52/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67830fc78e67501f47bb950471b2dcb9b35b140084429318e862895a8e89c993", size = 216798, upload-time = "2026-07-07T14:33:06.629Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ff/c946d63bc3786d5b84d960b0f7ab7e25b828486a946b5aa997625bcaf6a6/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3d92613ec25e43b05f042302531ec0f00b8445190e43325880cbd6ab7c2581da", size = 206429, upload-time = "2026-07-07T14:33:08.006Z" }, + { url = "https://files.pythonhosted.org/packages/af/ba/5e5007c370702f85d2ef75791fac7943ed41e080364a673b20142e430e3e/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:280081916dc341820640489a66e4696049401ef1cf6dd672f672e70ad915aca3", size = 223066, upload-time = "2026-07-07T14:33:09.783Z" }, + { url = "https://files.pythonhosted.org/packages/83/d5/9096aa3cf532dfad237861544eb47a0f20d5adbf1039760fed8eaae935d9/charset_normalizer-3.4.9-cp311-cp311-win32.whl", hash = "sha256:ac351b3b8014eead140e77e9717e2992c6bbe30b63bc3422422eb84865412e3d", size = 150456, upload-time = "2026-07-07T14:33:11.217Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a1/e29995109e455dc8eff8d0fac6ae509be39561318a7cfeac5d33ad029213/charset_normalizer-3.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:6366a16e1a25018694d6a5d784d09b046edc9eac40ea2b54065c3052672516a1", size = 161410, upload-time = "2026-07-07T14:33:12.743Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8d/1569f4d0032d6ba2a4fe4591c35bf87868c600c41a71eb5c2e1ffa8464c2/charset_normalizer-3.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:1d22856ffbe153a602df38e4a5464f0b748a54002e0d69ac6d2ad0a197cc99ec", size = 152649, upload-time = "2026-07-07T14:33:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/70/4a/ecbd131485c07fcdfad54e28946d513e3da22ef3b4bd854dcafae54ec739/charset_normalizer-3.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45b0cc4e3556cd875e09102988d1ab8356c998b596c9fced84547c8138b487a0", size = 319300, upload-time = "2026-07-07T14:33:15.666Z" }, + { url = "https://files.pythonhosted.org/packages/ec/96/5d9364e3342d69f3a045e1777bc47c85c383e6e9466d561b33fdb419d1f9/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b2aff1c7b3884512b9512c3eaadd9bab39fb45042ffaaa1dd08ff2b9f8109d9", size = 215802, upload-time = "2026-07-07T14:33:17.031Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4c/5361f9aa7f2cb58d94f2ab831b3d493f69efb1d239654b4744e3c09527cb/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9104ed0bd76a429d46f9ec0dbc9b08ad1d2dcdf2b00a5a0daa1c145329b35b44", size = 237171, upload-time = "2026-07-07T14:33:18.576Z" }, + { url = "https://files.pythonhosted.org/packages/50/78/ce342ca4ff30b2eb49fe6d9578df85974f90c67d294113e94efdd9664cbd/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b86a2b16095d250c6f58b3d9b2eee6f4147754344f3dab0922f7c9bf7d226c9", size = 233075, upload-time = "2026-07-07T14:33:20.084Z" }, + { url = "https://files.pythonhosted.org/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd", size = 224256, upload-time = "2026-07-07T14:33:21.747Z" }, + { url = "https://files.pythonhosted.org/packages/87/3a/ad914516df7e358a81aae018caa5e0470ba827fa6d763b1d2e87d920a5f6/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:90c44bc373b7687f6948b693cceaea1348ae0975d7474746559494468e3c1d84", size = 208784, upload-time = "2026-07-07T14:33:23.313Z" }, + { url = "https://files.pythonhosted.org/packages/d7/74/3c12f9755717dfe5c5c87da63f35d765fa0c00382ec26bf23f7fae34f2ba/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cdef90ae47919cae358d8ab15797a800ed41da7aba5d72419fb510729e2ed4b", size = 219928, upload-time = "2026-07-07T14:33:24.814Z" }, + { url = "https://files.pythonhosted.org/packages/33/9a/895095b83e7907abd6d3d99aad3a38ad0d9686cc186cb0c94c24320fe63e/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:60f44ade2cf573dad7a277e6f8ca9a51a21dda572b13bd7d8539bb3cd5dbedde", size = 218489, upload-time = "2026-07-07T14:33:26.42Z" }, + { url = "https://files.pythonhosted.org/packages/a1/34/ef5c05f412f42520d7709b7d3784d19640839eb7366ded1755511585429f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a1786910334ed46ab1dd73222f2cd1e05c2c3bb39f6dddb4f8b36fc382058a39", size = 210267, upload-time = "2026-07-07T14:33:27.952Z" }, + { url = "https://files.pythonhosted.org/packages/83/dc/9b29fa4412b318bf3bfea985c35d67eb55e04b59a7c3f2237168b0e0be6f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03d07803992c6c7bbc976327f34b18b6160327fc81cb82c9d504720ac0be3b62", size = 226030, upload-time = "2026-07-07T14:33:29.397Z" }, + { url = "https://files.pythonhosted.org/packages/0e/42/6dbc00b8cd16011691203e33570fa42ed5746599a2e878112d16eab403a3/charset_normalizer-3.4.9-cp312-cp312-win32.whl", hash = "sha256:78841cccf1af7b40f6f716338d50c0902dbe88d9f800b3c973b7a9a0a693a642", size = 151185, upload-time = "2026-07-07T14:33:30.781Z" }, + { url = "https://files.pythonhosted.org/packages/80/cc/f920afd1a23c58ccd53c1d36085a71893a4737ff5e66e0371efab6809850/charset_normalizer-3.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:4b3dac63058cc36820b0dd072f89898604e2d39686fe05321729d00d8ac185a0", size = 162557, upload-time = "2026-07-07T14:33:32.176Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e6/0386d43a261ff4e4b30c5857af7df877254b46bec7b9d1b74b6bf969a90b/charset_normalizer-3.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:78fa18e436a1a0e58dbd7e02fc4473f3f32cceb12df9dfca542d075961c307d2", size = 152665, upload-time = "2026-07-07T14:33:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/b2/06/97ec2aeae780b31d742b6352218b43841a6871e2564578ca522dce4a45c3/charset_normalizer-3.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:440eede837960000d74978f0eba527be106b5b9aee0daf779d395276ed0b0614", size = 317688, upload-time = "2026-07-07T14:33:35.408Z" }, + { url = "https://files.pythonhosted.org/packages/d0/39/8ff066c672434225f8d25f8b739f992af250944392173dcc88362681c9bf/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e764fd1e70b6a3e205a0e46f3051701f98a8cb3fad66eeb80e48bb502f8698", size = 214982, upload-time = "2026-07-07T14:33:36.996Z" }, + { url = "https://files.pythonhosted.org/packages/92/8f/3a47a3667c83c2df9483d91644c6c107de3bf8874aa1793da9d3012eb986/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e4fd89cc178bced6ad29cb3e6dd4aa63fa5017c3524dbd0b25998fb64a87cc8b", size = 236460, upload-time = "2026-07-07T14:33:38.536Z" }, + { url = "https://files.pythonhosted.org/packages/f1/60/b22cdbee7e4013dab8b0d7647fc6181120fbbbc8f7025c226d15bd5a47fc/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bd47ba7fc3ca94896759ea0109775132d3e7ab921fbf54038e1bab2e46c313c9", size = 232003, upload-time = "2026-07-07T14:33:40.059Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33", size = 223149, upload-time = "2026-07-07T14:33:41.631Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3e/faee8f9de92b14ee1198e9163252bb15efee7301b31256a3b6d9ebfdd0dd/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:5b10cd92fc5c498b35a8635df6d5a100207f88b63a4dc1de7ef9a548e1e2cd63", size = 207901, upload-time = "2026-07-07T14:33:43.209Z" }, + { url = "https://files.pythonhosted.org/packages/3a/25/45f30093ae27dd7b92a793b61882a38685f993700113ca36e0c9c14965e1/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a4fbdde9dd4a9ce5fd52c2b3a347bb50cc89483ef783f1cb00d408c13f7a96c0", size = 219176, upload-time = "2026-07-07T14:33:44.725Z" }, + { url = "https://files.pythonhosted.org/packages/48/18/c8f397329c35e32f6a837e488986f4ae03bd2abebc453b48714991630c2f/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:416c229f77e5ea25b3dfd4b582f8d73d7e43c22320302b9ab128a2d3a0b38efe", size = 217356, upload-time = "2026-07-07T14:33:46.192Z" }, + { url = "https://files.pythonhosted.org/packages/86/7e/5ce0bba863470fd1902d5e5843968951bddf38abe4742fc97116ef4598b3/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:75286256590a6320cf106a0d28970d3560aad9ee09aa7b34fb40524792436d35", size = 209614, upload-time = "2026-07-07T14:33:47.705Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ef/2473d3c4d869155be4af1191111d59c4d5c4e0173026f7e85b176e23bf65/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69b157c5d3292bcd443faca052f3096f637f1e074b98212a933c074ae23dc3b8", size = 224991, upload-time = "2026-07-07T14:33:49.238Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a3/53ddae3db108a088156aa8ddfafd411ebbc1340f48c5573f697b27f69a39/charset_normalizer-3.4.9-cp313-cp313-win32.whl", hash = "sha256:51307f5c71007673a2bf8232ad973483d281e74cb99c8c5a990af1eefa6277d9", size = 150622, upload-time = "2026-07-07T14:33:50.711Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ef/6953a77c7cf2c2ff9998e6f575ab3e380119f100223381565a4f94c1f836/charset_normalizer-3.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:fe2c7201c642b7c308f1675355ad7ff7b66acfe3541625efe5a3ad38f29d6115", size = 161947, upload-time = "2026-07-07T14:33:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/6e/fb/d560d1d1555debbfe7849d9cac6145c1b537709d79576bf22557ed803b82/charset_normalizer-3.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:611057cc5d5c0afc743ba8be6bd828c17e0aaa8643f9d0a9b9bb7dea80eb8012", size = 152594, upload-time = "2026-07-07T14:33:53.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8d/496817fa0944239ecae662dd57ea765cfeaec6a735f9f025d4b7b72e7143/charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:0327fcd59a935777d83410750c50600ee9571af2846f71ce40f25b13da1ef380", size = 317253, upload-time = "2026-07-07T14:33:54.994Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f9/ef4a69ea338ad3c0deceea0f5f7d2380ae8b52132b06d652cb0d2cd86706/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a79d9f4d8001473a30c163556b3c3bfebec837495a412dde78b51672f6134f9", size = 215898, upload-time = "2026-07-07T14:33:56.334Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e7/5ddfd76fc061eb52de219658a4aa431cbacadf0a0219c8854f00da50d289/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33bdcc2a32c0a0e861f60841a512c8acc658c87c2ac59d89e3a46dacf7d866e4", size = 236718, upload-time = "2026-07-07T14:33:57.9Z" }, + { url = "https://files.pythonhosted.org/packages/49/ba/768fa3f36048d81c477a0ce61f813bc1454d80917ccfe550abd9f44f5e24/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f840ed6d8ecba8255df8c42b87fadeda98ddfc6eeec05e2dc66e26d46dd6f58a", size = 232519, upload-time = "2026-07-07T14:33:59.811Z" }, + { url = "https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046", size = 223143, upload-time = "2026-07-07T14:34:01.517Z" }, + { url = "https://files.pythonhosted.org/packages/19/79/55c32d06d76ae4feafe053f061f3e3ab70bcf19f4007797ce8c3efda7830/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:f7fb7d750cfa0a070d2c24e831fd3481019a60dd317ea2b39acbcebc08b6ed81", size = 206742, upload-time = "2026-07-07T14:34:03.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/e0/47c079dd82d217c807479cd59ffd30af56307ea31c108b75758970459ad3/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1c96a7a18b9690a4d46df09e3e3382406ae3213727cd1019ebade1c4a81917", size = 219191, upload-time = "2026-07-07T14:34:04.657Z" }, + { url = "https://files.pythonhosted.org/packages/42/ab/b9bc2e77d6b44a7e46ef62ec5cac1c9a6ba7b9135a5d560f002696ec9995/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a4cfde78a9f2880208d16a93b795726a3017d5977e08d1e162a7a31322479c41", size = 218328, upload-time = "2026-07-07T14:34:06.115Z" }, + { url = "https://files.pythonhosted.org/packages/f1/78/c9c71d599f5aa2d42bcdd35cbbd46d7f535351a57e40ff7d8e5a7e219401/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4d6fcde76f94f5cb9e43e9e9a61f16dacefd228cbbf6f1a09bd9b219a92f1a1", size = 207406, upload-time = "2026-07-07T14:34:07.554Z" }, + { url = "https://files.pythonhosted.org/packages/f6/39/c914445c321a845097ce4f6ac7de9a18228a77b766272125a1ce00d851eb/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:898f0e9068ca27d37f8e83a5b962821df851532e6c4a7d615c1c033f9da6eedf", size = 225157, upload-time = "2026-07-07T14:34:09.061Z" }, + { url = "https://files.pythonhosted.org/packages/9b/f2/c0d4b8508565a36bc5c624e88ed297f5b0b1095011034d7f5b83a69908b5/charset_normalizer-3.4.9-cp314-cp314-win32.whl", hash = "sha256:c1c948747b03be832dceed96ca815cef7360de9aa19d37c730f8e3f6101aca48", size = 151095, upload-time = "2026-07-07T14:34:10.901Z" }, + { url = "https://files.pythonhosted.org/packages/49/fd/a1d26144398c67486422a72bf5812cda22cb4ccfcd95a290fb41ceb4b8e2/charset_normalizer-3.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:16b65ea0f2465b6fb52aa22de5eca612aa964ddfec00a912e26f4656cbef890b", size = 162796, upload-time = "2026-07-07T14:34:12.47Z" }, + { url = "https://files.pythonhosted.org/packages/20/95/d75e82f8ce9fd323ebf059c16c9aadefb22a1ecde13b7840b35835e4886c/charset_normalizer-3.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:40a126142a56b2dfc0aacbad1de8310cbf60da7656db0e6b16eebd48e3e93519", size = 153334, upload-time = "2026-07-07T14:34:14.044Z" }, + { url = "https://files.pythonhosted.org/packages/00/5e/17398df3a139985ba9d11ed072531986f408c8fca952835ef1ab1820c02b/charset_normalizer-3.4.9-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:609b3ba8fcc0fb5ab7af00719d0fb6ad0cb518e48e7712d12fd68f1327951198", size = 338848, upload-time = "2026-07-07T14:34:15.688Z" }, + { url = "https://files.pythonhosted.org/packages/cd/91/7253a32e86b7e1d1239b1b36ba6dd0f021a21107ab33054b53119cc083b9/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51447e9aa2684679af07ca5021c3db526e0284347ebf4ffcec1154c3350cfe32", size = 223022, upload-time = "2026-07-07T14:34:17.248Z" }, + { url = "https://files.pythonhosted.org/packages/cb/32/2e64bd2be10e89c61e57ebe6a93fd98ae88eb7ebe414b5121f22c96c69eb/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cc1b0fff8ead343dae06305f954eb8468ba0ec1a97881f42489d198e4ce3c632", size = 241590, upload-time = "2026-07-07T14:34:18.813Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ef/d96ec496cfea0c21db43b0ad03891308b02388d054cc902cf0e5a1ad6a88/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa36ec09ef71d158186bc79e359ff5fdd6e7996fe8ab638f00d6b93139ba4fcf", size = 239584, upload-time = "2026-07-07T14:34:20.52Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ce/9af95f7876194bd7a14e3dfe4a4de2e0bff02666a3910d72beafd06cc297/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df115d4d83168fdf2cae48ef1ff6d1cb4c466364e30861b37121de0f3bf1b990", size = 230224, upload-time = "2026-07-07T14:34:22.189Z" }, + { url = "https://files.pythonhosted.org/packages/52/94/af74dde74a3996bd959c350709bfe50e297823d70a8c1cbd54b838880863/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f86c6358749bd4fda175388691e3ba8c46e24c5347d0afd20f9b7edfc9faf07d", size = 212667, upload-time = "2026-07-07T14:34:23.857Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f0/f1c4fe746c395922961b5916ed1d7d6e7d4c84851d19ed43cc89980ec953/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:32286a2c8d167e897177b673176c1e3e00d4057caf5d2b64eef9a3666b03018e", size = 227179, upload-time = "2026-07-07T14:34:25.586Z" }, + { url = "https://files.pythonhosted.org/packages/e4/56/6c745619ac397e8871e2bcd3cea1eec86b877488f33888b3aef5c3ed506e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:83aed2c10721ddd90f68140685391b50811a880af20654c59af6b6c66c40513c", size = 225372, upload-time = "2026-07-07T14:34:27.212Z" }, + { url = "https://files.pythonhosted.org/packages/78/ad/98aae8630ac71f16711968e38a5acfecce41b778bf2f0312851020f565a8/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cd6c3d4b783c556fa00bf540854e42f135e2f256abd29669fcd0da0f2dec79c2", size = 215222, upload-time = "2026-07-07T14:34:28.774Z" }, + { url = "https://files.pythonhosted.org/packages/f7/40/9593d54209765207a7f11073c06494c1721e4ca4a0a426c597679bf7f91e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ee2f2a527e3c1a6e6411eb4209642e138b544a2d72fe5d0d76daf77b24063534", size = 231958, upload-time = "2026-07-07T14:34:30.345Z" }, + { url = "https://files.pythonhosted.org/packages/b1/27/693ee5e8a18191eb38647360c51cd505013e2bd3b366aa43fd5344c21e3c/charset_normalizer-3.4.9-cp314-cp314t-win32.whl", hash = "sha256:0d861473f743244d349b50f850d10eb87aeb22bbdcc8e64f79273c94af5a8226", size = 155580, upload-time = "2026-07-07T14:34:31.884Z" }, + { url = "https://files.pythonhosted.org/packages/80/3f/bd97d3d9c613013d07cb7733d299385b41df37f0471310f5a73dc359f0b8/charset_normalizer-3.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:9b8e0f3107e2200b76f6054de99016eac3ee6762713587b36baaa7e4bd2ae177", size = 167620, upload-time = "2026-07-07T14:34:33.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/c6/eee9dca4439b1061f76373f06ea855678cc4a64c1c3c90b50e479edbb8eb/charset_normalizer-3.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:19ac87f93086ce37b86e098888555c4b4bc48102279bae3350098c0ed664b501", size = 158037, upload-time = "2026-07-07T14:34:35.018Z" }, + { url = "https://files.pythonhosted.org/packages/98/2b/f97f1c193fb855c345d678f5077d6926034db0722df74c8f057020e05a25/charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5", size = 64538, upload-time = "2026-07-07T14:34:56.993Z" }, ] [[package]] name = "click" -version = "8.4.1" +version = "8.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007 } +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639 }, + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, ] [[package]] name = "cloudpickle" version = "3.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330 } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228 }, + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, ] [[package]] name = "code-meters" version = "0.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129 } +sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129, upload-time = "2024-02-23T15:50:40.138Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801 }, + { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801, upload-time = "2024-02-23T15:50:38.443Z" }, ] [[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 = "dask" -version = "2026.3.0" +version = "2026.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -387,9 +395,9 @@ dependencies = [ { name = "pyyaml" }, { name = "toolz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/2a/5d8cc1579590af86576dde890254440e478c7174b93a02095ecfc2e6ba38/dask-2026.3.0.tar.gz", hash = "sha256:f7d96c8274e8a900d217c1ff6ea8d1bbf0b4c2c21e74a409644498d925eb8f85", size = 11000710 } +sdist = { url = "https://files.pythonhosted.org/packages/d6/39/cbd21c9133d02b4e60899ed466ad5e876553ea68ebffee6209e7dcafc8d4/dask-2026.7.1.tar.gz", hash = "sha256:5727484427665f051e86bf87d021a64d6411141cdc8a20bfe3c1ad2968cc06b7", size = 11548794, upload-time = "2026-07-14T01:06:22.46Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630 }, + { url = "https://files.pythonhosted.org/packages/7e/5f/7c22733da92b3a6cc4dddcaa8731089d213c2790bbc997e51c429a4e8f8b/dask-2026.7.1-py3-none-any.whl", hash = "sha256:985ffd6c5e9d7979ede515e84ae8d39b647d6aa64f77600f15714ff65f578fe6", size = 1496882, upload-time = "2026-07-14T01:06:20.341Z" }, ] [[package]] @@ -399,20 +407,19 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788 } +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788, upload-time = "2020-04-20T14:23:38.738Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" }, ] [[package]] name = "earthkit-data" -version = "0.19.0" +version = "0.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cfgrib" }, { name = "dask" }, { name = "deprecation" }, - { name = "earthkit-meteo" }, { name = "earthkit-utils" }, { name = "eccodes" }, { name = "entrypoints" }, @@ -422,20 +429,19 @@ dependencies = [ { name = "lru-dict" }, { name = "markdown" }, { name = "multiurl" }, - { name = "netcdf4", version = "1.7.3", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and platform_machine != 'ARM64') or (python_full_version >= '3.14' and sys_platform != 'win32') or (platform_machine == 'ARM64' and sys_platform == 'win32')" }, - { name = "netcdf4", version = "1.7.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.14' and platform_machine != 'ARM64') or (python_full_version < '3.14' and sys_platform != 'win32')" }, + { name = "netcdf4", version = "1.7.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, + { name = "netcdf4", version = "1.7.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pandas", version = "3.0.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, + { name = "pandas", version = "3.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pdbufr" }, { name = "pyyaml" }, { name = "tqdm" }, { name = "xarray", version = "2025.6.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "xarray", version = "2026.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "xarray", version = "2026.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/5a/8bb64690a3e920a39ec45c031dde104a3de0ebb86c24376e98cf332ecb9a/earthkit_data-0.19.0.tar.gz", hash = "sha256:2dedfc97a207b28c752ba0ed754313485b46adc40d244062504efb808267c58a", size = 5653925 } +sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819, upload-time = "2026-05-13T12:22:44.707Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/b7/e6b466edd0438b9e3d875a98d0aeb2cdf89acbfd4eaaf5906d2456341e2c/earthkit_data-0.19.0-py3-none-any.whl", hash = "sha256:3697238beeeec94209ecb86ac133bdd6c3f66dad734955edd3c0fd07bc5875e1", size = 396017 }, + { url = "https://files.pythonhosted.org/packages/b9/d3/a00aeee76005909eaa1f7fcb1e1f2333d9f4b53866666e1bb7f9e9e15148/earthkit_data-0.20.0-py3-none-any.whl", hash = "sha256:e1df4d93354bb5bd30b967ad17d52454b4df4d6a37511fc91f950aebba592056", size = 398525, upload-time = "2026-05-13T12:22:43.362Z" }, ] [package.optional-dependencies] @@ -448,32 +454,31 @@ mars = [ [[package]] name = "earthkit-meteo" -version = "1.0.0rc1" +version = "0.6.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "deprecation" }, { name = "earthkit-utils" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/43/b7/cd2e4ad0b4cde4882c975e46e9c9137479f065a6048088b043bd7d8b2f0b/earthkit_meteo-1.0.0rc1.tar.gz", hash = "sha256:ff35895a7cf7b08cb62ebc6a5615daa23663018e598e4dfec42b0786eceee13d", size = 563291 } +sdist = { url = "https://files.pythonhosted.org/packages/14/87/162771cba3c4371e054914750164851e32bafe924c674153105789f01c88/earthkit_meteo-0.6.2.tar.gz", hash = "sha256:2823ed56947dd2c9c69aae6fe19153eec393c80392126ab84cc760419d0b952b", size = 370304, upload-time = "2026-03-31T09:40:37.609Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/74/b7/7a8f21ecf6a05e60ca42f9137b6fecbe18e754ef7ae0a9a56c0cccd3ca91/earthkit_meteo-1.0.0rc1-py3-none-any.whl", hash = "sha256:c3bfda41be59601fa983caab42a926f40401114f064a82b16838c3a9081f734f", size = 143491 }, + { url = "https://files.pythonhosted.org/packages/86/d3/988c1807b315a71cb4f6e5b2b739b115246083dc678b50fa9ff97c8a417a/earthkit_meteo-0.6.2-py3-none-any.whl", hash = "sha256:7380464a3a62422d4027bcfc20fbd4ee3a7bfc51eb1f89d1a5027f24c7f32a4d", size = 57004, upload-time = "2026-03-31T09:40:36.633Z" }, ] [[package]] name = "earthkit-utils" -version = "1.0.0rc2" +version = "0.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "array-api-compat" }, { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/92/34/3990e052aedf76798dcf5748a9a0660bd15e318364342543b24205045c5c/earthkit_utils-1.0.0rc2.tar.gz", hash = "sha256:930f19e29116f0874d943f91b6a129ec9d1884453bfdd613b5de4765658c8379", size = 49127 } +sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013, upload-time = "2026-03-24T14:57:10.184Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b6/7a/991138f45fda8ae689a9a370bbf59b4ee2e040dfd124196ce82d1862aef2/earthkit_utils-1.0.0rc2-py3-none-any.whl", hash = "sha256:b5cd40ebe7817fed55d5844a35347ea4d879181fedcb492e738b613c4afa1b24", size = 37699 }, + { url = "https://files.pythonhosted.org/packages/eb/cb/0c9f59b0ca2a5ed941b65c52a4a005a7e16511f52fc3965eb45c53565b76/earthkit_utils-0.3.0-py3-none-any.whl", hash = "sha256:167e0385e062800d6c9f2d25a2a3075d7d91b67c3a02af52d772175b2313aa89", size = 35650, upload-time = "2026-03-24T14:57:08.869Z" }, ] [[package]] @@ -486,91 +491,123 @@ dependencies = [ { name = "findlibs" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378 } +sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378, upload-time = "2026-04-22T11:30:08.465Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/fe/63f915171413efeaaa9d1ba613aeabdc3f8cdba603f72842a7fcb1b011ee/eccodes-2.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:3a7438b259188821a5b05e5dd814f83924936ff9fe0897f6a157506fcaea9baf", size = 7435926 }, - { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928 }, - { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009 }, - { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001 }, - { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567 }, + { url = "https://files.pythonhosted.org/packages/e9/fe/63f915171413efeaaa9d1ba613aeabdc3f8cdba603f72842a7fcb1b011ee/eccodes-2.47.0-cp310-cp310-win_amd64.whl", hash = "sha256:3a7438b259188821a5b05e5dd814f83924936ff9fe0897f6a157506fcaea9baf", size = 7435926, upload-time = "2026-04-22T11:29:34.399Z" }, + { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928, upload-time = "2026-04-22T11:29:40.702Z" }, + { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009, upload-time = "2026-04-22T11:29:36.343Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001, upload-time = "2026-04-22T11:29:36.596Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567, upload-time = "2026-04-22T11:30:06.789Z" }, ] [[package]] name = "eccodeslib" -version = "2.46.1.14" +version = "2.48.0.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/2c/eee500fc9a209f9b2d7a3074f634ffa2aa4eeacbbc61ebfcb81260053a7c/eccodeslib-2.48.0.26-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:378274c902f03c25ee24de9bf316edbf45c2b25cc41367d2ecffa364e00a3e69", size = 9097235, upload-time = "2026-07-17T13:32:32.423Z" }, + { url = "https://files.pythonhosted.org/packages/c7/ec/b19201c152bbbb95b718e16e8a501a0455edc7ba18bb78c107f2309445ed/eccodeslib-2.48.0.26-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b18b0c8d220307bf11d01df91eb1b2eaef373f2025550572c5343c0ca6270337", size = 8911890, upload-time = "2026-07-17T14:05:20.392Z" }, + { url = "https://files.pythonhosted.org/packages/bd/75/0eb0792f718e41ed7b4febdaa000d752382363778c8eb684a2e3d1cb3bb1/eccodeslib-2.48.0.26-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:e099c5479467aec6bd3aee871a36f548735047bcd95961df7b8128818dbfd160", size = 9303574, upload-time = "2026-07-17T13:16:38.111Z" }, + { url = "https://files.pythonhosted.org/packages/63/fe/bcef51e39927536fca70c5ee001fe0762515b199f3a0ea9c2a0d08b7d638/eccodeslib-2.48.0.26-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:2862fb994399451d067164dd6895a4461bd04614c1700e89817b048e38430dbc", size = 9092981, upload-time = "2026-07-17T13:39:50.92Z" }, + { url = "https://files.pythonhosted.org/packages/88/a9/670a1e84381324c167b339a130e22f50a18528b9d7d09cfbd4e88aa1a7b2/eccodeslib-2.48.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:8a9bfdf8a7d081c108150c769a0fdb349d917ea1333fcf627460505ce594765a", size = 9097184, upload-time = "2026-07-17T13:27:21.841Z" }, + { url = "https://files.pythonhosted.org/packages/6d/03/bccf65f813ffe9094b7acc4c8ac861130844778de0bb030dee95c28e1578/eccodeslib-2.48.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6567970b2c6cb1dcf31741ff515153aa684f317d913a7cd6659fb85ab9dd5696", size = 8911899, upload-time = "2026-07-17T13:23:40.789Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d4/d57cbf1e278a36aae33fff842a060ff8763e7da58b5ab03daa7037d0691e/eccodeslib-2.48.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:daa351d56a2539601e48d2b57db33aa5dbfe506fa8cc9b778aeab50450f749b4", size = 9303576, upload-time = "2026-07-17T13:16:42.531Z" }, + { url = "https://files.pythonhosted.org/packages/48/af/32011bf877fc14043d618d87ad4e95537b552c5da06fe74834f494f897a7/eccodeslib-2.48.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:56b632e229afdd0c7d5a5906f12be55c18fccc4974f276252da5efde76f4c278", size = 9092983, upload-time = "2026-07-17T13:32:39.84Z" }, + { url = "https://files.pythonhosted.org/packages/40/58/bc1aacba6ba814c56f4c4d55ab825cc01ef27e545c6d8e1d194a49e72f2f/eccodeslib-2.48.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:ead5acb5214fb79a4d9d1f3aebec67defa1f7f18088fcf38fed968d66be60e65", size = 9097221, upload-time = "2026-07-17T13:59:24.485Z" }, + { url = "https://files.pythonhosted.org/packages/20/2c/8d64cc3899a48c7edb2fc5119fd57c957bae8e36fc3113f0cbc9fa4a5b64/eccodeslib-2.48.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:78c2e9b4b86648806ebe9b300329696222f43930f2aaccdaf048292b594981ae", size = 8911920, upload-time = "2026-07-17T13:46:44.763Z" }, + { url = "https://files.pythonhosted.org/packages/7f/9e/1700cd553d6bcec8fd519aa473ad67402cdb94d73123293aa97f7e924cca/eccodeslib-2.48.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a4908810573a15d969a1ccaed815445482874101dc6707a54394eda6ad96610b", size = 9303577, upload-time = "2026-07-17T13:17:01.157Z" }, + { url = "https://files.pythonhosted.org/packages/4e/85/6c2bf17daa7de0207f550922c59c4e1f9267277636edbe46ce8287fdd4bc/eccodeslib-2.48.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5892ef7bac9a1ecc2b4d4cd7e3d6bd2b31581f41b82c0e7a04dfa87b572369fa", size = 9092981, upload-time = "2026-07-17T13:31:46.775Z" }, + { url = "https://files.pythonhosted.org/packages/31/f1/f338e1a5dd5f4e9b078c37bb239a53381db35e6eb6947533535f121488b9/eccodeslib-2.48.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:1abe306e41a317fa9812ac78452c485abf8fd19285d3c5177b610d17f036cf56", size = 9097177, upload-time = "2026-07-17T13:15:45.699Z" }, + { url = "https://files.pythonhosted.org/packages/44/92/df6a63dbfed66ba1feb78062e33cd20ddd67bb01231bfdeaa5c2bde74e34/eccodeslib-2.48.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:c1bc7b1a3675ac876be208f2b11ff35709d83b6a462ff18239d295c9d4d5fec1", size = 8911903, upload-time = "2026-07-17T13:43:35.098Z" }, + { url = "https://files.pythonhosted.org/packages/2d/ec/99267a6e10af2999255fc7492330b11a0c407e45a918d932d365c5e04a18/eccodeslib-2.48.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:a1427aa201114b0b586606facb25ae8b65e4292b5ce883c8d880556c1390f893", size = 9303577, upload-time = "2026-07-17T13:16:51.708Z" }, + { url = "https://files.pythonhosted.org/packages/1a/13/15ee59c9c0066768abc73ce22b401a507c1d8582132805911a2f89679f0f/eccodeslib-2.48.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:b833ed9900d348b04ffe7a1b8acaa5b12851da07ddd854966f03d4b3d105ea44", size = 9092982, upload-time = "2026-07-17T13:29:02.352Z" }, + { url = "https://files.pythonhosted.org/packages/70/7a/27420329eb9fc11abaecd3a0ef375c1a709bfa24bf785b6d604484a8c7e7/eccodeslib-2.48.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:27a3cc3d711dfa49968c61d7098e16f8ee939c1f3b2942892aebbffddd00c48d", size = 9097231, upload-time = "2026-07-17T13:58:56.049Z" }, + { url = "https://files.pythonhosted.org/packages/34/5c/d07302687852b166be933ad99f7941845b16f90b2e1ca0ee08f7efe9b1fb/eccodeslib-2.48.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:bac6340aaecfd0cb21b8eae7b957f009c25912d468284c9821567edcaed950bc", size = 8911895, upload-time = "2026-07-17T13:21:52.004Z" }, + { url = "https://files.pythonhosted.org/packages/f3/76/1b86868da7e9ffc563d54c4a8c874278ec686bbd551904a3c02b712ee3ad/eccodeslib-2.48.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:3e18afbb2e3bb51288845401f1d37f93f4927389a0276ab2c0496fd099595ee0", size = 9303576, upload-time = "2026-07-17T13:17:27.668Z" }, + { url = "https://files.pythonhosted.org/packages/86/5f/21e45a69b772d36b8aa6ddd02414c813c8e9420e56e3ead5070d1e7121f5/eccodeslib-2.48.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:b8806183d2d633f761e67bb33e430b8d2b5b1324439c8aa5581ee2b1a244dc73", size = 9092982, upload-time = "2026-07-17T13:29:50.111Z" }, +] + +[[package]] +name = "eckit" +version = "2.1.1.26" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eckitlib" }, - { name = "fckitlib" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/92/5c0001645fad7c7b30e1d71d9db783ab41065810c65cef233cb2ee02e754/eccodeslib-2.46.1.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:81860e81b4de6aff48dae0a4ff6b3faf76ed9c6c17a8b4eeb23f36ef0af1a6be", size = 8564340 }, - { url = "https://files.pythonhosted.org/packages/c7/60/b9461620eec665aab7beb87c00163bc6030aed74630b26d1854293dcf96f/eccodeslib-2.46.1.14-cp310-cp310-macosx_26_0_arm64.whl", hash = "sha256:80b2e0de8c548200360e943770e063dc2af037851363d35b56eababb33d56b7d", size = 8786927 }, - { url = "https://files.pythonhosted.org/packages/ba/36/40128198732557ada92d80f6aca67df89f7060d3f35aacc70288c380aef9/eccodeslib-2.46.1.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:398a70f03331765cff5e218385c771eda135b00a2fb64d0455b8853b59ec2197", size = 9094950 }, - { url = "https://files.pythonhosted.org/packages/90/89/452090f106e36209c5b2389061601fd8d75063aad124a2ba7c0de9b732da/eccodeslib-2.46.1.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c15dae792c3eda2f0e34671843390ab73b2a79ecef42fbae0858ea12532db8df", size = 8988207 }, - { url = "https://files.pythonhosted.org/packages/76/88/96856412b80ea8c48ac4cbbf07804514d1ea07527c9174cb8111667a1044/eccodeslib-2.46.1.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:3d838b99ff56cc69c3d67d169a92eb9fdea5e5033b47834a74fb897b0cd2f625", size = 8566303 }, - { url = "https://files.pythonhosted.org/packages/df/5c/6365087881ab9a41ea877f4dd9fdcc793bbdda9f82ffc68d48e533acd140/eccodeslib-2.46.1.14-cp311-cp311-macosx_26_0_arm64.whl", hash = "sha256:e9c241cbb67e4f1ef892cf56b5f21e94118c6e52abcdfc94f25788d1e6afa4a2", size = 8786929 }, - { url = "https://files.pythonhosted.org/packages/1c/b9/b9444809638c21e597adf03fe518a98513d4c2e941e69ad6a19cfa619463/eccodeslib-2.46.1.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dcee0e76b5e0f4fde375bdd0081d348c2d5693e8ca5beb6b2b6c6e72df9a3188", size = 9094949 }, - { url = "https://files.pythonhosted.org/packages/29/15/c45fe0530091749f0b4d23934ece4a6aa0ec5ecb083134e7f2fbe74f5519/eccodeslib-2.46.1.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:488744413bfebf7fefb16e40fae329da0a3c8c463b10a8e52c4ceef68e154018", size = 8988206 }, - { url = "https://files.pythonhosted.org/packages/c2/86/27cc92c8aee5f831561848597055b3cd509137667d555f5bbbfaaa517104/eccodeslib-2.46.1.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:fa05fd52a3f9818f376a6e607fd4cb504243f5b2c94ae636f9dddd771037dca2", size = 8564335 }, - { url = "https://files.pythonhosted.org/packages/0d/56/5aed84d605b8e20a8253e7881a0dad42dc1ae7e808804677dd1146c8eb51/eccodeslib-2.46.1.14-cp312-cp312-macosx_26_0_arm64.whl", hash = "sha256:2ffacf76be77557ed21477bfdaf7a319994dd1134d153ab5e61c9cd6970e4b28", size = 8786929 }, - { url = "https://files.pythonhosted.org/packages/14/2a/2a0003b98f58fbd9b90b99fb3052a0e78c6e8ec568b28b413f658b78c745/eccodeslib-2.46.1.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:20da80375e2040fc13937dd7210844f6a7588f601a8abd90cdc236eb66da4338", size = 9094947 }, - { url = "https://files.pythonhosted.org/packages/c0/5e/6b3c178e2dc9d1abde0defe2afc9bc026e36e4f7d92c9fe7e5af2dd90c1f/eccodeslib-2.46.1.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:dd4a6e3c2436220174ceaee94368ac1030864720d05771791ca034f06e1ce1b8", size = 8988206 }, - { url = "https://files.pythonhosted.org/packages/9a/07/fb376b66350effca2bf1d9682f57a5856086bc83e00274b288c69f883d08/eccodeslib-2.46.1.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:f8320e8f08c858b449651af13374408d021e5224d00226e0576a9f90e347cd37", size = 8564343 }, - { url = "https://files.pythonhosted.org/packages/1a/04/ca6af458911a06548005d78f9479448bd98345f607d2b0ecd3ecb41e9360/eccodeslib-2.46.1.14-cp313-cp313-macosx_26_0_arm64.whl", hash = "sha256:dbc61471bbda03fa8070da8ac4d90faedbaf6259c3ffe4e38a63dbfb2d04c744", size = 8786927 }, - { url = "https://files.pythonhosted.org/packages/3e/1d/4a773492e697c3216a639c71b8a6917ed35018e1501ea2f1e67bd40b1fd1/eccodeslib-2.46.1.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c7e271d71ce51b45605df9553fea0d13fa9606b2c1f52d8a99771c76756fbd84", size = 9094949 }, - { url = "https://files.pythonhosted.org/packages/c1/4f/1acfe4b86eb28b886f92b6c342ebe70ab9b98f49e3e8951dab88e127a2e7/eccodeslib-2.46.1.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:b144d6c09de994fe9b38c672c8839ca9703f3fb91bbe59dfeb3e3dc6e519062c", size = 8988208 }, - { url = "https://files.pythonhosted.org/packages/da/36/b2534e892486526a9f73cfa1e10fdd248ca61eb9b7c559d4a9ac6b34f224/eccodeslib-2.46.1.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:52fa0eb9ef513cc0d2bcf7716aad6e19214efd5b05b322b4992193b0bdcecdd8", size = 8566303 }, - { url = "https://files.pythonhosted.org/packages/b0/f3/97d500dfc0b0c8eb6943c3858ec0674816a2b35feb0ad82064fbe7517bae/eccodeslib-2.46.1.14-cp314-cp314-macosx_26_0_arm64.whl", hash = "sha256:1c705dae0e10db95e0e7e4b7704662de10082a6fe3bd3d5361eb991a7c03fc25", size = 8786928 }, - { url = "https://files.pythonhosted.org/packages/e9/d4/890408cf7b2cb066c513cee43098c7b18d5c261feed4ca55030be59f4dce/eccodeslib-2.46.1.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:60f761bdbccdb4430844b8bb2f27b7ddf46f64eeac7af5c9958b6504daea2308", size = 9094948 }, - { url = "https://files.pythonhosted.org/packages/21/f2/14af7d1f9b6e929ef4d9ba1ef18d35cc3774a38b0f42f72480caec9dd0c0/eccodeslib-2.46.1.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:a38f185eeb8dd98b11bd9643daa6a75f3ba887c94b62fe4a10a4048795bdbbb0", size = 8988209 }, + { name = "findlibs" }, + { name = "pyyaml" }, + { name = "requests" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/44/d966c993cb8ca831f595daff15844b48c2452357c5ec958983a3146f78bc/eckit-2.1.1.26-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:6b18f694264df5e4172a11db1a900e2cbb119633b3675445118b27ede1fe470e", size = 63122, upload-time = "2026-07-17T13:32:34.989Z" }, + { url = "https://files.pythonhosted.org/packages/cc/e0/f506a376999df226b26a211e060f4fc06e20fe1f0f4222208a8c9358b57c/eckit-2.1.1.26-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:168812739c48ff6a912470ca8ac1af175758fecfc5f1c3a0c9e709244001de98", size = 61807, upload-time = "2026-07-17T14:05:23.477Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b2/696a0a738b3948ec6c1a7df6cac6d7e6d9fd8c62a212ed86f4f6c2503466/eckit-2.1.1.26-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:2c1ae23a15d2be12ec585a512fa193bf692b1d2edc8166de3603fa3e83ea3cc8", size = 68008, upload-time = "2026-07-17T13:16:40.558Z" }, + { url = "https://files.pythonhosted.org/packages/bb/03/65c76ab853a7a0ac3b448b4cdeda27aac5eb3c3af62aa8c8c0c8722e46d1/eckit-2.1.1.26-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:06afce2e2b7e59f68508d3a467dfb03b1da30818acbd8548f186e99f08905c79", size = 67418, upload-time = "2026-07-17T13:39:54.319Z" }, + { url = "https://files.pythonhosted.org/packages/cc/8b/54d3275f712799ee4c95da7abe5a02325775c8b67ecb2bd2e1afffa07f0d/eckit-2.1.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:910ea47a3107f3d6626b5a1f835309a70e67eda36efa1aeded4a977d6ac8abe2", size = 62992, upload-time = "2026-07-17T13:27:24.579Z" }, + { url = "https://files.pythonhosted.org/packages/d6/cf/77895689aac55cc586d60611b5eca028d9476af68f7b33cd03dacc99a3e8/eckit-2.1.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:58a4f85f88217b2df20fe066bcc87c54b3c2f54babec21e3c9cad9c6de48528d", size = 61831, upload-time = "2026-07-17T13:23:43.702Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f0/0fea63b4f4c57875dcb6ae20b84c0a692a506f0e9ec449965cf63a5e2682/eckit-2.1.1.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e6e8f2cc7b160b7d773874dccf27124e4d7419acfac3b8688299f2789fc5a121", size = 68050, upload-time = "2026-07-17T13:16:45.248Z" }, + { url = "https://files.pythonhosted.org/packages/62/ba/18c9b0474fe6dafb96508eaa04613117ae82cf0a072563b09062f39ee6c5/eckit-2.1.1.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:29041c5f13bbe8a90b18ed036b10fa7ce099b481ce342b8e7e5a04c88c049831", size = 67399, upload-time = "2026-07-17T13:32:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/0a/94/7bdae5e7e8be76f938e12deeaf3fef837e94c687a1285c3381af19d01f16/eckit-2.1.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:3e7c74b8b56c91aea77d8a2abfeec8efbd7460fcf56508fbf0de25accf02b220", size = 63637, upload-time = "2026-07-17T13:59:27.159Z" }, + { url = "https://files.pythonhosted.org/packages/2d/a6/b1efb232ace93a76d3edebd2f550ee2ad617a18566aea08e4814dba1a938/eckit-2.1.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:8051f71fdb1a3f06fbaf35d37759585084e39253d2516f00223dc101196373c9", size = 63246, upload-time = "2026-07-17T13:46:47.62Z" }, + { url = "https://files.pythonhosted.org/packages/29/99/e135036fc2b22ff34b0861feed3aa4a276225aa29e27a6bcd8e21813a6ea/eckit-2.1.1.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:b5a608dbe0daa77b6d9eeedbf3f34bdb2e6540889c3378c8b55e7b875f9ff2a8", size = 69763, upload-time = "2026-07-17T13:17:03.657Z" }, + { url = "https://files.pythonhosted.org/packages/c0/55/091fdb2595adeff082bca2c45399e6447ea406d3108b38d65572e319204f/eckit-2.1.1.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0fac5c046d8d19f740fda32fcc2a3e823c79c04785037cde96ea0029405542a1", size = 69504, upload-time = "2026-07-17T13:31:50.338Z" }, + { url = "https://files.pythonhosted.org/packages/d9/cd/1327f37d0ba8045e802783d927df95c249795670de0f4fb908f73a268102/eckit-2.1.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:496e5b1d1f50f661514bf8d24cd084ad7047a1642a96f267986858c7254fc291", size = 63221, upload-time = "2026-07-17T13:15:48.354Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/27675d9fee56ca15590928dc7af01c2a923a89f51f3fd30f81d65db8e816/eckit-2.1.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:e4f7977913568a072ffa0a4323af80114ad7d9602e02bc48765e0b2e74d592ca", size = 62735, upload-time = "2026-07-17T13:43:38.111Z" }, + { url = "https://files.pythonhosted.org/packages/53/32/4b632c06c66aadbb72c7a156caffad5a473372d0ddda237a2770850ffea7/eckit-2.1.1.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:8677888e08fefb77bc39ff341b72a8af23a000492a42539100b341ad06e588a2", size = 69619, upload-time = "2026-07-17T13:16:54.057Z" }, + { url = "https://files.pythonhosted.org/packages/b0/02/089acb47f7cd81c9c987d8381468680fda4fb2995dc3d901a7ad971e48be/eckit-2.1.1.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:cc6f026210a9770e687a13cbbf814a257fcd9eba4d7f838580da632da4d06f1c", size = 69403, upload-time = "2026-07-17T13:29:05.858Z" }, + { url = "https://files.pythonhosted.org/packages/70/5f/7b87b4cb80faa54ea2ad77b115f0f4ea6f4fd2f5e11c40d0686211d6d53b/eckit-2.1.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:3089b3d10b6a28aad9b4aa9257ce33f557c5f60364898259e2a767608c3a903a", size = 63809, upload-time = "2026-07-17T13:58:58.841Z" }, + { url = "https://files.pythonhosted.org/packages/b0/72/ae233e124d26d6e5a9d9ecd9109c733e391258493dae07decc56cc462c09/eckit-2.1.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:78ed306c776335d1ee058cf1731e4f990b4e5f035165f426031bcb10ca638b83", size = 63076, upload-time = "2026-07-17T13:21:54.71Z" }, + { url = "https://files.pythonhosted.org/packages/23/ed/424f979692165c2222a61860b92ec902cafb66e1dc2f6ca97a5d00deb1ff/eckit-2.1.1.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:68759b5f36d9ed4385da44545b56d9b9474c18198d2acb3d22de1402f3ab706c", size = 70033, upload-time = "2026-07-17T13:17:30.041Z" }, + { url = "https://files.pythonhosted.org/packages/ea/15/3dad7376ee431aa054fd8db57ba2d2e0576297c2a366541ed4222902c60e/eckit-2.1.1.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:30ea4747e66007dffe79ba4302ddce462945ba98a76563722ce8d054b368255d", size = 69636, upload-time = "2026-07-17T13:29:53.606Z" }, ] [[package]] name = "eckitlib" -version = "2.0.3.14" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/f9/b5d6ebece51580dcaf9c81c8738343fc4d8619da0eb51ef44a994f5d265f/eckitlib-2.0.3.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:b1aa4c392d58486b5e803c6a5567468d3eee831e189f7966bfd251fa0d686312", size = 2471572 }, - { url = "https://files.pythonhosted.org/packages/de/a4/8a06a9b9c12ebbe34e67c3ba6e3648f49f7de60bc7af387e92864273fc8e/eckitlib-2.0.3.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:7312f4de97bc72ecc067d1eef237ca04c88e3fc4f7293ac5441e6b21182f1b15", size = 2601516 }, - { url = "https://files.pythonhosted.org/packages/ef/0e/b4a6bd3b5cf85c3db8e4e6f2125d6e3449c3a34a0eeb255cc7af3e1eabc4/eckitlib-2.0.3.14-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:720bb64519bb3df50453a9366812e95b2797c29cd7b3aa0443d813a9d3e2f341", size = 7030616 }, - { url = "https://files.pythonhosted.org/packages/4e/6d/4bd33784cfc8debf50a72f804e6b151f1bea816d7597e0c759f3e811e919/eckitlib-2.0.3.14-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:398572e7462b63ac26bafd58417cbdfa6488bb4d31993367c884558840898eec", size = 7159448 }, - { url = "https://files.pythonhosted.org/packages/de/ef/deaf9dd703ad85127068d9e92e9db9333a7d4fa7dba5c8b3a917a70f6296/eckitlib-2.0.3.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:7fc2b39a7f8d265235c89e3175247df4286d0f680330de82e71a869ae0f5f508", size = 2471571 }, - { url = "https://files.pythonhosted.org/packages/fa/fd/93dda88d33b4ab0e8bdcef43a03b0e52a33dce4c806aaf8e850af4dd7386/eckitlib-2.0.3.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:1426fdb3b0f7129d8b3e87ac579a1c202d08bc77467a50a51e909c647cd9a6e7", size = 2601513 }, - { url = "https://files.pythonhosted.org/packages/d5/0d/1276c7b1cbc8f9685869c812c41176dd6fbc2fb8ad999f4a6e7c05349a04/eckitlib-2.0.3.14-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f02fbc99b691ec1027cc67ee14bb7a4fbf5124ae23e5273f897fd1528e7d2723", size = 7030610 }, - { url = "https://files.pythonhosted.org/packages/51/21/5c8bf23d5395da8398764c1cf4dec4465f04c1d8bd314b09ae11db890a1c/eckitlib-2.0.3.14-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:629e9dd662645a8dd5ec666127ddf6076c6bf750ade11f949746831f35674d11", size = 7159451 }, - { url = "https://files.pythonhosted.org/packages/a1/4e/ef3e03f994f2bcd40863cb6beecb6223118665e1446c0fc2aef3fc9b8113/eckitlib-2.0.3.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:139546fd42d2d59eef75acb864677f4409b848d4f7984df54dea32121256ba4a", size = 2471572 }, - { url = "https://files.pythonhosted.org/packages/63/a6/8fde5efd70b933a2a327ed74cd65dcccefcb8b24d62d90a5531abe7b03f6/eckitlib-2.0.3.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:8916e863ca550e59b979bd4614abeaba43cf05e006915209a692c927299349df", size = 2601514 }, - { url = "https://files.pythonhosted.org/packages/75/5c/008bdfd0ca69dc0e72e6ae2afabd39a6ac1dc26bdac4d3318640325e5e33/eckitlib-2.0.3.14-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96b6c660c7531e2133cdbdd664a2d675c49f7e4ee58c2d8ff1b33ba6e8bb7fd0", size = 7030616 }, - { url = "https://files.pythonhosted.org/packages/93/dd/acac2bae00d88eab1c9a81fb8e2a0b68b4d9f97016475bd214dd06249933/eckitlib-2.0.3.14-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8064cd7940351829c27614711b140657bd63bea279ae168e12c842a2f8565dba", size = 7159454 }, - { url = "https://files.pythonhosted.org/packages/a9/9b/66a0a817a0a99c0099a76a4011067da077e58833730928cb2f5f1acdf838/eckitlib-2.0.3.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:835535e4bb91ad1c4b32cc9c004170a8cbac3237e1e2a36a275f9f77d8b585fe", size = 2471570 }, - { url = "https://files.pythonhosted.org/packages/d4/e0/336300df7710312fb7d94884a696e437060e7b7537f42f6d07264da979e8/eckitlib-2.0.3.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:c65bf980e525c2a680549c2ae38f88b899d2712ec60bc5584d45f9ce13ffcb03", size = 2601510 }, - { url = "https://files.pythonhosted.org/packages/ec/09/1d29b7fae0273924da3d7d42a9f1f69756fbce67faab6267eb89e3ea17c8/eckitlib-2.0.3.14-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7ba5d1f05e2687cac4c30697d18cdb9d2a56f2a924467502ad12a6f8a4713a8", size = 7030617 }, - { url = "https://files.pythonhosted.org/packages/ea/67/8cc77c20c534f3cc45ce202d12420e94059f780e7bb72a71387fe222653d/eckitlib-2.0.3.14-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01972207ff33f212122cc4c6eb3820c447ae7ae170a37822cd037922f063310f", size = 7159453 }, - { url = "https://files.pythonhosted.org/packages/31/29/64a4b021ea6230bfd2d3fefeae597d537739e027d98fc6da5b5d92db77a6/eckitlib-2.0.3.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:9c6d7c54c8ea12162e9f11bb6c65e8021899dbf4c24fdb861a0c0805550ec37e", size = 2471569 }, - { url = "https://files.pythonhosted.org/packages/9a/06/b73525d1b5fc8e96cbaa87a0304c2f35ab06943489016e75ee389829f9f1/eckitlib-2.0.3.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:f19d6d968feb8d0792c7db52aff27647c5f51bbe42b54c73731532af695748f6", size = 2601512 }, - { url = "https://files.pythonhosted.org/packages/db/2f/665ecea82cc9de7f640ce97ce7aa9c43ec73a526952fa5883e05a18b2b86/eckitlib-2.0.3.14-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:faac61bd535db010ab94ca181d29052157f33de1294daa3faf4f6da67835cd53", size = 7030607 }, - { url = "https://files.pythonhosted.org/packages/17/d7/b9a27fb092e9fdce50655f522a36bf80ed3ca61712bb63a9fad9a0d97d81/eckitlib-2.0.3.14-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1465ed0178b44b0e5d8e2b9a335396201a1ff815009e698fcb342b67e3d9c4cb", size = 7159451 }, +version = "2.1.1.26" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/36/b1f277335c92f1f60795c6cb1a051f25d6d1e86a1f366ea13909e086aca1/eckitlib-2.1.1.26-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:15e031ef4b80118906cb593d201ac15fa877637dabb80c9658c4d2f7f57fdaf2", size = 2486594, upload-time = "2026-07-17T13:32:37.226Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4e/72c5e4656c3cab6cbd3e414fcb6cce87432d80338b615ba6ce5f69e1272d/eckitlib-2.1.1.26-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b1013b0f922a1f52ef331939a873793797634008236f2ccf6fcfd740a9afc1d4", size = 2623451, upload-time = "2026-07-17T14:05:26.108Z" }, + { url = "https://files.pythonhosted.org/packages/5a/8e/d00c839b77f994f4ea34b892157bd9c15fe68ca2793f23fd570741934f4a/eckitlib-2.1.1.26-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31b31a3a63853998c775192bff62e9a420fe2ca4f1792c0a26e79189364ba30f", size = 7046379, upload-time = "2026-07-17T13:16:42.374Z" }, + { url = "https://files.pythonhosted.org/packages/d9/c4/4e18763e97e3b577bb71002993bbd4bdc88cd4a6704b1e64dcab0c75d606/eckitlib-2.1.1.26-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5f0422613b671d5074581d0afdc92d9ca52a2afe95bfcf1191a944f4744bd56", size = 7173541, upload-time = "2026-07-17T13:39:57.82Z" }, + { url = "https://files.pythonhosted.org/packages/e0/7f/d0734ceaecd6dc1dda92074c2dd19aa155e0e69b09eb07b04c802f1e16dd/eckitlib-2.1.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:c434f15d661b8e9cd96925560fc97bdf0692920199ba3645ae576e53f94d107d", size = 2486593, upload-time = "2026-07-17T13:27:26.805Z" }, + { url = "https://files.pythonhosted.org/packages/2e/64/c4a6346576d3cd8d7d7e42cb2f92c5d3dbeeb63e1394d6cc7c52fa7ad424/eckitlib-2.1.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:52a730578fbfec59472dce90946ea6c0e796810225a5595fac569e82095d2009", size = 2623443, upload-time = "2026-07-17T13:23:46.312Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6f/cfb50af2ca8df6879bb06acab1650adbab88dab926e652614393257e7b4c/eckitlib-2.1.1.26-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:169c3c188cbb769f2c47c382c26a4730a48b47cdd1411404f1c2ccb6b08ae487", size = 7046373, upload-time = "2026-07-17T13:16:46.875Z" }, + { url = "https://files.pythonhosted.org/packages/da/03/464ffd0681e3f93625865b011d05c6b26e60488e753558caefa11ee898b6/eckitlib-2.1.1.26-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcb2cf107b86a8757fedd26961c5c4d26458e07ef3a9e5c202ef6907465c6691", size = 7173537, upload-time = "2026-07-17T13:32:46.467Z" }, + { url = "https://files.pythonhosted.org/packages/c7/9e/c86bfda3293247f469db5271482b0e08ae2520001f918b8fd4f12bdd7065/eckitlib-2.1.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:ee0103b532e9e5dfd454d5de3616defe295d84115b8f6e5922acca1f70857dbc", size = 2486595, upload-time = "2026-07-17T13:59:29.52Z" }, + { url = "https://files.pythonhosted.org/packages/fc/0d/4e13acec84430356f69a1646b6c6d503add0703978d0ba116738675c49d6/eckitlib-2.1.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:a5caf612b4fe2322a1f594a2cb0687c2509926418f8bf9ba235736114ce6ccd1", size = 2623445, upload-time = "2026-07-17T13:46:50.23Z" }, + { url = "https://files.pythonhosted.org/packages/2c/56/13f1cf010ba2b4f0087e50f1c824f614e97b52c16914e4460db167a789ef/eckitlib-2.1.1.26-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:213e667f5533ed7ded1b30beecad3e34560ed34c92da44a9945be991d9bc2c64", size = 7046378, upload-time = "2026-07-17T13:17:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/6b/6d/cdbd51f0848cf9a4410761c666361c2c35d93635e9bfb7cbc715aa39950a/eckitlib-2.1.1.26-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d719d9580f04d37b34fa85f41d849e40b77d8b2be3e2af1d5dab5e42d25605ed", size = 7173535, upload-time = "2026-07-17T13:31:53.667Z" }, + { url = "https://files.pythonhosted.org/packages/46/7f/66e225af369c0a20d07bc5db686bb4cb63172d65d1170d4cd95be4e10d1f/eckitlib-2.1.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:11ee25ef262e23fef6478fdc26db020a388ee32c0510fa7b685f09821829471c", size = 2486593, upload-time = "2026-07-17T13:15:50.997Z" }, + { url = "https://files.pythonhosted.org/packages/bd/fa/01b51ee8cda87c75f55ecafc569d52929badfe5f4984ff179cc40e470bfd/eckitlib-2.1.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:9d7f30627c1f8b2011fb7ce55732f7ef03e815397e74dcf7e454a03978bdf818", size = 2623448, upload-time = "2026-07-17T13:43:40.798Z" }, + { url = "https://files.pythonhosted.org/packages/7d/7a/3b67fd567503318cb589c270f7b82c30084c60f50e1074c364e140a0e950/eckitlib-2.1.1.26-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfbf7bae139c156f1c2450e51f826136708b4ee55033ce6ecdd329685c330ed9", size = 7046388, upload-time = "2026-07-17T13:16:55.824Z" }, + { url = "https://files.pythonhosted.org/packages/3b/31/56e9a7c99b0cde691977f5f02e1ea78cf88c2bbddd0723bd54998e011352/eckitlib-2.1.1.26-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b432df5e6a15cec8bba24cd21c9d7823edbad2eb944b788021cfb2eec02c459b", size = 7173537, upload-time = "2026-07-17T13:29:09.289Z" }, + { url = "https://files.pythonhosted.org/packages/b2/38/da477636044d4cb8ec936a6359355b48cb674ce30e37f356ef2901a75ddf/eckitlib-2.1.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:6f0fd96207c35cb4241ed5b88b7708eea7fe6d74068ad6dc48f2486859528496", size = 2486594, upload-time = "2026-07-17T13:59:01.301Z" }, + { url = "https://files.pythonhosted.org/packages/30/dc/aaeb8766288c5ff9870757a17c3a08228cad24f4b57d95210af9e5390114/eckitlib-2.1.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:3c4ac9cd84804ed67f09ff59792e551d8f91fb7a720657c0879c230d208ce861", size = 2623446, upload-time = "2026-07-17T13:21:57.204Z" }, + { url = "https://files.pythonhosted.org/packages/47/7d/43da4ab8697bf261a19e30138907aeb4e5802f23241a42da63d603ec1cfa/eckitlib-2.1.1.26-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7423149aa3742129f0929f85a8cc4bd637841ceb581d3eb9d564dc13e729e686", size = 7046375, upload-time = "2026-07-17T13:17:31.643Z" }, + { url = "https://files.pythonhosted.org/packages/9c/61/1145f9a7d335a7836e8713917d1b7cdb9c58307f064343ee4ce8bee7a8c6/eckitlib-2.1.1.26-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e5c197940585c2c3cac6f7098830b1e6e8fda2a810977b1ede4f5677c8ea5a7", size = 7173537, upload-time = "2026-07-17T13:29:56.798Z" }, ] [[package]] name = "ecmwf-api-client" -version = "1.6.5" +version = "1.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/14/b5/837fa2daee28118c592cd003b910433894008d5a1f9e3bed9f2c3cabe34b/ecmwf_api_client-1.6.5.tar.gz", hash = "sha256:1fc0eba27163686b7fba5da027cc5dc0a361f75b652508fa7805f50599368b1c", size = 12974 } +sdist = { url = "https://files.pythonhosted.org/packages/49/a6/23179f1fd6226c42c3c7103a265ade7c020e66f45f6068ec4bf66539068a/ecmwf_api_client-1.7.0.tar.gz", hash = "sha256:1971a047c01cc50cfc893f13fdfa710cf56fb872f1c04685b13c6f1d18431164", size = 13069, upload-time = "2026-06-17T13:12:39.688Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/f3/7a5832d5fb8e16db4d1f3be58fcb2537e68ccffea1270bff8b65de7c85b5/ecmwf_api_client-1.6.5-py3-none-any.whl", hash = "sha256:82678c2c18083b44be74b23e2a7e82d2343061966c0bf3a895272b9e9a802836", size = 13495 }, + { url = "https://files.pythonhosted.org/packages/52/c3/2d9bfd9cf6a0866dedd74936633761606c005d4aeee17be2b04764e3f1da/ecmwf_api_client-1.7.0-py3-none-any.whl", hash = "sha256:3648fa1f4cb0d56274e388acaccf5500da260f12126566e0fc0a9538e46f12d1", size = 13543, upload-time = "2026-06-17T13:12:38.383Z" }, ] [[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]] @@ -580,44 +617,14 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, -] - -[[package]] -name = "fckitlib" -version = "0.14.2.14" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "eckitlib" }, -] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/47/f8dd9b942815e7cf8cced1273ef0580aa1711dbdb15d3ad09a9f3d11b28b/fckitlib-0.14.2.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:966a67230489c9050f2d5c7811650fff789ba5e9fdd31117e8bd1e22190a7a79", size = 383834 }, - { url = "https://files.pythonhosted.org/packages/15/f0/a7f8a0b749b4a82a7da6ec7c49d8c22acf0645215a2a05fc72dbfc945faa/fckitlib-0.14.2.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:731ee61ac08c4efaebc00030d09e229f341b775c35316d422e0659aae58e65d1", size = 379561 }, - { url = "https://files.pythonhosted.org/packages/a5/14/56ab8abfdfee250772d5ca63333cc0dfa312f44adfd8e63c87894f880ccf/fckitlib-0.14.2.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:21b7017eafe75f88aa5a4a54dd1475df8c4f33d688060e5fda6c9a94a9ba142c", size = 405794 }, - { url = "https://files.pythonhosted.org/packages/20/98/c855da3858f97b5cf5685e5e3be5aa101735c8006f687ff30c8e94f089d3/fckitlib-0.14.2.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3cdeabeb6bb43d44c53fe38498e74950827eb89e1660a7de7210047adea3af7f", size = 408220 }, - { url = "https://files.pythonhosted.org/packages/0d/5c/db740fb8220df04bc04194f9169e20160ed7e80fb96d03c69cb32b7ae67d/fckitlib-0.14.2.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b9eb58f527b4fcf85bf3e9cf6571b7f375b59a12fcbbaa01e4586cd46ac6b3c8", size = 383832 }, - { url = "https://files.pythonhosted.org/packages/fc/f5/7fb4b3912067bf04b7207c4c5f93e94d107f8a250c7471cf14b3af6ec456/fckitlib-0.14.2.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:aff57df419905334ce41bec1b8761d0b979a6410786bd899703fd2e648500a54", size = 379558 }, - { url = "https://files.pythonhosted.org/packages/c4/47/dba5a66989021b3548bc9f965c1cbffc7cd8359a8055b51a4c38a83035c6/fckitlib-0.14.2.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71a678b536bd07df36458b984e4ca778cdeacf66b3e7310e51652dee36536150", size = 405795 }, - { url = "https://files.pythonhosted.org/packages/c3/8d/0f64477b6ac92f82e92b11defc6d1830bc4022a4d9b5caefe3f85f444fa5/fckitlib-0.14.2.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:0d3eba1224c002022b86fdb858a9fd7fa80ca0cec7221408184ea814ca9f6258", size = 408218 }, - { url = "https://files.pythonhosted.org/packages/66/c3/2dc1a235b224e28f8c54c37eb4e4c03d116bd49183600963b19abd622eb8/fckitlib-0.14.2.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:446e296bf252c43ce58cc6f9da20cc08fac48ce3b73e975b15a91c01b3df1ed6", size = 383833 }, - { url = "https://files.pythonhosted.org/packages/f6/35/279840ebcbb9b8948e4c9fd762318e94bb9aa5c85aec4b0cff70a8c2be5e/fckitlib-0.14.2.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:1c3a75702a6517c6d4a99e1a41e37db4cb120c19ee382ce364132385a91fed5d", size = 379559 }, - { url = "https://files.pythonhosted.org/packages/8c/9d/5cf64593589fa6f90ed7b5d3a1f8d3b8c76f59a613d4bcec04c66bf890bd/fckitlib-0.14.2.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0bb6f0b7a2280a0ab33252070831be25ff1a04cc8fb258991beff70501415187", size = 405789 }, - { url = "https://files.pythonhosted.org/packages/2e/43/e6357178f147e6308a8e6a9be83afdda8fe6d96c77acbdb92018c7c3261b/fckitlib-0.14.2.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3d85ba6bb3a157bd7db646e7a1a8572b792423b309443a20b1148e112213dafa", size = 408215 }, - { url = "https://files.pythonhosted.org/packages/b7/25/f5446266cf8d44cd8e2100c705eb3c14a4a59dddb7fc3be97dbff63a8c49/fckitlib-0.14.2.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:2d15f1b652474ac0081641cd72e6081ea219125970d178877ad20103a06e7853", size = 383834 }, - { url = "https://files.pythonhosted.org/packages/6f/de/e80b8d3e1a3875d268b7d17eaf8930091248c665301b3100a97c688bb288/fckitlib-0.14.2.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:798f1757ddd57a750397d6e8146ed3c570754e492e3413eccd7714255312e7e2", size = 379561 }, - { url = "https://files.pythonhosted.org/packages/85/e5/8343c5bbf8c8aa91e9c2013fdd8e565eb995438be1ef8cb226448887061f/fckitlib-0.14.2.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:59c238c52484a546211ff7c28f3a06cb2b3f9b1c70ae1f19e9409c7fe3afa8d8", size = 405792 }, - { url = "https://files.pythonhosted.org/packages/fd/17/0c870cc45eb3ac79bf565cd02420bec56620a7a047b125a3deedf84868be/fckitlib-0.14.2.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4f1d400dd9382e2c8768477bf4a8b30710c8f22412197ab317a5041bdd243546", size = 408221 }, - { url = "https://files.pythonhosted.org/packages/7f/75/43e3b00b7384f0bd6d913711c442af7b49e9f4b6bb65a31097a2d8bba46d/fckitlib-0.14.2.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:87f26a0dbf4885e56c47cd872d2c1ea58ff82eeb6d51ff4cc6e82429353c3c25", size = 383834 }, - { url = "https://files.pythonhosted.org/packages/80/fb/15731c6ac47ed560437de2d7cf8fe9824d86506189679a5040cec1ef9c61/fckitlib-0.14.2.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:138ec4fa70b11e6109a95572466faa8eb2909ed7362f0dbd4d386f8ba1af7df3", size = 379561 }, - { url = "https://files.pythonhosted.org/packages/aa/35/8fca459b5248cee18a92f85501e9329374c239408fe080dda4d8be2feb25/fckitlib-0.14.2.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:4002848349deec62e5d420547c4a9aa3fd28a30f78f025c552d89457cfa217df", size = 405793 }, - { url = "https://files.pythonhosted.org/packages/ac/04/12c117254fee211194dba5c6a7dbb6787a645fa2d410d954022bbbd43f66/fckitlib-0.14.2.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:dfaa56721efee2649b7b87f4abb9ddc067e0cb0732eb9e709eb96b874b7440e2", size = 408219 }, + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, ] [[package]] name = "fdb5lib" -version = "5.20.1.14" +version = "5.22.0.26" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eccodeslib" }, @@ -625,44 +632,44 @@ dependencies = [ { name = "metkitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/39/00a9cf415dcb5e95849db02f42602a37e4b404ceb6b21973928fcb9f6e72/fdb5lib-5.20.1.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:4aa579e84c27a2d20cc5c4cb4d50ea4b57736df0511995ffd633b553ca812592", size = 1403406 }, - { url = "https://files.pythonhosted.org/packages/25/e5/2600babebe73cedf49106ff01d4af7acec79db4f6c3b20d380a95e999798/fdb5lib-5.20.1.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:cea55d101c848b6dd1212800ee22e39a3a6330d296f482ff0895ffe9cf87d8e9", size = 1437191 }, - { url = "https://files.pythonhosted.org/packages/63/f7/f8fbaf0b07f96580ce6475206bf5b913b804581cff1906d065d870e83c6d/fdb5lib-5.20.1.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:87dd62c1ee73d5c4a2ada3ae6082b584f8160106536153b64ace101363ae1abb", size = 1719625 }, - { url = "https://files.pythonhosted.org/packages/a8/ac/0cfcf31628925a2e1cbab6474c40da45ea74fa9f88ae05232c06407b47ca/fdb5lib-5.20.1.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:057f5693b74b0053c4ff70b58e5e04a25fd3820540dcd40cfb2af4ea55a11333", size = 1703410 }, - { url = "https://files.pythonhosted.org/packages/ad/bd/f3f71bf8db5a268fb79a2e962263bcced4846e9779767b2b0fe923528df5/fdb5lib-5.20.1.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:ebada319784e482bf7c5bdf6604edbdd0a9c101881763470d10518ff8d8f964d", size = 1403425 }, - { url = "https://files.pythonhosted.org/packages/87/7f/318fbd8574956187a6535d981f1fc2214f803af48603c16d81b65d7014ac/fdb5lib-5.20.1.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:05e0bc3188400c1dff6fc83a86ab11e906e8ed4f0da24005d8df712d389ff179", size = 1437212 }, - { url = "https://files.pythonhosted.org/packages/6a/53/26a30ccb55a96da2762a7acdf80ebd1340d9f01bde96008576b89d3f001f/fdb5lib-5.20.1.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d2e078c9061c047ceb662744b176940147db386532450f3d3930abd5399e089d", size = 1719644 }, - { url = "https://files.pythonhosted.org/packages/6d/2a/35484f69bcd20742269597c8282a58c6793ebca4bdad33cd398cd6501947/fdb5lib-5.20.1.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b172844fabbda8bdcab23b049e70bf6fae62ff35b585e43d741cb8bbef0c54b", size = 1703431 }, - { url = "https://files.pythonhosted.org/packages/65/b3/285d883d5a4a9496d7eabfec6d66ee1846b760f7a44ebb0413ab66500bb1/fdb5lib-5.20.1.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:c78ab15f3d402c9f5e226cc395b0cce135c5117a02c3500f5282203d219ee1c2", size = 1403428 }, - { url = "https://files.pythonhosted.org/packages/dc/fc/2868a622aaf3865b1f1e0e5382a73e48ecfb2eb93de2076ae8a26bc20221/fdb5lib-5.20.1.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:eab1d40a4578ee559c28d3450c326782315a5f562887dc0897781a01ff607b36", size = 1437212 }, - { url = "https://files.pythonhosted.org/packages/9d/10/a79e15a3bea96ae31fefdc8cca2911523d94fc5fe17793ff496e96cfd15f/fdb5lib-5.20.1.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:182733e32c6254d6ccaa5376ac2a3317ba137b5a74a013052c051dcb0ec8de1e", size = 1719646 }, - { url = "https://files.pythonhosted.org/packages/c1/6f/56eed0ecd54e5453c4b17329f49be095104779b0f42d8497a84f9755aa8e/fdb5lib-5.20.1.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0f90094478a54283998e63258a3a5eeddf608056d745dc09bfd67dcc0e5b09d4", size = 1703432 }, - { url = "https://files.pythonhosted.org/packages/ed/57/9ca9caf342ad8aebdc81ef153a2ac31625a1512841e456bf6d5faec82fe5/fdb5lib-5.20.1.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:9badd2578fbcf5c8d164419737805518310b7e6aae946cea5f474e171e4f210e", size = 1403426 }, - { url = "https://files.pythonhosted.org/packages/97/be/b17ff8fccdce851216d89b04ec03bb200f952d04a436304f532291332803/fdb5lib-5.20.1.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b593606c4eacbdf46dbbcbf9556b63857e0be541bdc980059c33140c654b54d4", size = 1437214 }, - { url = "https://files.pythonhosted.org/packages/33/41/0f0f2cdf5dd8928bf5a94526a50adf3eccd77822c493e92aab2976fe5992/fdb5lib-5.20.1.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:8ce4cd522dc2020b6b259b1749ce4934403e715888cf99f15a74b7f6d82b3a51", size = 1719646 }, - { url = "https://files.pythonhosted.org/packages/55/ee/d3954f0664971fb667d4d6ecd6baa76ac53c9f7074ea89a642097aa501e1/fdb5lib-5.20.1.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:927dfefac21e227b78444ba4be1c842d7626307696b8489d8f20eb107832de32", size = 1703432 }, - { url = "https://files.pythonhosted.org/packages/10/57/bdbc156c49d713e1311c14eba71eacf861a4daba60d68a48b57f9408d82d/fdb5lib-5.20.1.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:90f695e88ec97ac358b2866ae40a3148400e8d6ccdbda3aab574073f3646b021", size = 1403427 }, - { url = "https://files.pythonhosted.org/packages/0e/a2/23518e4a73034caf216e1f5d38df8d07edc837e64294c13fa5c163939278/fdb5lib-5.20.1.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:9f1c1c0acde94aa6e4809e7b986c202e074a4fd886c93c9c1f4fa848395d0bde", size = 1437212 }, - { url = "https://files.pythonhosted.org/packages/22/23/431e04a8bd6674236ba685977af6fa82efc7a01185428e1263a384dfde43/fdb5lib-5.20.1.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:676f20623938f1c862bf9f3f623877cbe6357df4eb634668aa17d7d2d2380f52", size = 1719646 }, - { url = "https://files.pythonhosted.org/packages/9d/16/2945dce4c0b89e0c937a15904349c2fc0f2754949f57b5f444826f10a934/fdb5lib-5.20.1.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:c02d9c7fe76e402c19106e52b0dbd81b512548ef880b3b96640d66cf1d36770e", size = 1703430 }, + { url = "https://files.pythonhosted.org/packages/45/15/e39e5db71a8ac4719e244741feaee35e52a3fca2c907a50a37d83def692f/fdb5lib-5.22.0.26-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:191d81f20351294796b19ae1f3c2a993c194f9bddeafca6a943a56b12c2e41eb", size = 1382189, upload-time = "2026-07-17T13:32:39.734Z" }, + { url = "https://files.pythonhosted.org/packages/af/fe/f51170ca96e87f31531437046ff1688be1e98e1fcd96e3927a83b10c1630/fdb5lib-5.22.0.26-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:e186876654a3218d8b530e2bc0ebad5bde16444c49a8c09fc8c90ab4e096b6cf", size = 1411537, upload-time = "2026-07-17T14:05:28.843Z" }, + { url = "https://files.pythonhosted.org/packages/cb/ff/78d5be3e2fba9f3b46cf2fa6aeccb2304a1ae9d7e713597ae39e58fe095a/fdb5lib-5.22.0.26-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:1f4089e94afa35ac94e761df72f300f2dc1d098a4862885bb0afa4ee93a2af92", size = 1686572, upload-time = "2026-07-17T13:16:44.693Z" }, + { url = "https://files.pythonhosted.org/packages/33/a3/4aff425a5b5760f5b9ad9e054136f93f0194bc03f0a785187bbf0a489f2c/fdb5lib-5.22.0.26-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:78ff5bae4c728b166dacfe93718949416906e7bf478b80897b84b7c2dfb373b9", size = 1666219, upload-time = "2026-07-17T13:40:01.409Z" }, + { url = "https://files.pythonhosted.org/packages/bd/49/5c1f7f151541c331d79522fe665e8a55fe9ffed3cde064bd71c063f7efba/fdb5lib-5.22.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:87d8af388e98a6f69723898b86fb5064ce131116925e5291d31f2dd75f6b9aa5", size = 1382211, upload-time = "2026-07-17T13:27:29.388Z" }, + { url = "https://files.pythonhosted.org/packages/81/1f/24f57837f246ac6fbe14749bb9c82af0c5c368a0e75a07a8b250ded04f3b/fdb5lib-5.22.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:0010a5f7e891805f65c75bc72943d0252ee4b7967b5fdfda2d8a2c517fecb7c4", size = 1411561, upload-time = "2026-07-17T13:23:49.057Z" }, + { url = "https://files.pythonhosted.org/packages/6f/31/dd1cd93184773b2827a34b0837973eab5ddebe4a9d2d19cd9127cb1191f7/fdb5lib-5.22.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f70cb2f13f68494cc7bee0b6375519c759a7086a518c55068acb66ee02926cb6", size = 1686593, upload-time = "2026-07-17T13:16:48.918Z" }, + { url = "https://files.pythonhosted.org/packages/c6/60/f5c9fc93e624548c009cc3089a01ce5248d0cfcabe6e8dfd767f22914d9f/fdb5lib-5.22.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fd90efb69d2a4aab231ae12d3665b1e175524b21af1502a7e417426167b27e18", size = 1666240, upload-time = "2026-07-17T13:32:49.89Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bb/8255376ba4821d362e6d41cdad33275b2ef8f018cf21ac7df727450471ce/fdb5lib-5.22.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:aa8527fb1d5586cc7541befd66fd437af8609e2c8a9b1c3f39403c3a25bdbfac", size = 1382212, upload-time = "2026-07-17T13:59:32.088Z" }, + { url = "https://files.pythonhosted.org/packages/78/81/17ae4c2defd367d8412a15d6668d2f365bd0d5ed25d4c2dcedc438092a41/fdb5lib-5.22.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:231bcb831f2caef376269ed9bc2080d671e6491e5f0a68c06927b2d9c2f54247", size = 1411561, upload-time = "2026-07-17T13:46:53.299Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ac/30a98657c871700dc22750515a72c7cb706669d86ba3ffd4311ebbcabc66/fdb5lib-5.22.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6efcb5d4c3bdd37d8d1f151e330d10beb8ebb4d798c6e934b9fdb8bdd150358d", size = 1686595, upload-time = "2026-07-17T13:17:08.019Z" }, + { url = "https://files.pythonhosted.org/packages/df/47/5990a0caeee4c1fd2527dad1830c3613cffaf3be58bdfa0ad9051c10b7a5/fdb5lib-5.22.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:13a7d72ee6a9c3a5ad6020ca5ebe4a253d2fd2864fc6e30ab0542aff3509ed5f", size = 1666241, upload-time = "2026-07-17T13:31:57.576Z" }, + { url = "https://files.pythonhosted.org/packages/22/11/eba302bf27ace0c7c93ece7c1d2236b95cb9130f0497039924ae06c30ab8/fdb5lib-5.22.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:de4afea1a1312ba217a9866ca178d6dfb6d9b1a6acee4cfc4beacfe054df3c1f", size = 1382211, upload-time = "2026-07-17T13:15:53.681Z" }, + { url = "https://files.pythonhosted.org/packages/ef/45/3e20a4d94b6635c1537a2ff0e72fe8c211ca0d4b5f95652b09a3ae175b50/fdb5lib-5.22.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:784e3a389e79502b00a5fdc7c042807f3c37a3118fe12fed32ed87fa434ba79b", size = 1411562, upload-time = "2026-07-17T13:43:43.886Z" }, + { url = "https://files.pythonhosted.org/packages/b7/ac/81153c8578456bf1bb1c1bc69d712177b695b5a3c97640a1e9fccd1f469e/fdb5lib-5.22.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e2238ac8d0c1d3a27c518d1e17fa0b7c6cf76a64dac2f25b1e55b987ab24b869", size = 1686594, upload-time = "2026-07-17T13:16:57.814Z" }, + { url = "https://files.pythonhosted.org/packages/42/93/f491422b46db859686f7820b706e9aff2e1968171e5fd0117a8392c57b14/fdb5lib-5.22.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ef674ca3f397a76e5fa5f38b7ce2070b08daa5f641f8da7ca1990b244ba17a65", size = 1666240, upload-time = "2026-07-17T13:29:12.866Z" }, + { url = "https://files.pythonhosted.org/packages/9a/b6/be543b0438e15e055ce11a984dd3fbd7c4667428b6bd71d3679985244b6a/fdb5lib-5.22.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:7e1f81e2349623edb7cd64fe5d99596b437fd9aa595741ae2001cd34ae4c0a33", size = 1382212, upload-time = "2026-07-17T13:59:03.879Z" }, + { url = "https://files.pythonhosted.org/packages/9a/74/9534c6f39b536259093830b475818297c6430bbd9747eb0c4b102a3217e0/fdb5lib-5.22.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:315b8cd55d4f405a95c09c566e47a5145c2e1e5bec4fda93239b37839edf6f7f", size = 1411563, upload-time = "2026-07-17T13:22:00.049Z" }, + { url = "https://files.pythonhosted.org/packages/12/f9/852f8dcdbc7091e69d1efe0f6280f4ab3cd54442a9eae92d30a54942d5f2/fdb5lib-5.22.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:aa9d55d36830c1fde15d766522326a5f931b5553ce8ead256eb321ab128ebed6", size = 1686595, upload-time = "2026-07-17T13:17:33.692Z" }, + { url = "https://files.pythonhosted.org/packages/0a/70/d7edf388ad0c8bcc693b632ea86df262617b2f0a1ac591d59209890c7fdb/fdb5lib-5.22.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:983e447ef67a8ecae44016f0b90003c2190013bb6824b4705a766dbd0c9cb990", size = 1666239, upload-time = "2026-07-17T13:30:00.03Z" }, ] [[package]] name = "filelock" -version = "3.29.0" +version = "3.32.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571 } +sdist = { url = "https://files.pythonhosted.org/packages/c0/80/8232b582c4b318b817cf1274ba74976b07b34d35ef439b3eb948f98645a1/filelock-3.32.0.tar.gz", hash = "sha256:7be2ad23a14607ccc71808e68fe30848aeace7058ace17852f68e2a68e310402", size = 213757, upload-time = "2026-07-21T13:17:42.898Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812 }, + { url = "https://files.pythonhosted.org/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl", hash = "sha256:d396bea984af47333ef05e50eae7eff88c84256de6112aea0ec48a233c064fe3", size = 97732, upload-time = "2026-07-21T13:17:41.55Z" }, ] [[package]] name = "findlibs" -version = "0.1.2" +version = "0.1.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/ef/345b0f88b8e9d9e12051142a9cdcf590bf70206d20d81c3f773ade8d9e32/findlibs-0.1.2.tar.gz", hash = "sha256:1f56d220c69686392ebdc4c65b32ee344818bca633643a8c97592957d1728122", size = 11302 } +sdist = { url = "https://files.pythonhosted.org/packages/91/21/235e81c0e29a5aa84e5374d469723d508de63692049e80654b1b56d1c57e/findlibs-0.1.3.tar.gz", hash = "sha256:49bbe509c8b439ecd9c0d021c301aa9db643a2e6ab4e189a40b505ee4a49db62", size = 11335, upload-time = "2026-07-14T10:52:47.795Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/ff/76dd547e129206899e4e26446c3ca7aeaff948c31b05250e9b8690e76883/findlibs-0.1.2-py3-none-any.whl", hash = "sha256:5348bbc7055d2a505962576c2e285b6c0aae6d749f82ba71296e7d41336e66e8", size = 10707 }, + { url = "https://files.pythonhosted.org/packages/d1/13/63305a756cb6e9408828961d4ff8542f3625d7cfb62289b19016216a9fa2/findlibs-0.1.3-py3-none-any.whl", hash = "sha256:9c14f8506cdcd37e38369259f8cd9aa3c002d58cd7c2beff4852bd205495c555", size = 10714, upload-time = "2026-07-14T10:52:46.902Z" }, ] [[package]] @@ -672,9 +679,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816 } +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload-time = "2024-03-09T03:21:07.555Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263 }, + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload-time = "2024-03-09T03:21:05.635Z" }, ] [[package]] @@ -684,27 +691,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799 } +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload-time = "2024-11-07T02:00:56.249Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625 }, + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload-time = "2024-11-07T02:00:54.523Z" }, ] [[package]] name = "fsspec" -version = "2026.4.0" +version = "2026.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760 } +sdist = { url = "https://files.pythonhosted.org/packages/00/78/f34251dadb8f3921264a1d9b8946f5e542014ee2614b285261b4e40e6775/fsspec-2026.7.0.tar.gz", hash = "sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88", size = 317040, upload-time = "2026-07-28T16:34:51.052Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402 }, + { url = "https://files.pythonhosted.org/packages/fd/3c/6a2bf344106328fd04963664a60b9bb6496fc25df8e962fcdc1367285fb9/fsspec-2026.7.0-py3-none-any.whl", hash = "sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279", size = 206583, upload-time = "2026-07-28T16:34:49.538Z" }, ] [[package]] name = "idna" version = "3.18" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711 } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455 }, + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, ] [[package]] @@ -714,18 +721,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "zipp", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405 } +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789 }, + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, ] [[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]] @@ -735,9 +742,9 @@ 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]] @@ -749,11 +756,11 @@ dependencies = [ { name = "jsonschema-specifications" }, { name = "referencing" }, { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "rpds-py", version = "2026.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -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]] @@ -763,275 +770,279 @@ 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]] name = "locket" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350 } +sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350, upload-time = "2022-04-20T22:04:44.312Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398 }, + { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398, upload-time = "2022-04-20T22:04:42.23Z" }, ] [[package]] name = "lru-dict" version = "1.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/6c/396716746ca46fd2ac52a7a6cbd7b4cf848e5d430f431dacd209290dfa71/lru_dict-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3766e397aa6de1ca3442729bc1fa75834ab7b0a6b017e6e197d3a66b61abde59", size = 16757 }, - { url = "https://files.pythonhosted.org/packages/2d/93/c163ffb71beb18f18459461658fd16c8b8c86aed858f2dc7c7e636318f61/lru_dict-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658e152d3a4ad0e1d75e6f53b1fa353779539920b38be99f4ea33d3bad41efdb", size = 11243 }, - { url = "https://files.pythonhosted.org/packages/44/e3/fa96d54032531c67eeacf0ab6f56e10e05f25d382a29f6a381ac8ecf3814/lru_dict-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:98af7044b5c3d85a649e1afb8891829ff5210caf9143acc741b3e98ab1b66ff6", size = 11726 }, - { url = "https://files.pythonhosted.org/packages/7a/23/bae4f32fb014fd2dc5512e9267a3b1ec34c3b55d16a2202a1193d9ae635d/lru_dict-1.4.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:906d99705b79a00b5668bdb8782ad823ccc8d26e1fc6b56327ae469a8d12e9b4", size = 29823 }, - { url = "https://files.pythonhosted.org/packages/9f/3b/8c3d1e6a188ce65e0161b86dbd18f2290950baf1e9e28e4948fc123d9a67/lru_dict-1.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:885643fd968336d8652fddb0778184e2eeff7b7aebced6de268af6d6caef42d5", size = 30812 }, - { url = "https://files.pythonhosted.org/packages/ed/11/7f061507eda944150ed959e99a3700ce6358c1241c7f697b2f1ade48646b/lru_dict-1.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:24c779334bed82f1a7eb2d1ebcba2b7aa9a1555d40a3b53e05eb6b9dfcb0609c", size = 32480 }, - { url = "https://files.pythonhosted.org/packages/75/e7/94ac30d33c6f8a8eca5d7e81c0ce26fb7b79b18ea65accdcb2a652b19abc/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6099e2ecb118dfeae4a197bfcc702ea5841bfd86f19d1b340e932d0f5c47c10", size = 30199 }, - { url = "https://files.pythonhosted.org/packages/4a/81/c93ee7365db67dfb497e6218aa0395b9ec878c07c732d348bfbd651bcc95/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e0db4f3105108598749550e639b283b07df0bb91cac3b47e86ffebcab721cc7", size = 31489 }, - { url = "https://files.pythonhosted.org/packages/9f/0b/634e8b4eca2497647f802bbe1ae3f0e1e9a0de1d555cf77c022527b2682f/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e21f67ba374d1945051b547e719d44a8c7880718f67a15a03e7a12e1d12ea96b", size = 29522 }, - { url = "https://files.pythonhosted.org/packages/de/cc/591b959d77cc0e0ac016f11baf26d03d566bb88a53fa9b41e157bc68bc4b/lru_dict-1.4.1-cp310-cp310-win32.whl", hash = "sha256:f309b4018dd41f33bf3bd4cc0f62421da8bcca513ea044dbb22f3cd029935012", size = 13066 }, - { url = "https://files.pythonhosted.org/packages/d9/bc/c14b67fdbdb5a2a81cfb907ea8a8b0c9da5aed899f34921ebf097e22a966/lru_dict-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:e84cd1065955897de01f1fb4cbd6f87cab7706e920283bb98c27341d76dd9a8d", size = 14008 }, - { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760 }, - { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249 }, - { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728 }, - { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795 }, - { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807 }, - { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437 }, - { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168 }, - { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454 }, - { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574 }, - { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031 }, - { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007 }, - { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683 }, - { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216 }, - { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687 }, - { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960 }, - { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882 }, - { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268 }, - { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156 }, - { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395 }, - { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591 }, - { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119 }, - { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109 }, - { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248 }, - { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243 }, - { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938 }, - { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261 }, - { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801 }, - { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688 }, - { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214 }, - { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689 }, - { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034 }, - { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919 }, - { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334 }, - { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211 }, - { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461 }, - { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651 }, - { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120 }, - { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112 }, - { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119 }, - { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435 }, - { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988 }, - { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733 }, - { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222 }, - { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733 }, - { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251 }, - { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405 }, - { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135 }, - { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620 }, - { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077 }, - { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905 }, - { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435 }, - { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423 }, - { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184 }, - { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459 }, - { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938 }, - { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389 }, - { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706 }, - { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892 }, - { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254 }, - { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422 }, - { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909 }, - { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816 }, - { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204 }, - { url = "https://files.pythonhosted.org/packages/ec/de/18ac3957e1aa6674a0a828748c819265f79b524ff30cbb0ac7f08ab786c8/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cc9dd191870555624bbf3903c8afa3f01815ca3256ed8b35cb323f0db3ce4f98", size = 10467 }, - { url = "https://files.pythonhosted.org/packages/0c/53/2a0bedaa64950cc56ade72e2f5a292318473585d9a3adc797d13b38082e7/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:afdf92b332632aa6e4b8646e93723f50f41fece2a80a54d2b44e8ac67f913ceb", size = 10871 }, - { url = "https://files.pythonhosted.org/packages/4e/e2/d5ea49d62ea142559fd9cafd8505d4a4f87a1d81953a9c99fa61e7ccbd6b/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6770adafae25663b682420891a10a5894595f02b1e4d87766f7adc8e56e72a", size = 12969 }, - { url = "https://files.pythonhosted.org/packages/a2/67/0672caac9a04dc9011f7a27fc2ec2003f0bfa008070b29940d05b4dae56a/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:018cd3b41224ca81eb83cdf6db024409a920e5c1d3ce4e8b323cb66e24a73132", size = 13959 }, - { url = "https://files.pythonhosted.org/packages/e3/7e/313385214a5011cf9fe8376928f66f70bfedc48d8f7ab424292224ed4907/lru_dict-1.4.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:781dbcf0c83160e525482a4ebcd7c5065851a6c7295f1cda78248a2029f23f39", size = 14084 }, - { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384 }, - { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822 }, - { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968 }, - { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904 }, - { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062 }, +sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439, upload-time = "2025-11-02T10:02:13.548Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a4/6c/396716746ca46fd2ac52a7a6cbd7b4cf848e5d430f431dacd209290dfa71/lru_dict-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3766e397aa6de1ca3442729bc1fa75834ab7b0a6b017e6e197d3a66b61abde59", size = 16757, upload-time = "2025-11-02T10:00:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/2d/93/c163ffb71beb18f18459461658fd16c8b8c86aed858f2dc7c7e636318f61/lru_dict-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658e152d3a4ad0e1d75e6f53b1fa353779539920b38be99f4ea33d3bad41efdb", size = 11243, upload-time = "2025-11-02T10:00:56.715Z" }, + { url = "https://files.pythonhosted.org/packages/44/e3/fa96d54032531c67eeacf0ab6f56e10e05f25d382a29f6a381ac8ecf3814/lru_dict-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:98af7044b5c3d85a649e1afb8891829ff5210caf9143acc741b3e98ab1b66ff6", size = 11726, upload-time = "2025-11-02T10:00:57.377Z" }, + { url = "https://files.pythonhosted.org/packages/7a/23/bae4f32fb014fd2dc5512e9267a3b1ec34c3b55d16a2202a1193d9ae635d/lru_dict-1.4.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:906d99705b79a00b5668bdb8782ad823ccc8d26e1fc6b56327ae469a8d12e9b4", size = 29823, upload-time = "2025-11-02T10:00:58.34Z" }, + { url = "https://files.pythonhosted.org/packages/9f/3b/8c3d1e6a188ce65e0161b86dbd18f2290950baf1e9e28e4948fc123d9a67/lru_dict-1.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:885643fd968336d8652fddb0778184e2eeff7b7aebced6de268af6d6caef42d5", size = 30812, upload-time = "2025-11-02T10:00:59.358Z" }, + { url = "https://files.pythonhosted.org/packages/ed/11/7f061507eda944150ed959e99a3700ce6358c1241c7f697b2f1ade48646b/lru_dict-1.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:24c779334bed82f1a7eb2d1ebcba2b7aa9a1555d40a3b53e05eb6b9dfcb0609c", size = 32480, upload-time = "2025-11-02T10:01:00.141Z" }, + { url = "https://files.pythonhosted.org/packages/75/e7/94ac30d33c6f8a8eca5d7e81c0ce26fb7b79b18ea65accdcb2a652b19abc/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6099e2ecb118dfeae4a197bfcc702ea5841bfd86f19d1b340e932d0f5c47c10", size = 30199, upload-time = "2025-11-02T10:01:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/4a/81/c93ee7365db67dfb497e6218aa0395b9ec878c07c732d348bfbd651bcc95/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e0db4f3105108598749550e639b283b07df0bb91cac3b47e86ffebcab721cc7", size = 31489, upload-time = "2025-11-02T10:01:02.363Z" }, + { url = "https://files.pythonhosted.org/packages/9f/0b/634e8b4eca2497647f802bbe1ae3f0e1e9a0de1d555cf77c022527b2682f/lru_dict-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e21f67ba374d1945051b547e719d44a8c7880718f67a15a03e7a12e1d12ea96b", size = 29522, upload-time = "2025-11-02T10:01:03.399Z" }, + { url = "https://files.pythonhosted.org/packages/de/cc/591b959d77cc0e0ac016f11baf26d03d566bb88a53fa9b41e157bc68bc4b/lru_dict-1.4.1-cp310-cp310-win32.whl", hash = "sha256:f309b4018dd41f33bf3bd4cc0f62421da8bcca513ea044dbb22f3cd029935012", size = 13066, upload-time = "2025-11-02T10:01:04.457Z" }, + { url = "https://files.pythonhosted.org/packages/d9/bc/c14b67fdbdb5a2a81cfb907ea8a8b0c9da5aed899f34921ebf097e22a966/lru_dict-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:e84cd1065955897de01f1fb4cbd6f87cab7706e920283bb98c27341d76dd9a8d", size = 14008, upload-time = "2025-11-02T10:01:05.421Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760, upload-time = "2025-11-02T10:01:06.492Z" }, + { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249, upload-time = "2025-11-02T10:01:07.261Z" }, + { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728, upload-time = "2025-11-02T10:01:08.185Z" }, + { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795, upload-time = "2025-11-02T10:01:08.862Z" }, + { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807, upload-time = "2025-11-02T10:01:09.581Z" }, + { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437, upload-time = "2025-11-02T10:01:10.676Z" }, + { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168, upload-time = "2025-11-02T10:01:11.47Z" }, + { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454, upload-time = "2025-11-02T10:01:12.522Z" }, + { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574, upload-time = "2025-11-02T10:01:13.293Z" }, + { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031, upload-time = "2025-11-02T10:01:13.96Z" }, + { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007, upload-time = "2025-11-02T10:01:14.857Z" }, + { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683, upload-time = "2025-11-02T10:01:15.891Z" }, + { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216, upload-time = "2025-11-02T10:01:16.867Z" }, + { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687, upload-time = "2025-11-02T10:01:17.485Z" }, + { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960, upload-time = "2025-11-02T10:01:18.158Z" }, + { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882, upload-time = "2025-11-02T10:01:18.841Z" }, + { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268, upload-time = "2025-11-02T10:01:19.564Z" }, + { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156, upload-time = "2025-11-02T10:01:20.22Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395, upload-time = "2025-11-02T10:01:20.901Z" }, + { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591, upload-time = "2025-11-02T10:01:21.606Z" }, + { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119, upload-time = "2025-11-02T10:01:22.61Z" }, + { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109, upload-time = "2025-11-02T10:01:23.322Z" }, + { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248, upload-time = "2025-11-02T10:01:24.291Z" }, + { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243, upload-time = "2025-11-02T10:01:25.254Z" }, + { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938, upload-time = "2025-11-02T10:01:25.89Z" }, + { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261, upload-time = "2025-11-02T10:01:26.879Z" }, + { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801, upload-time = "2025-11-02T10:01:27.553Z" }, + { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688, upload-time = "2025-11-02T10:01:28.17Z" }, + { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214, upload-time = "2025-11-02T10:01:28.888Z" }, + { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689, upload-time = "2025-11-02T10:01:29.508Z" }, + { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034, upload-time = "2025-11-02T10:01:30.164Z" }, + { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919, upload-time = "2025-11-02T10:01:30.971Z" }, + { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334, upload-time = "2025-11-02T10:01:31.663Z" }, + { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211, upload-time = "2025-11-02T10:01:32.468Z" }, + { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461, upload-time = "2025-11-02T10:01:33.2Z" }, + { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651, upload-time = "2025-11-02T10:01:33.874Z" }, + { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120, upload-time = "2025-11-02T10:01:34.595Z" }, + { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112, upload-time = "2025-11-02T10:01:35.268Z" }, + { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119, upload-time = "2025-11-02T10:01:36.239Z" }, + { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435, upload-time = "2025-11-02T10:01:36.857Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988, upload-time = "2025-11-02T10:01:37.531Z" }, + { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733, upload-time = "2025-11-02T10:01:38.194Z" }, + { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222, upload-time = "2025-11-02T10:01:39.093Z" }, + { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733, upload-time = "2025-11-02T10:01:39.739Z" }, + { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251, upload-time = "2025-11-02T10:01:40.421Z" }, + { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405, upload-time = "2025-11-02T10:01:41.917Z" }, + { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135, upload-time = "2025-11-02T10:01:42.935Z" }, + { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620, upload-time = "2025-11-02T10:01:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077, upload-time = "2025-11-02T10:01:44.694Z" }, + { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905, upload-time = "2025-11-02T10:01:45.668Z" }, + { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435, upload-time = "2025-11-02T10:01:46.397Z" }, + { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423, upload-time = "2025-11-02T10:01:47.473Z" }, + { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184, upload-time = "2025-11-02T10:01:48.161Z" }, + { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459, upload-time = "2025-11-02T10:01:48.823Z" }, + { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938, upload-time = "2025-11-02T10:01:49.448Z" }, + { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389, upload-time = "2025-11-02T10:01:50.49Z" }, + { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706, upload-time = "2025-11-02T10:01:51.197Z" }, + { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892, upload-time = "2025-11-02T10:01:51.899Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254, upload-time = "2025-11-02T10:01:52.587Z" }, + { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422, upload-time = "2025-11-02T10:01:53.271Z" }, + { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909, upload-time = "2025-11-02T10:01:54.356Z" }, + { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816, upload-time = "2025-11-02T10:01:55.417Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204, upload-time = "2025-11-02T10:01:56.06Z" }, + { url = "https://files.pythonhosted.org/packages/ec/de/18ac3957e1aa6674a0a828748c819265f79b524ff30cbb0ac7f08ab786c8/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cc9dd191870555624bbf3903c8afa3f01815ca3256ed8b35cb323f0db3ce4f98", size = 10467, upload-time = "2025-11-02T10:02:05.717Z" }, + { url = "https://files.pythonhosted.org/packages/0c/53/2a0bedaa64950cc56ade72e2f5a292318473585d9a3adc797d13b38082e7/lru_dict-1.4.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:afdf92b332632aa6e4b8646e93723f50f41fece2a80a54d2b44e8ac67f913ceb", size = 10871, upload-time = "2025-11-02T10:02:06.353Z" }, + { url = "https://files.pythonhosted.org/packages/4e/e2/d5ea49d62ea142559fd9cafd8505d4a4f87a1d81953a9c99fa61e7ccbd6b/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6770adafae25663b682420891a10a5894595f02b1e4d87766f7adc8e56e72a", size = 12969, upload-time = "2025-11-02T10:02:07.196Z" }, + { url = "https://files.pythonhosted.org/packages/a2/67/0672caac9a04dc9011f7a27fc2ec2003f0bfa008070b29940d05b4dae56a/lru_dict-1.4.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:018cd3b41224ca81eb83cdf6db024409a920e5c1d3ce4e8b323cb66e24a73132", size = 13959, upload-time = "2025-11-02T10:02:08.267Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7e/313385214a5011cf9fe8376928f66f70bfedc48d8f7ab424292224ed4907/lru_dict-1.4.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:781dbcf0c83160e525482a4ebcd7c5065851a6c7295f1cda78248a2029f23f39", size = 14084, upload-time = "2025-11-02T10:02:08.993Z" }, + { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384, upload-time = "2025-11-02T10:02:09.656Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822, upload-time = "2025-11-02T10:02:10.609Z" }, + { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968, upload-time = "2025-11-02T10:02:11.405Z" }, + { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904, upload-time = "2025-11-02T10:02:12.144Z" }, + { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062, upload-time = "2025-11-02T10:02:12.878Z" }, ] [[package]] name = "markdown" version = "3.10.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805 } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180 }, + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, ] [[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/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631 }, - { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057 }, - { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050 }, - { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681 }, - { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705 }, - { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524 }, - { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282 }, - { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745 }, - { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571 }, - { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056 }, - { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932 }, - { 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/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615 }, - { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020 }, - { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332 }, - { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947 }, - { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962 }, - { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760 }, - { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529 }, - { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015 }, - { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, - { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, - { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, - { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622 }, - { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029 }, - { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374 }, - { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980 }, - { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990 }, - { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784 }, - { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588 }, - { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041 }, - { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, - { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, - { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, - { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658 }, - { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066 }, - { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639 }, - { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569 }, - { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284 }, - { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801 }, - { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769 }, - { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642 }, - { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, - { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, - { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, - { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619 }, - { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029 }, - { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408 }, - { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005 }, - { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048 }, - { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821 }, - { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606 }, - { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043 }, - { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, - { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, - { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, - { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661 }, - { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069 }, - { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670 }, - { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598 }, - { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261 }, - { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835 }, - { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733 }, - { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672 }, - { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, - { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, - { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, +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/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, + { 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" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] [[package]] name = "metkitlib" -version = "1.17.1.14" +version = "1.19.0.26" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eccodeslib" }, { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/86/9676f06ce7a22a8725cd5a064d401450bae27b956e9e586d9510fdd3c1f4/metkitlib-1.17.1.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:a19d7dd35581ae97fc2c66a201d74988a5e41acd288f698c9c672bdafdf3655c", size = 883452 }, - { url = "https://files.pythonhosted.org/packages/77/66/faa5f205bffca6f804d202790baa85242f01573e1dd48bb213f1debcd5ed/metkitlib-1.17.1.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:ae0b1281000f9fedf22da120345b04a44b2465544c24c31785ae5e077ac4e05e", size = 922389 }, - { url = "https://files.pythonhosted.org/packages/6c/7f/9b2da87e2b2f978ca5e2eea6732430d919ca84be96804034d1425528d4dd/metkitlib-1.17.1.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ff35dbca38c2b017a61a8f22d4265bb57f8d34135412bd3f782abe27920583b4", size = 972297 }, - { url = "https://files.pythonhosted.org/packages/4f/28/7b1e9c4ac720cb732a972cc8894b65abbf843d55c1940acb5d4c669b48e0/metkitlib-1.17.1.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:376cc84f827f931edf824bb200db25fca65cc8676b88f07d02b7e10af18a2a4c", size = 1004227 }, - { url = "https://files.pythonhosted.org/packages/5c/43/fa1f37122c0f2cd944cfece03855ac04e674709d539bdee6f0e405694351/metkitlib-1.17.1.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:726395e3ece2ec483dd92f65308ae7758f36e7bac6f90be51424fdfdd6c2724e", size = 883454 }, - { url = "https://files.pythonhosted.org/packages/b2/02/6a9107b1540ab07ac96dc9ef7204826bd026cdc61a7719d1450c815a1f9c/metkitlib-1.17.1.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:50aa1b47e33a62e92b586e353e95e4227a1a51da5aef687936cac39938f51803", size = 922391 }, - { url = "https://files.pythonhosted.org/packages/38/20/89d126b6d4573a63458c523b8aec2daf3ce408ea7538ded77fb5a29eb0cc/metkitlib-1.17.1.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b5326f24567c640546324231ce2c1b0a8a742692ebe11afab558ff326a670ef0", size = 972297 }, - { url = "https://files.pythonhosted.org/packages/ce/ad/332bb6a6c271c4f2e799b073fee9c4d0d23cca3127b2a1eecd16c18146d4/metkitlib-1.17.1.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:9cd3f4e29cb4ef714c74c968000a4d45695cd28b8182b334eb6ac7d047ce39c3", size = 1004225 }, - { url = "https://files.pythonhosted.org/packages/97/a6/1937c42f280ce3bbd74a7e70157278c360f1a79395bbdf53b53c949dc819/metkitlib-1.17.1.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:cdfd0ffef95a63b25389eef79394845a99d9ebe5a47334a45f72df57bc91affc", size = 883455 }, - { url = "https://files.pythonhosted.org/packages/ff/39/be40ce8d983340f547b65d131f73fa24a3e78e9eb4e45516eb30a580fd0d/metkitlib-1.17.1.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:a2c55b5d4a34cf31efbbc61ce570f6683884068676ed37b883b390603bc3346e", size = 922388 }, - { url = "https://files.pythonhosted.org/packages/e3/31/2fe67928cc868d2b60cf5d7abe52f8b2fbcdf0674286a043fd6c4965ae56/metkitlib-1.17.1.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e00e37742a7d594e45cc16217861cbf90c2d10cefd1b0f125262916a8aa1041d", size = 972297 }, - { url = "https://files.pythonhosted.org/packages/f1/f6/d91c54f49b0d278d04f07f05989d7c1cdf4607ac23ddfb14c32124e799dc/metkitlib-1.17.1.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:80a339fa687aa22b3b1fcf150508d4f5a45f804154a6294637609ab62e09ecc4", size = 1004226 }, - { url = "https://files.pythonhosted.org/packages/be/e9/668a014d5b2187dd65400a6c6855de587118fb31b68d6739f10b9f372917/metkitlib-1.17.1.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:17f34c4acd77f33e6716a3caa9e732a7975fa67ee259df5dad4c0d0db6f2fd06", size = 883454 }, - { url = "https://files.pythonhosted.org/packages/dd/a3/d66275fee72f005bebf798a61e443f4d17d35e8b377e37635c217545ecde/metkitlib-1.17.1.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b85fe051f8edc2c9afb04cb3709c8a87d9bce69737f118c3653bd9e28401412b", size = 922392 }, - { url = "https://files.pythonhosted.org/packages/5b/c8/1d96c1d6593a1bea023c3fa17dc4f0520625d70ea1a3735ac1f8be98c5a8/metkitlib-1.17.1.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:0a8f7471d9c637d51704253b72a8f57bc522514bfaf6269630831ea4a82fba1e", size = 972293 }, - { url = "https://files.pythonhosted.org/packages/e1/1b/56cf934b45d2af4fef55ac48a084b1dbcee20a3bfef8ae4e467bc33543a9/metkitlib-1.17.1.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e7650e5e3b2e5c7327a424cbea24c73e943675118de5f0a2e7d717b875483f58", size = 1004227 }, - { url = "https://files.pythonhosted.org/packages/aa/43/dac1d0008f1740d1dfd508d4b2578d4e55e20e7a55fb2d2def2fa6590412/metkitlib-1.17.1.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:e7f5f1e876883dc0538967e248cdd3f1911d87bbd589c725912cee2682170a56", size = 883455 }, - { url = "https://files.pythonhosted.org/packages/dd/0d/a1d027d4a0b1926289a6e1c7c58e778d393084023488db82cbb380348faa/metkitlib-1.17.1.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:1e64b8ffccddacf44306a926358ddbe37ca499659668243b2af5f4e0a663d768", size = 922392 }, - { url = "https://files.pythonhosted.org/packages/a1/96/60e5eb6b69cbed19833adb880251c453a57e4ec22cd1efa978a208761053/metkitlib-1.17.1.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:b363d0b530e58bd6c832910af7786cac764c230a1515e830ff8c4b361364d031", size = 972296 }, - { url = "https://files.pythonhosted.org/packages/3f/11/abd57cc9006d59198d65e082cf3c70ead6f2203211ea5ddd92d0752f5ca2/metkitlib-1.17.1.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:18bcc8effee23c7a6df6b99a3ded2d890e46b57759aafb651cb0869e4e7cccdb", size = 1004228 }, + { url = "https://files.pythonhosted.org/packages/cb/5b/6a4437c24963db7e8a50b7f9fdffe6cbfefa3c6487d72acea7949bc7767c/metkitlib-1.19.0.26-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:d603a708b699c758792105f8b268008b9373572875b5ac3c378c712d9c3adde6", size = 989626, upload-time = "2026-07-17T13:32:44.326Z" }, + { url = "https://files.pythonhosted.org/packages/be/f9/1f7611b1a7f402f8aea8f20656c69892d5a017755d6b9a71dc2aba26c969/metkitlib-1.19.0.26-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:73ea821fd19ca84c17946842da653017a37b5c2c43347e6e10f6414a84887dc4", size = 1040410, upload-time = "2026-07-17T14:05:34.28Z" }, + { url = "https://files.pythonhosted.org/packages/a5/68/bb9002c78c5503bca7f9cb2f4eede4261fcd843593ee3905f3e69a8bcc8d/metkitlib-1.19.0.26-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:eec343245db45867a698e1c038372f8fe7b9014ac0e8f763e5f11faa97f7e221", size = 1081995, upload-time = "2026-07-17T13:16:48.703Z" }, + { url = "https://files.pythonhosted.org/packages/dd/0b/f9071557a8d2adcb94ff2e27b138f938c2b63c39843e21f4c645604aeea2/metkitlib-1.19.0.26-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:5026c107c1f3a55c854d4da624dbecaa6929542131d8db3ada2e0c3d52a287d9", size = 1119065, upload-time = "2026-07-17T13:40:08.316Z" }, + { url = "https://files.pythonhosted.org/packages/78/97/ba9000713307e88ed6184bb183ac45b8868c7d03a8343d4ef839be9c50bc/metkitlib-1.19.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4161935ea9f57676f1a88c8becf31d9448cb757b2ece2b87b32b29c53786a46e", size = 989625, upload-time = "2026-07-17T13:27:34.039Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c5/8b497e39f6b36ee4ffd46191d77fb395d432d681d812d456f0ee13796594/metkitlib-1.19.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:1f1602c112fc15d4dcf94a016cbce54b2f87e2be5fcf41f3cf3d219af50085d7", size = 1040412, upload-time = "2026-07-17T13:23:54.918Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5c/ca936bf7b3088c4ef51f89521d437a9e6d04aa6340609f12d3c106507965/metkitlib-1.19.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e350669905fad1a4d4b07164396b0f613cad762bde9bdd34d11cd1706ca2a925", size = 1081997, upload-time = "2026-07-17T13:16:52.531Z" }, + { url = "https://files.pythonhosted.org/packages/62/77/093233001432a0f33413d9158a7e5448eb190618115d0957c58c3fbc24b1/metkitlib-1.19.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:5eec63149eadbf95c4cb7fb7284744418dcbc4696358952311cb72d0c7992929", size = 1119066, upload-time = "2026-07-17T13:32:56.207Z" }, + { url = "https://files.pythonhosted.org/packages/39/f0/065e0a54ee7608e738aefd85b270e6e9f2a3981ca65e829ad48a2f3f525f/metkitlib-1.19.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:26a885638422eeed4cb17d6df2f7c006a0a2e6ce4f89a63aee841519814fe9c4", size = 989622, upload-time = "2026-07-17T13:59:36.595Z" }, + { url = "https://files.pythonhosted.org/packages/c9/33/ad9f953e39e41cd30bf9b8badb258ddee2d28d1878d18f50eff2cd76f632/metkitlib-1.19.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:d702ad19561ff93484643d844dc3813b32b0867f7a0af6a91ef982c9c9f6699d", size = 1040412, upload-time = "2026-07-17T13:46:58.768Z" }, + { url = "https://files.pythonhosted.org/packages/d4/bc/e1c0d04271e921a8bf8af38ff63a69716a1466ca8f81f219f0a84e1aac45/metkitlib-1.19.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:147d8919d33e97cbfbe0bca8419ac0e5567e40d75a70524976668d12eb63a16b", size = 1081998, upload-time = "2026-07-17T13:17:11.925Z" }, + { url = "https://files.pythonhosted.org/packages/be/12/c5786dc0aa79a9a04635610e9ff4d9957c28920bb1767ecc96fc454138eb/metkitlib-1.19.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:622d04e918f60ea12e7f847d555ec7e0bbab762d9c77ccfc1b3c3e6cdb9eab34", size = 1119064, upload-time = "2026-07-17T13:32:03.594Z" }, + { url = "https://files.pythonhosted.org/packages/8f/36/076dc6e6e7e2d7db8f7e990f9a0c96c029328ad7837c3967f506ed254007/metkitlib-1.19.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:58a913c507b583667a64a03089ded8c717bbcea4b9480737876d76990797b95f", size = 989628, upload-time = "2026-07-17T13:15:58.719Z" }, + { url = "https://files.pythonhosted.org/packages/e8/24/a7413c09ad1ed2ea20c1b2e7ce9f48024f205ec3ccb9c9df3a389fb025bd/metkitlib-1.19.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:56b3e15c0f36d6e54d6342bcb5a118e13ae142609ad84c80a1dc4768795b8406", size = 1040412, upload-time = "2026-07-17T13:43:49.535Z" }, + { url = "https://files.pythonhosted.org/packages/60/1c/67814c698a7c1b5e6ab66cb72a451e98e31769ccd33ff4dde21d97e4c92c/metkitlib-1.19.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:0ae9cfe83021d7e769a84683773e173c9c781bfef79d9c7dbebff4e9464f561b", size = 1081994, upload-time = "2026-07-17T13:17:02.019Z" }, + { url = "https://files.pythonhosted.org/packages/60/e3/4b0c5bf41eb2ce28f37d9f8b70855d29586a4ec08020531ecd80c7df1989/metkitlib-1.19.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:052a39c19a986841d05d54b298492539d039c01f783592f41ef0f5e95aefd5b9", size = 1119065, upload-time = "2026-07-17T13:29:19.571Z" }, + { url = "https://files.pythonhosted.org/packages/af/11/cd6a9b7dc715d3450195ba50a4c2ba3b5bef671329c1cf4610d951e49108/metkitlib-1.19.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:893ebb0e63944e796a110b934c2451fb2c7062be46e57dafd5435340e98eb883", size = 989626, upload-time = "2026-07-17T13:59:08.7Z" }, + { url = "https://files.pythonhosted.org/packages/53/8e/062e80d64549447bb44070a4a711a59c119871f945a590c659e687b2ade6/metkitlib-1.19.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:4f40d8867b21b7217b21765c8e2f44c84ec1ddc0c783344da9e9894ede8f6c19", size = 1040410, upload-time = "2026-07-17T13:22:05.776Z" }, + { url = "https://files.pythonhosted.org/packages/05/44/332894e30f26cebd23e2304e0453236734c05679724ac99ed5385821cb76/metkitlib-1.19.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:793b1f76a984d19afc66067f77794b8b4b613b31bc578ec57ec7c52a843c868d", size = 1081996, upload-time = "2026-07-17T13:17:37.439Z" }, + { url = "https://files.pythonhosted.org/packages/95/46/6f86f6980eff04f8ab3b13eeee14f537ebd30b828597763136963b1187bd/metkitlib-1.19.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:cd1476d4f44448fb6db236afff0a5584154d310c650632d1c515f754467c9091", size = 1119064, upload-time = "2026-07-17T13:30:05.971Z" }, ] [[package]] name = "mir-python" -version = "1.28.0.14" +version = "1.29.1.26" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "eckit" }, { name = "findlibs" }, { name = "mirlib" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "pyyaml" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/2c/f4426675f88ded10d99c836271db3cedbc424357825616c303e8b640d877/mir_python-1.28.0.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:5a55707154531d3114e1f376e96fa4ac2174d769b9426fec7f3a2f59669f8ca4", size = 141622 }, - { url = "https://files.pythonhosted.org/packages/e7/fc/2afd905395a28831733edbdca2fdd03389f8b7e3f4cf6a31c7a47fffe407/mir_python-1.28.0.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:4fe8e18b33356ba2904e4320ac906f8ed37cb9d80db1f760e422c90d90a1c457", size = 145458 }, - { url = "https://files.pythonhosted.org/packages/75/1f/183c20cfb13240bf01ad50483072349bf10fe27147a29784492f5d98a9f3/mir_python-1.28.0.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:420e0272a07afa29103efdc3854dfa5e2d1aaf3bfd961f8ab4e9ec46754fdaa7", size = 1141734 }, - { url = "https://files.pythonhosted.org/packages/6a/34/b452d181632010e3de238aff6c047d066625d37b4c7a3b82d930fe14dfa2/mir_python-1.28.0.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:54455d543c494614a23526543093c524b2686d4cbd95489210a0187b2fe2cab0", size = 1157118 }, - { url = "https://files.pythonhosted.org/packages/d5/dc/65ee3c1d857b8ffd69f2c8238979d63a576cd6e165cf97031ee1f44878ec/mir_python-1.28.0.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:2ee67d093ab944c2e3fe28c40681f81ba8f57546be4ff88329df1f0d0e5ca393", size = 140902 }, - { url = "https://files.pythonhosted.org/packages/68/09/56ab7a212adc15f6e0a4b06a7d5924971bbc52381e7289815685c4e93768/mir_python-1.28.0.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:4978570e8fe87fe6ef76592e78e6a877d727bf1cdf25fe3b3aacc47c58d63640", size = 144573 }, - { url = "https://files.pythonhosted.org/packages/d2/fd/7e21567f42ee71734a1e54e3650e1c46868b569f1e323aac25af5f0dc26f/mir_python-1.28.0.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:7248381c5f3055faf5d011fcecfbb30c20da3be93ede2a4ec3f69ad32fd61ecd", size = 1183955 }, - { url = "https://files.pythonhosted.org/packages/3f/3d/f34ec5d43bcc94b32f297b728767cc178fb87fc12d1d35fea14fa0897c3b/mir_python-1.28.0.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:65ef9657b03f4a8ecf820ccc4f923e66c5029fac811402b7e2dc7b52049d47a7", size = 1196897 }, - { url = "https://files.pythonhosted.org/packages/bf/e9/ccf4a18fab2644747ef12c3821333bda51555389b8a97fdb0cc6796db7f7/mir_python-1.28.0.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:e652c878e5a1040dfff374d4e7ec5951be35594a5c4fd5b67e6ef3302a6c2956", size = 142551 }, - { url = "https://files.pythonhosted.org/packages/99/22/96bb291e13a3e820d49af196931e27fddbcb95a894711ef89e18cae292cc/mir_python-1.28.0.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:2f733b7a2b65da6b37e2e05b1c329b25f0d20c79b623e2f2156cab3b640e0058", size = 145889 }, - { url = "https://files.pythonhosted.org/packages/37/22/80fa66aa4175ee4b90634b5445f84b2236be531d741b663d30abdb0e5f4b/mir_python-1.28.0.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:67d9fe8b9aa6cd4a1ea11a96cb88d4f66592ff06ddf8e5b26c9c19f33529b419", size = 1171856 }, - { url = "https://files.pythonhosted.org/packages/33/37/d3122df93f8e00550d4700bab60116eb9c36a0ddf86bdbbb47369d26b732/mir_python-1.28.0.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5dacea81fb81252f9a9b177ce093740b998e2886f4845cb792925aa7edde8cac", size = 1186740 }, - { url = "https://files.pythonhosted.org/packages/0b/2f/d94885210333508a67396b62ef2dfcb5ea56593288ef20fa8cc46a420932/mir_python-1.28.0.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:86170409ec9b328fbd14de1c1482bd4f6ac457edba3669b77cc3a0d4703905fd", size = 141787 }, - { url = "https://files.pythonhosted.org/packages/9d/37/8a6005574fcfff7caa8b39457a11e5ad8318fc881c346c1a3d43712c79b4/mir_python-1.28.0.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b1786a88c51a92bf6edb8dc5d7a6e9d5e05bf09013f0d54766e1758229c39070", size = 144994 }, - { url = "https://files.pythonhosted.org/packages/c1/b4/b2f8869dcbd49acdb4f15ae7b41bacf81cf1516b497443a8d94f4c070c64/mir_python-1.28.0.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f239f3ff764419426d0fb56b10d9f10d02a56eefcdbad801ddfc8d8082f2a008", size = 1165253 }, - { url = "https://files.pythonhosted.org/packages/9b/0a/36d8e942f723778a8fc8c404ab524c984ef642a64c46d811b1d74b5f7e43/mir_python-1.28.0.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:131abca4833702cdf6cf2030a7c622b76ff462c300cfdf15a2a02b991d360970", size = 1182002 }, - { url = "https://files.pythonhosted.org/packages/6c/cd/a924b5d18331e2c4fde23a3a83ffec348843cc01508266e490e1679dd8bc/mir_python-1.28.0.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:1b71d950e4cf6cb25154f764cf5b6b0d3a1f76a7ee780e41fa26903b05342211", size = 142734 }, - { url = "https://files.pythonhosted.org/packages/cd/1b/845083bbb694d685774aa7873db8aabfca16ce5d7b2f4ce678846e000b50/mir_python-1.28.0.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:ce72bb13b89e3f665df955b31b15a40d01257f4537c29c9b42c894ba0bd88214", size = 145780 }, - { url = "https://files.pythonhosted.org/packages/b7/3d/10ab4bd8124cdeca83f6ad7491a52d664fd7da5ade1bf88737672e1d8a51/mir_python-1.28.0.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:d078c7ee0042db64d0f1b4f8c8f0a2d267e105d246545ad10c5d7438675601e9", size = 1166374 }, - { url = "https://files.pythonhosted.org/packages/1e/9f/d333a4846daaf844115d12a753257f91deec256db14c80ed6300863c3732/mir_python-1.28.0.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d3f4081cce66a427672c96b32faa4883c060632882bbddf9e9127bcd4a7fa", size = 1178444 }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/1c/0fe2ea3a8ba02a3735811609f46f6888ca39e18d11d34e98a31960811210/mir_python-1.29.1.26-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:f17d39142cdba15efde422ade813bbf4d83b15e3c51487eac0db4a4862344cf1", size = 126237, upload-time = "2026-07-17T13:32:46.545Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1b/6c24241664f5f6ba1358a4b03665c623ea440def6d8ad62e4b9c6ccff941/mir_python-1.29.1.26-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:f227b94ebc21218cecd25f2fa1e6ac1ecc98c5af8ccbbab5daa113221137b436", size = 129217, upload-time = "2026-07-17T14:05:36.822Z" }, + { url = "https://files.pythonhosted.org/packages/cb/f7/1e40f8fb973e69e3c121c41041eb2d0298608ccb848b3ee9ac9da6563e06/mir_python-1.29.1.26-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:9e90228914038ed317edcdb680667628285a6aaf9ea8abcc4845614c300d3fc9", size = 119140, upload-time = "2026-07-17T13:16:52.386Z" }, + { url = "https://files.pythonhosted.org/packages/e0/07/bed2f69335ea1055fc76dac9dab8afff92ca166dee60253833f7ec8ae42d/mir_python-1.29.1.26-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:4edf9b4fba7ee7adaa2c31668d9ffe33006f9fb0b8a142dc44775a9a928756c3", size = 121607, upload-time = "2026-07-17T13:40:15.613Z" }, + { url = "https://files.pythonhosted.org/packages/7f/45/b17c9f6add1c6aabcd58e983581a88bb833338fdb9ad601ed650ab092fa5/mir_python-1.29.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1bf2bde0dc1453ca67d4b343302a2159596548cb6f65d31f564c6e76f061e2ce", size = 125800, upload-time = "2026-07-17T13:27:36.165Z" }, + { url = "https://files.pythonhosted.org/packages/84/2e/edf17da43a670357b4ff4e7ac343a6c0ffca3057e1d5a0ae03bc453ae1fc/mir_python-1.29.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:5090887138be393bc721abf293c9177a1f3ade545efe1684d96061a343008531", size = 128746, upload-time = "2026-07-17T13:23:57.466Z" }, + { url = "https://files.pythonhosted.org/packages/94/70/47f19b88ce05791c39ad662389ccd80833ba8df435bd830f44b183277dbd/mir_python-1.29.1.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:790b094d065f6b62a2862b37d1c51dbec6664a3b3cda853dea577ff5d80d1082", size = 118685, upload-time = "2026-07-17T13:16:56.674Z" }, + { url = "https://files.pythonhosted.org/packages/ac/9a/696880f0618f7725c4daedc84bd6f60bb8ccf881ad4d4d83bf49e22dff82/mir_python-1.29.1.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:0353782e561b00fa65f38b3f8a8a5958790f6e92ba6d12f3378d06e80ef1252d", size = 121404, upload-time = "2026-07-17T13:33:02.516Z" }, + { url = "https://files.pythonhosted.org/packages/9f/0c/d60e89bec16900b56b18b7dad9b5c62fe01059e8c0f95e2195da475779dc/mir_python-1.29.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:2d81051c31f2e79584e2e75ff7003fb66afee93ace90ee6fc3fc89c8912d62be", size = 126303, upload-time = "2026-07-17T13:59:38.649Z" }, + { url = "https://files.pythonhosted.org/packages/2d/84/eac68651147db28589a42e2319cfa7cbfcb18b5ea2f3194917f8d0b224f1/mir_python-1.29.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:2296b588a6956ac5bd3b3c9343e15ba644edfc89489c55e1afe6649a3dcc2fca", size = 130964, upload-time = "2026-07-17T13:47:01.376Z" }, + { url = "https://files.pythonhosted.org/packages/90/59/4cfb13022308b89c6293f47be9921f46f24e43c4e7a49c91a2b796de5785/mir_python-1.29.1.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f3f0a898a303817fd8f9d40e7c7d973c495ce7914e05ed56e7e0f07df405ebf6", size = 121514, upload-time = "2026-07-17T13:17:15.662Z" }, + { url = "https://files.pythonhosted.org/packages/88/d4/3a9664e7c29612b3142f28985d8acd2a79665e5c64fa3e030abbd506f2f7/mir_python-1.29.1.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2874f5b357ee9a74fee1fa993620be802995e16420a0bfef67710d877827e730", size = 124817, upload-time = "2026-07-17T13:32:09.599Z" }, + { url = "https://files.pythonhosted.org/packages/25/8a/0c11e67519007341f8ec099345dff27eb9fdfc4161ccf1f9955b80c5f6a7/mir_python-1.29.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:67937d7ea6b6e55652b83574e6bd047ba0f53fc44f6a6680b3e2bc8b89e86e46", size = 125709, upload-time = "2026-07-17T13:16:01.509Z" }, + { url = "https://files.pythonhosted.org/packages/9a/87/1a938c4ba4a1476e1aca196b91f079767ab7fde7f2c4701b7b7c1bccc259/mir_python-1.29.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b3efb75fc23ce63d104e63d5c04fa1cd46be050b07df5c4fa00669a4771a0979", size = 130180, upload-time = "2026-07-17T13:43:52.033Z" }, + { url = "https://files.pythonhosted.org/packages/e8/41/c55f505779dacf9f2d513346b946172976de105e4f9f014596a7fa2a7685/mir_python-1.29.1.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c5276f17e1b59c2209f2e5f7962cfd8e113113262192ec88fecd962aa4764d18", size = 121406, upload-time = "2026-07-17T13:17:10.847Z" }, + { url = "https://files.pythonhosted.org/packages/16/b5/a3dfde9299397abddaa3e3abcd9827f43da0ce67f5cab5334fc7e0c90339/mir_python-1.29.1.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:78980944a6885a4a55e94ecc9e0ff726380a699abb8f46e4eaaaf2aad0ae49b4", size = 124700, upload-time = "2026-07-17T13:29:26.096Z" }, + { url = "https://files.pythonhosted.org/packages/ad/d3/e5d995af94ec1db6e8e831eb778974cfcad52fcdfa897b216120285a1ec7/mir_python-1.29.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:5d789897a0a454e399e5e81e638e5fb4b5d0a43fed29fe1b990d812144c057d9", size = 126859, upload-time = "2026-07-17T13:59:11.115Z" }, + { url = "https://files.pythonhosted.org/packages/db/ea/4b7d22aaa3772d80af8ccdab90ffb5ff187f0763a52400f24a763f2d0dbf/mir_python-1.29.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:6622846e21a8f797ba64889fc3658dabf40d254f97f9e54a47d4a91addecbcf5", size = 130548, upload-time = "2026-07-17T13:22:08.106Z" }, + { url = "https://files.pythonhosted.org/packages/36/94/14a8b521f3e639351fd00a35467b70e0798ce9f6607d301a41b8e12f6e23/mir_python-1.29.1.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:33d3d38fe9d68eb31d15c606160bf6c6719c2f48795ad20469e43a0a6987d830", size = 122200, upload-time = "2026-07-17T13:17:41.447Z" }, + { url = "https://files.pythonhosted.org/packages/45/92/e4645d6f1e9a965c64fbfe6b2bc6fb96efa8ece0216c7ea3a023fafe1c62/mir_python-1.29.1.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:864452e086b01a55a0b671da10c8ac68fef591948b215197bdffb87ac7d997f6", size = 124512, upload-time = "2026-07-17T13:30:12.727Z" }, ] [[package]] name = "mirlib" -version = "1.28.0.14" +version = "1.29.1.26" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "atlaslib-ecmwf" }, @@ -1039,31 +1050,31 @@ dependencies = [ { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/93/5f/68433ad635c3f4000d7abb5ff003fbd471ea3e9e95b824b69f838b1b35aa/mirlib-1.28.0.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:46f4a75a048e9f84ccdd0f9bc6f34f842821b1f1bfd2efb45ea81a1a7da8e96d", size = 1841237 }, - { url = "https://files.pythonhosted.org/packages/42/0f/ee7c23fbc3c28365a7205dd762ff710c4e6bd7071eebbb424f76a7cef459/mirlib-1.28.0.14-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:536ff4ef448fa28020523fc2eb46e3769bf4c45f16a46c19c89e813047a97105", size = 1943345 }, - { url = "https://files.pythonhosted.org/packages/31/da/744cd88fca55081b104d8919b4bcf233845160f0363710d2e1906dd13517/mirlib-1.28.0.14-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:297879a348369828869512ffc74ad9c4e7edd19c8e9d3e571b73e0a3cada2a58", size = 2443698 }, - { url = "https://files.pythonhosted.org/packages/5f/c9/9888c17c2b2c9f550e2badd0ecb3da601a2deae932fb8e52dbbe76f431b4/mirlib-1.28.0.14-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0b7f6cb1fa50a19db42f186457fcd4b65789ab7104b6b5e85fab5549fffceeb9", size = 2418511 }, - { url = "https://files.pythonhosted.org/packages/53/0d/db014a75eb41cf508344d79fbdaed8ddcf2ac7fe9462234211d02ce6fb03/mirlib-1.28.0.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:7424d1b530c8a92843f68e58edcba9250e16d7538cc569564c9c0ebcd82bf8f1", size = 1841234 }, - { url = "https://files.pythonhosted.org/packages/6a/5b/e32834eecf6beb2b1b306edb5b16351076fe541b219f214dfac2ec0d6e5d/mirlib-1.28.0.14-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:1eb777e8287f81a94681c5ae993d92b3808caa5d639e4c32a58e55716984cd56", size = 1943348 }, - { url = "https://files.pythonhosted.org/packages/55/65/31fbd5b8beaf8481493324e12a80dfb827e2fdef29c44bc34a30e1859403/mirlib-1.28.0.14-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:ed80faf6050b50195e5273515e95dc9e23495ea28ff07c498bb4603d2b095595", size = 2443708 }, - { url = "https://files.pythonhosted.org/packages/30/a3/debcff9af3924d2d0bb146574abc9134c7c5461c9d8adf733c3f7d83d0bb/mirlib-1.28.0.14-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a995ee022795d15af2dfb42cb5c45ec2451d58faca8ce9eb714251a5381992e1", size = 2418507 }, - { url = "https://files.pythonhosted.org/packages/9d/bb/a8dd678fed59b628eefe2f711a573051503bce11cbedef630db68c7b91bd/mirlib-1.28.0.14-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:54a9e743c0f27a8f13f4508e3bd7a02d7759c7c468e5d05b1814d7caa2e88829", size = 1841234 }, - { url = "https://files.pythonhosted.org/packages/ab/d8/cc1f718ad3a97ed31e8b0f6fcf0e96581bc5d5efbc9b2c5b98fe0e6e4a2a/mirlib-1.28.0.14-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:3b824d04054ee389b6f1c33318fc7c9460956bd46b3f5c70047d2c62a0c3bca2", size = 1943345 }, - { url = "https://files.pythonhosted.org/packages/da/02/9ff8daee9b0fed4225d5878eff5bbbb655c12de78db557abc316f68cca1f/mirlib-1.28.0.14-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:ca6592a6a3112de83926dc7b0f031ef3106bbb0ae48d691f9fa98cae74e8b1d6", size = 2443704 }, - { url = "https://files.pythonhosted.org/packages/8d/17/3b03bd3d51cbc92daff3a4c836c03772d8dff08848184fa8cd96e7a8e6e0/mirlib-1.28.0.14-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d9a05a505c517031bdde6df22694981020acb2394643d3b2ef3d3e671ae198a7", size = 2418508 }, - { url = "https://files.pythonhosted.org/packages/2f/de/9139de891d5f90c9206d84144252479c280f9ed91e2e8dae6514b27a9391/mirlib-1.28.0.14-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:265dc6dca2cf504a7d4814fb899592b7a819b8e67e379a02f19b3bee8af6b362", size = 1841236 }, - { url = "https://files.pythonhosted.org/packages/fa/7a/0c9a609ae9caa3cfeb223c68a737f359708d24bf6720cadf14765bc4f666/mirlib-1.28.0.14-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:910611265b485c4fe930c0e2ebbe9d2cf120939e47323110719c2df7b1e89c88", size = 1943342 }, - { url = "https://files.pythonhosted.org/packages/32/7a/eb555bb01a0ff101e17df4d04421dac77b066326e0752a9b021b358619f1/mirlib-1.28.0.14-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:55603b79501f174701551a8f8eb33e70af2cedd286c0087ec6748fef4713ea5d", size = 2443707 }, - { url = "https://files.pythonhosted.org/packages/63/a6/22aaf4cee53cb3fab79cb800ccb2a5747af0bb5be0f98412d44e2bc5c90a/mirlib-1.28.0.14-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:272e295c7823883dfb9f13f8590081e3986bf740b8dcd75de71a70afa55c40cf", size = 2418509 }, - { url = "https://files.pythonhosted.org/packages/02/df/3eca0f7687c0ad3c4860bb217bf1d45e7afcf1a1b295403d1cd82d3ad136/mirlib-1.28.0.14-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:e34e1421bdeaaf6124bfc0f18cf30be384341ef6edffe12ca9b2f55b5a2e2f1d", size = 1841237 }, - { url = "https://files.pythonhosted.org/packages/4d/9b/6c50a112c7373babc0b0898ff1ae31fbf4f0b0fe311290fcc72ececf4408/mirlib-1.28.0.14-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:bcd77e07a29d2b6eb3b022dfa9ba4626e11dda5508e75c7e5084e088c080a61e", size = 1943345 }, - { url = "https://files.pythonhosted.org/packages/18/83/c64882b5f369b09ebd4d5e8659ec62b8651a975705399ea61c1c9664b5f9/mirlib-1.28.0.14-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:61581a59a083e4d319ae2461b1bd8061d59d0accf359a1ff58b6ebd1aa735488", size = 2443706 }, - { url = "https://files.pythonhosted.org/packages/a3/11/b0e6405080181022907f763ca4c9ed302179d98fa50f7aed79b347b5f61b/mirlib-1.28.0.14-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:2baa2c3ae5e774da2e3e098a34e229a606a4542a6a1d1c2522131d6f3eb33bcb", size = 2418512 }, + { url = "https://files.pythonhosted.org/packages/24/91/fcde930b8c4183343f29fc06c849886220c21f98a0ea2acca3526d734f32/mirlib-1.29.1.26-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:4b870fbbaf77bc600dd7831bd2db3943ac24963baa9f663576a5673b0d43db01", size = 1843657, upload-time = "2026-07-17T13:32:48.924Z" }, + { url = "https://files.pythonhosted.org/packages/44/c7/ec467d8d1953111a5330ad2e390ce335094e9ad6a07882516f04b42d4842/mirlib-1.29.1.26-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:506ce6c002b22efa0e8fd18d104d02e442db9f3a0183cf774a64cee83b9b6d00", size = 1939199, upload-time = "2026-07-17T14:05:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/38/ee/66a6924b038944db5d3abd8f08294e341ba6f397984c9551864ba0179f40/mirlib-1.29.1.26-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7538d4649b8b13fbc259d3773c50cac18e7dec72363a345fa1d6a7b3fadd47b8", size = 2450643, upload-time = "2026-07-17T13:16:50.542Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1f/afc89cab356adfffb43e786efb48725388b1677bdd3f3411f5524d41ad8f/mirlib-1.29.1.26-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:9e7566abda5412e98f1e93605c1093f0d64ab4314eab8fcea9c3d254e83942ea", size = 2425117, upload-time = "2026-07-17T13:40:12.279Z" }, + { url = "https://files.pythonhosted.org/packages/4b/cb/649270717c07797bf93c6f7233719d1a178def42ff089e9cffd67653ee5d/mirlib-1.29.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:c65079c7be3c37b85c28c76434b96aaa98f9bd500c4fdbc234b0f9d815a6b581", size = 1843649, upload-time = "2026-07-17T13:27:38.637Z" }, + { url = "https://files.pythonhosted.org/packages/e3/99/01bc5fafa430598831afc31bb1727f514912862fcf2507e0ab3f90d51396/mirlib-1.29.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:69141f8a693964332d4994ec34e5de1747e64d2b5522899bf82ec140380e4b68", size = 1939878, upload-time = "2026-07-17T13:24:00.065Z" }, + { url = "https://files.pythonhosted.org/packages/62/f8/f7b7c024896bc9274609b3d0f900c137ce1740efe9821508925a13815bec/mirlib-1.29.1.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:1aac3bee63787042710da6c7a6480f6f4ec823062d0465a930299d15f9591ff1", size = 2450640, upload-time = "2026-07-17T13:16:54.762Z" }, + { url = "https://files.pythonhosted.org/packages/60/12/72dc2cb2f1d1fea279f0e0142fd798244234aff93fbd0184bd9d904e7e02/mirlib-1.29.1.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:279ed95888a89a67a9c8c3017a4fc61a44901f5b76185383fa47c2ee32ec9b74", size = 2425118, upload-time = "2026-07-17T13:32:59.533Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fa/758a67ef82a4f56a5821bb8482304638a69319421fb6ba201af44287a129/mirlib-1.29.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:3fc863b9cb6c4d3fd8abda065c69cba430142a014d2d3d1e1e91f85263b1c0d0", size = 1843650, upload-time = "2026-07-17T13:59:40.981Z" }, + { url = "https://files.pythonhosted.org/packages/83/02/91668531c58023cfa3fe49059b23db66114b035b1c3797cde66c5027b07d/mirlib-1.29.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:e935a4e39c515b99d3e5ab2ee051a8f386ed67b646ef774769883927b0a8d846", size = 1939875, upload-time = "2026-07-17T13:47:03.988Z" }, + { url = "https://files.pythonhosted.org/packages/96/04/5f7ddfe54cb4d22564c52f84a3845b2e3b5c00b776ab38bd9cd335956388/mirlib-1.29.1.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:034d9ec0ccd8a8a080faa04857e2a1328d9a8e3fb6569e08cd2bbbefa4c42898", size = 2450643, upload-time = "2026-07-17T13:17:13.761Z" }, + { url = "https://files.pythonhosted.org/packages/4c/d3/932b7ec146768300c4988262b879cd05df8290e455ee374dbe9feb39d218/mirlib-1.29.1.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a2b43f3930223b4eb1815f3e3f83258d6e3c39b4f8a6861f4cdde82165c937cd", size = 2425115, upload-time = "2026-07-17T13:32:06.877Z" }, + { url = "https://files.pythonhosted.org/packages/3a/f3/d5ccd589dadea6e195d3b443e58663dc56077cc53cc351880735d45f8c91/mirlib-1.29.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:8da65c1d57d0e19515c3d94669391e86eea939426086e1517b112324da7c6db7", size = 1843653, upload-time = "2026-07-17T13:16:04.221Z" }, + { url = "https://files.pythonhosted.org/packages/36/11/fd86dcb06dc2e5fbcff0c7ef5c6736b488055c196f6622193401d5864531/mirlib-1.29.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:e7f6cb1d8f5f9ffe5538878fbbdf9ae0cf98895145d7720f2aad8f7f83c811ca", size = 1939196, upload-time = "2026-07-17T13:43:54.618Z" }, + { url = "https://files.pythonhosted.org/packages/f5/86/8cad36c0e3a8ddf2e1019f8926a6ee3e30396525374a69866a9775109b08/mirlib-1.29.1.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c380bf036a17d3f6f3001831a3a031e6103b8ab2c774dc7b6690b4d58ee8f053", size = 2450643, upload-time = "2026-07-17T13:17:08.529Z" }, + { url = "https://files.pythonhosted.org/packages/c8/13/88ce4474729202753e0a056b857e3eac0665a7ea3241c196be28131c5c00/mirlib-1.29.1.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1d0a4d6971ad4dcbac7f1e2621a94cffc1b06cf8e2dd6636d08ddf069769f221", size = 2425116, upload-time = "2026-07-17T13:29:23.036Z" }, + { url = "https://files.pythonhosted.org/packages/07/5a/b64779e356b9bc1af7caa10c1094a644d5b1d339bd90e8623babf24f9acf/mirlib-1.29.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:b06507ad7ab1a93171049a507855ee651f71b2fac0937a75afabd71f3fbc0d72", size = 1843652, upload-time = "2026-07-17T13:59:13.577Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/9af899fa891da23a4012172902e06418ff83e018594d3a230fa6b34dff44/mirlib-1.29.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:bdb76653f8f3da8dfa099162f1674022304f48ddead525a9fd919cc74efd7a6b", size = 1939196, upload-time = "2026-07-17T13:22:10.814Z" }, + { url = "https://files.pythonhosted.org/packages/11/33/b004d969256e57677944329736a370c68206c07cbb1aff05133e70186955/mirlib-1.29.1.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:70d48cdb0a2d3e89d095fec8f6ed9de89cad21c087ae53d231d123febfda31b5", size = 2450644, upload-time = "2026-07-17T13:17:39.287Z" }, + { url = "https://files.pythonhosted.org/packages/ce/23/694345c717c046ffb23dcb6f3ca2f4a94749b804986d26ca1402a2ce1148/mirlib-1.29.1.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:df415d34ca8c933760ab3d54dea02ae68fab50ce4242b1d4f2f0b64fe57a36fd", size = 2425113, upload-time = "2026-07-17T13:30:09.66Z" }, ] [[package]] name = "multiurl" -version = "0.3.7" +version = "0.3.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "python-dateutil" }, @@ -1071,9 +1082,9 @@ dependencies = [ { name = "requests" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6c/ce/a00c9b44f43c4620ca004e4acb4c1e266b1ab48d2f6ad9e402f6bdbe44d4/multiurl-0.3.7.tar.gz", hash = "sha256:4201563fc8989baca7b525fdc69d4cd5a6c0cef4f303559710b9890021aab6d9", size = 18945 } +sdist = { url = "https://files.pythonhosted.org/packages/d3/35/a08c568e63fda8cb1b7f3168409c026d2b407ab6d82da09cea078b01c2d7/multiurl-0.3.9.tar.gz", hash = "sha256:799b7998bfabd4e15d51ba09d08eb5d0716762655bae6e09db00a14c3bfaeae6", size = 20044, upload-time = "2026-06-18T07:43:38.756Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl", hash = "sha256:054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380", size = 21524 }, + { url = "https://files.pythonhosted.org/packages/59/f1/2374970b2ad0ab20e28a0cd12eec1c234567fef31064f0903396d55ae3f1/multiurl-0.3.9-py3-none-any.whl", hash = "sha256:5acedb53343bb47ff6188405dc33e10c1f1713591de8929a69b966d4d395d88e", size = 22610, upload-time = "2026-06-18T07:43:37.727Z" }, ] [[package]] @@ -1081,78 +1092,64 @@ name = "netcdf4" version = "1.7.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "certifi", marker = "(python_full_version >= '3.14' and platform_machine != 'ARM64') or (python_full_version >= '3.14' and sys_platform != 'win32') or (platform_machine == 'ARM64' and sys_platform == 'win32')" }, - { name = "cftime", marker = "(python_full_version >= '3.14' and platform_machine != 'ARM64') or (python_full_version >= '3.14' and sys_platform != 'win32') or (platform_machine == 'ARM64' and sys_platform == 'win32')" }, + { name = "certifi", marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, + { name = "cftime", marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.14' and platform_machine != 'ARM64') or (python_full_version >= '3.12' and platform_machine == 'ARM64' and sys_platform == 'win32') or (python_full_version >= '3.14' and sys_platform != 'win32')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0e/76/7bc801796dee752c1ce9cd6935564a6ee79d5c9d9ef9192f57b156495a35/netcdf4-1.7.3.tar.gz", hash = "sha256:83f122fc3415e92b1d4904fd6a0898468b5404c09432c34beb6b16c533884673", size = 836095 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/f6/a2fe830a5659736838ed8329992294625b70a9691818650a0b8553ce3092/netcdf4-1.7.3-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:db761afd3a6b9482df018c4783e0bdf99141a41db1f14c68c89986effb182d57", size = 2803413 }, - { url = "https://files.pythonhosted.org/packages/29/74/57d07e2b418c683b7fe9b1b912b5636fc091ad83f3430e91828db98423e7/netcdf4-1.7.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ad4c2d9b469248d83cbacb70ad9e7d3a6c0ba27febe839c90192147199745ba4", size = 2417570 }, - { url = "https://files.pythonhosted.org/packages/ec/3a/c487ea7c7a20e34b1eecdfd8a64794e2e8d6ed2089cace3939769d2904af/netcdf4-1.7.3-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c6986d039717582071e55ae9c6fbebfe4e5bbbc3af122fc3db0c0c09c4d8955e", size = 9682170 }, - { url = "https://files.pythonhosted.org/packages/74/c0/5f2cf4bae134f4346ad9c11f94f3291d9bd60352b5d60810a0bba0952351/netcdf4-1.7.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:348e79b4f26f2e403fe3c54364e9297e4ef326c7ee12f9be01c037db853d26c0", size = 9520808 }, - { url = "https://files.pythonhosted.org/packages/06/57/c233d8dcf6efe0add48bb1d8d6fe32d7ad547d5c0d84bf0cbe7e5d82147b/netcdf4-1.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:6ab71f5d70e55e8584d168d5158efdb2fd8d350a033d0c27d942c3d399587f54", size = 7214638 }, - { url = "https://files.pythonhosted.org/packages/49/62/d286c76cdf0f6faf6064dc032ba7df3d6172ccca6e7d3571eee5516661b9/netcdf4-1.7.3-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:801c222d8ad35fd7dc7e9aa7ea6373d184bcb3b8ee6b794c5fbecaa5155b1792", size = 2751401 }, - { url = "https://files.pythonhosted.org/packages/f8/5e/0bb5593df674971e9fe5d76f7a0dd2006f3ee6b3a9eaece8c01170bac862/netcdf4-1.7.3-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:83dbfd6f10a0ec785d5296016bd821bbe9f0df780be72fc00a1f0d179d9c5f0f", size = 2387517 }, - { url = "https://files.pythonhosted.org/packages/8e/27/9530c58ddec2c28297d1abbc2f3668cb7bf79864bcbfb0516634ad0d3908/netcdf4-1.7.3-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:949e086d4d2612b49e5b95f60119d216c9ceb7b17bc771e9e0fa0e9b9c0a2f9f", size = 9621631 }, - { url = "https://files.pythonhosted.org/packages/97/1a/78b19893197ed7525edfa7f124a461626541e82aec694a468ba97755c24e/netcdf4-1.7.3-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c764ba6f6a1421cab5496097e8a1c4d2e36be2a04880dfd288bb61b348c217e", size = 9453727 }, - { url = "https://files.pythonhosted.org/packages/2a/f8/a5509bc46faedae2b71df29c57e6525b7eb47aee44000fd43e2927a9a3a9/netcdf4-1.7.3-cp311-abi3-win_amd64.whl", hash = "sha256:1b6c646fa179fb1e5e8d6e8231bc78cc0311eceaa1241256b5a853f1d04055b9", size = 7149328 }, ] +sdist = { url = "https://files.pythonhosted.org/packages/0e/76/7bc801796dee752c1ce9cd6935564a6ee79d5c9d9ef9192f57b156495a35/netcdf4-1.7.3.tar.gz", hash = "sha256:83f122fc3415e92b1d4904fd6a0898468b5404c09432c34beb6b16c533884673", size = 836095, upload-time = "2025-10-13T18:38:00.76Z" } [[package]] name = "netcdf4" version = "1.7.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", ] dependencies = [ - { name = "certifi", marker = "(python_full_version < '3.14' and platform_machine != 'ARM64') or (python_full_version < '3.14' and sys_platform != 'win32')" }, - { name = "cftime", marker = "(python_full_version < '3.14' and platform_machine != 'ARM64') or (python_full_version < '3.14' and sys_platform != 'win32')" }, + { name = "certifi", marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, + { name = "cftime", marker = "python_full_version >= '3.11' or platform_machine != 'ARM64' or sys_platform != 'win32'" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')" }, - { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version == '3.11.*' and platform_machine != 'ARM64') or (python_full_version == '3.11.*' and sys_platform != 'win32')" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64') or (python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/07/dfdd017641e82fadaf4e043d91fa179d34940c7d69175a3034dea877df9c/netcdf4-1.7.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b1c1a7ea3678db76bf33d14f7e202385d634db38c5e70d8cf4895971023eebb9", size = 23499427 }, - { url = "https://files.pythonhosted.org/packages/a7/6c/8cd98d166f30d378488c5235457d6af7df09f9925ab5ad03d6840543f42e/netcdf4-1.7.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d3f9497873454207f9480847d02b1b19a4bc81ad6e9166e1c17d4e2f8f3555d1", size = 22886591 }, - { url = "https://files.pythonhosted.org/packages/08/1c/ab31713a95160ebc6b4ec495cd4f03f38b235188a7e955bf33703c5039ca/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8e18294af803e80f8c0339f791901942e268c334c099bbd5f7ea8325a49801a", size = 10336881 }, - { url = "https://files.pythonhosted.org/packages/26/d7/bb16993af267acda23fe3de4ead2528cbe49043e391f732a1a4a15beec20/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b06c0b93fd0ecc1ec67a582f3ba98b7db9da1fa843c8f83fd75990e3701771e", size = 10182772 }, - { url = "https://files.pythonhosted.org/packages/9b/a6/e6fca338488a896c5e1f661ba3007e83f46700e1a59552b05013d501bc45/netcdf4-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:889ba77f084504aebaba9c6f9a88ac213431fef0e897f887cd35aef351ff7740", size = 21363337 }, - { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499 }, - { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667 }, - { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769 }, - { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122 }, - { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637 }, - { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377 }, - { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821 }, - { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133 }, - { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635 }, - { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725 }, - { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258 }, - { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171 }, - { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579 }, - { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032 }, - { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653 }, - { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682 }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352, upload-time = "2026-01-05T02:27:38.593Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/07/dfdd017641e82fadaf4e043d91fa179d34940c7d69175a3034dea877df9c/netcdf4-1.7.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:b1c1a7ea3678db76bf33d14f7e202385d634db38c5e70d8cf4895971023eebb9", size = 23499427, upload-time = "2026-01-05T02:26:54.13Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6c/8cd98d166f30d378488c5235457d6af7df09f9925ab5ad03d6840543f42e/netcdf4-1.7.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:d3f9497873454207f9480847d02b1b19a4bc81ad6e9166e1c17d4e2f8f3555d1", size = 22886591, upload-time = "2026-01-05T02:26:57.113Z" }, + { url = "https://files.pythonhosted.org/packages/08/1c/ab31713a95160ebc6b4ec495cd4f03f38b235188a7e955bf33703c5039ca/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8e18294af803e80f8c0339f791901942e268c334c099bbd5f7ea8325a49801a", size = 10336881, upload-time = "2026-01-05T02:26:59.382Z" }, + { url = "https://files.pythonhosted.org/packages/26/d7/bb16993af267acda23fe3de4ead2528cbe49043e391f732a1a4a15beec20/netcdf4-1.7.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0b06c0b93fd0ecc1ec67a582f3ba98b7db9da1fa843c8f83fd75990e3701771e", size = 10182772, upload-time = "2026-01-05T02:27:01.545Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a6/e6fca338488a896c5e1f661ba3007e83f46700e1a59552b05013d501bc45/netcdf4-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:889ba77f084504aebaba9c6f9a88ac213431fef0e897f887cd35aef351ff7740", size = 21363337, upload-time = "2026-01-05T02:27:04.21Z" }, + { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499, upload-time = "2026-01-05T02:27:06.568Z" }, + { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667, upload-time = "2026-01-05T02:27:09.421Z" }, + { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769, upload-time = "2026-01-05T21:31:19.243Z" }, + { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122, upload-time = "2026-01-05T21:31:22.773Z" }, + { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637, upload-time = "2026-01-05T02:27:11.856Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377, upload-time = "2026-01-05T02:27:13.808Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821, upload-time = "2026-01-05T02:27:15.413Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133, upload-time = "2026-01-05T02:27:17.224Z" }, + { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635, upload-time = "2026-01-05T02:27:19.655Z" }, + { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725, upload-time = "2026-01-05T02:27:22.298Z" }, + { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258, upload-time = "2026-01-05T02:27:24.837Z" }, + { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171, upload-time = "2026-01-05T02:27:27.166Z" }, + { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579, upload-time = "2026-01-05T02:27:29.382Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032, upload-time = "2026-01-05T02:27:31.744Z" }, + { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653, upload-time = "2026-01-05T02:27:34.294Z" }, + { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682, upload-time = "2026-01-05T02:27:37.062Z" }, ] [[package]] @@ -1163,62 +1160,62 @@ resolution-markers = [ "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", ] -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245 }, - { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048 }, - { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542 }, - { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301 }, - { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320 }, - { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050 }, - { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034 }, - { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185 }, - { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149 }, - { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620 }, - { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963 }, - { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743 }, - { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616 }, - { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579 }, - { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005 }, - { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570 }, - { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548 }, - { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521 }, - { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866 }, - { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455 }, - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348 }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362 }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103 }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382 }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462 }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618 }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511 }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783 }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506 }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190 }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828 }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006 }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765 }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736 }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719 }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072 }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213 }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632 }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532 }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885 }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467 }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144 }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217 }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014 }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935 }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122 }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143 }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260 }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225 }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374 }, - { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391 }, - { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754 }, - { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476 }, - { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666 }, +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3e/ed6db5be21ce87955c0cbd3009f2803f59fa08df21b5df06862e2d8e2bdd/numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb", size = 21165245, upload-time = "2025-05-17T21:27:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/c2/4b9221495b2a132cc9d2eb862e21d42a009f5a60e45fc44b00118c174bff/numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90", size = 14360048, upload-time = "2025-05-17T21:28:21.406Z" }, + { url = "https://files.pythonhosted.org/packages/fd/77/dc2fcfc66943c6410e2bf598062f5959372735ffda175b39906d54f02349/numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163", size = 5340542, upload-time = "2025-05-17T21:28:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4f/1cb5fdc353a5f5cc7feb692db9b8ec2c3d6405453f982435efc52561df58/numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf", size = 6878301, upload-time = "2025-05-17T21:28:41.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/17/96a3acd228cec142fcb8723bd3cc39c2a474f7dcf0a5d16731980bcafa95/numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83", size = 14297320, upload-time = "2025-05-17T21:29:02.78Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/3de6a34ad7ad6646ac7d2f55ebc6ad439dbbf9c4370017c50cf403fb19b5/numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915", size = 16801050, upload-time = "2025-05-17T21:29:27.675Z" }, + { url = "https://files.pythonhosted.org/packages/07/b6/89d837eddef52b3d0cec5c6ba0456c1bf1b9ef6a6672fc2b7873c3ec4e2e/numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680", size = 15807034, upload-time = "2025-05-17T21:29:51.102Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/dc6ae86e3c61cfec1f178e5c9f7858584049b6093f843bca541f94120920/numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289", size = 18614185, upload-time = "2025-05-17T21:30:18.703Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c5/0064b1b7e7c89137b471ccec1fd2282fceaae0ab3a9550f2568782d80357/numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d", size = 6527149, upload-time = "2025-05-17T21:30:29.788Z" }, + { url = "https://files.pythonhosted.org/packages/a3/dd/4b822569d6b96c39d1215dbae0582fd99954dcbcf0c1a13c61783feaca3f/numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3", size = 12904620, upload-time = "2025-05-17T21:30:48.994Z" }, + { url = "https://files.pythonhosted.org/packages/da/a8/4f83e2aa666a9fbf56d6118faaaf5f1974d456b1823fda0a176eff722839/numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae", size = 21176963, upload-time = "2025-05-17T21:31:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/64e1affc7972decb74c9e29e5649fac940514910960ba25cd9af4488b66c/numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a", size = 14406743, upload-time = "2025-05-17T21:31:41.087Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9f/0121e375000b5e50ffdd8b25bf78d8e1a5aa4cca3f185d41265198c7b834/numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42", size = 5352616, upload-time = "2025-05-17T21:31:50.072Z" }, + { url = "https://files.pythonhosted.org/packages/31/0d/b48c405c91693635fbe2dcd7bc84a33a602add5f63286e024d3b6741411c/numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491", size = 6889579, upload-time = "2025-05-17T21:32:01.712Z" }, + { url = "https://files.pythonhosted.org/packages/52/b8/7f0554d49b565d0171eab6e99001846882000883998e7b7d9f0d98b1f934/numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a", size = 14312005, upload-time = "2025-05-17T21:32:23.332Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/2238b898e51bd6d389b7389ffb20d7f4c10066d80351187ec8e303a5a475/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf", size = 16821570, upload-time = "2025-05-17T21:32:47.991Z" }, + { url = "https://files.pythonhosted.org/packages/83/6c/44d0325722cf644f191042bf47eedad61c1e6df2432ed65cbe28509d404e/numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1", size = 15818548, upload-time = "2025-05-17T21:33:11.728Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9d/81e8216030ce66be25279098789b665d49ff19eef08bfa8cb96d4957f422/numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab", size = 18620521, upload-time = "2025-05-17T21:33:39.139Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fd/e19617b9530b031db51b0926eed5345ce8ddc669bb3bc0044b23e275ebe8/numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47", size = 6525866, upload-time = "2025-05-17T21:33:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/31/0a/f354fb7176b81747d870f7991dc763e157a934c717b67b58456bc63da3df/numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303", size = 12907455, upload-time = "2025-05-17T21:34:09.135Z" }, + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, + { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/9e/3b/d94a75f4dbf1ef5d321523ecac21ef23a3cd2ac8b78ae2aac40873590229/numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d", size = 21040391, upload-time = "2025-05-17T21:44:35.948Z" }, + { url = "https://files.pythonhosted.org/packages/17/f4/09b2fa1b58f0fb4f7c7963a1649c64c4d315752240377ed74d9cd878f7b5/numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db", size = 6786754, upload-time = "2025-05-17T21:44:47.446Z" }, + { url = "https://files.pythonhosted.org/packages/af/30/feba75f143bdc868a1cc3f44ccfa6c4b9ec522b36458e738cd00f67b573f/numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543", size = 16643476, upload-time = "2025-05-17T21:45:11.871Z" }, + { url = "https://files.pythonhosted.org/packages/37/48/ac2a9584402fb6c0cd5b5d1a91dcf176b15760130dd386bbafdbfe3640bf/numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00", size = 12812666, upload-time = "2025-05-17T21:45:31.426Z" }, ] [[package]] @@ -1231,84 +1228,84 @@ resolution-markers = [ "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] -sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194 }, - { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111 }, - { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159 }, - { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936 }, - { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692 }, - { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164 }, - { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877 }, - { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487 }, - { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945 }, - { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406 }, - { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528 }, - { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119 }, - { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246 }, - { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410 }, - { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240 }, - { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012 }, - { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538 }, - { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706 }, - { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541 }, - { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825 }, - { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687 }, - { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482 }, - { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648 }, - { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902 }, - { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992 }, - { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944 }, - { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392 }, - { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220 }, - { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800 }, - { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600 }, - { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134 }, - { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598 }, - { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272 }, - { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197 }, - { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287 }, - { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763 }, - { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070 }, - { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752 }, - { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024 }, - { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398 }, - { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971 }, - { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532 }, - { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881 }, - { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458 }, - { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559 }, - { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716 }, - { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947 }, - { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197 }, - { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245 }, - { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587 }, - { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226 }, - { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196 }, - { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334 }, - { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678 }, - { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672 }, - { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731 }, - { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805 }, - { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496 }, - { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616 }, - { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145 }, - { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813 }, - { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982 }, - { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908 }, - { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867 }, - { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511 }, - { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064 }, - { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157 }, - { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728 }, - { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374 }, - { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286 }, - { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263 }, +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, ] [[package]] name = "numpy" -version = "2.5.0rc1" +version = "2.5.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", @@ -1320,60 +1317,60 @@ resolution-markers = [ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] -sdist = { url = "https://files.pythonhosted.org/packages/d3/e1/f2fe8f6113a657a1da83b358b16755e528a602c6976a43724a88f42b482a/numpy-2.5.0rc1.tar.gz", hash = "sha256:4de3e0d48e58ef53e32c756bddea2722b9dde7ec25f96afc5fe7ece620cc4cb9", size = 20610894 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/89/d5/39a7bac854c1c228d62e48535f431b6901159a1e054b39d13da363fe5fd4/numpy-2.5.0rc1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dc5f26f2155b2a64938adec26cd4652660e34588612cb08fe5e65860e638235a", size = 16790758 }, - { url = "https://files.pythonhosted.org/packages/da/a2/ede0d2a76e84f0a35796ecd3a2c8f9973b35bdc947ca3a395f3c7a72a157/numpy-2.5.0rc1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:859c145cf7ebe885a0c579a80bccfed9b35ceb6bbc23131149b118919764f407", size = 14807438 }, - { url = "https://files.pythonhosted.org/packages/c3/9a/c5b3472279f4c363c3919830a8005073d4cd6fb73816f1f9f8f5345405a6/numpy-2.5.0rc1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9cca573cd3610227420f3045a90bb5fd414f536043be16d8e46c8229830d244d", size = 5313467 }, - { url = "https://files.pythonhosted.org/packages/ae/50/aecf9566e752f8ee0c16367932ef061fdacdfcc02b87e13ecefa6a163a1b/numpy-2.5.0rc1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:5f75ef317f45dae8090124630254b842b3cc10eea7db4f7f1a688f37cd285d2f", size = 6650465 }, - { url = "https://files.pythonhosted.org/packages/94/d7/dad93b29f68ccc2310f3a071212eb2a60bd05b42f2bd50a3b807dcfa0323/numpy-2.5.0rc1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1586c886dfff6d814541ddedfa1317c4133ad2f171b89c8578b08f1d103a57c", size = 15153866 }, - { url = "https://files.pythonhosted.org/packages/9b/ea/0c9ebeceb3ab32585946799eb2ec86ff55d6b39d310e814c44855bd1d07f/numpy-2.5.0rc1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1763247152f2c929cf21767dfa36b2d3d91c304218e0751b79849859d595f50", size = 16661583 }, - { url = "https://files.pythonhosted.org/packages/cd/74/a2d32f679cbfe23c7202613c73a654be1db4cee933bc332ab835ad3de1ef/numpy-2.5.0rc1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ddfeee2c7a587838c578fb999aba1523fac7cea2802ec24b25c8eb8fec2214ac", size = 16513414 }, - { url = "https://files.pythonhosted.org/packages/d0/c7/935e9164ad43852ade3b8cee0340dc20fe461f1682b9071cc4e2b76acff6/numpy-2.5.0rc1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5417326ce746c188be90e817b3471e97f11616ae2ac7d190aa3c128971b9b93a", size = 18417787 }, - { url = "https://files.pythonhosted.org/packages/12/1a/bb52a27340e606d0b78e17bae36c11bf59c070f758889b2cacea984b58e0/numpy-2.5.0rc1-cp312-cp312-win32.whl", hash = "sha256:99cf48d26b3341361d3d70fc7490af1499de41d2dba28a721a835acc83cb2d87", size = 6053661 }, - { url = "https://files.pythonhosted.org/packages/47/70/c75cd23d7b49821dec7f0c5ae29e858d3f686f83b0b4ecfdc4c7a39db80a/numpy-2.5.0rc1-cp312-cp312-win_amd64.whl", hash = "sha256:e4afd8387b6617e61ecb0ceb60080c342366767b046fcc5c80516f19442f269b", size = 12416233 }, - { url = "https://files.pythonhosted.org/packages/c3/6c/c0ab9acddf4a4ca6fe77236938a9b85ad5227efaf628fc6e39b750276146/numpy-2.5.0rc1-cp312-cp312-win_arm64.whl", hash = "sha256:c072a4e5cad53345ab6ee29ca5b1a44df3cbc38991d066af71e6246583294e32", size = 10334234 }, - { url = "https://files.pythonhosted.org/packages/f9/2c/6735b782a68595ba9cd6f453d5cef8e637b6ee89af3555e8074e5084f188/numpy-2.5.0rc1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:342294d39fbaaf93d33c8950d6b4fb873034e5eabbb67676190dd79c07ba10af", size = 16785923 }, - { url = "https://files.pythonhosted.org/packages/00/24/1864bcfea4adb5fbffdb8063ae7993f537cb168fda1cfadcec3eb1afc940/numpy-2.5.0rc1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d3b9d87c617fbd05b9afb38cacd56a9f60e2d3c0dd96a7278028a07a1362e948", size = 14802138 }, - { url = "https://files.pythonhosted.org/packages/fc/f5/c15966ab370698ca66c8a64ac86172cbba3b62e9355f51c5b7f4c11a5840/numpy-2.5.0rc1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6b29138613d32227696eaad490d136cc114c2b3742cd379509d69cb97c013939", size = 5308122 }, - { url = "https://files.pythonhosted.org/packages/63/46/ab26a2d69fe6babd2883c1d4eead5dfba869525b239e3152c02ea7a92cc7/numpy-2.5.0rc1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:8954bbb79e6ebc60e218b97168603a02475745b557ee0749f36da131e553fffd", size = 6645557 }, - { url = "https://files.pythonhosted.org/packages/96/a8/e6265c8deacae8445a591186baa507da578eebbb8799a64230119fbdc18a/numpy-2.5.0rc1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a8bdefbd3b2c8ec3e060f0aeccbd7db4d10658de34fa9c161304a876d4b7a57f", size = 15149536 }, - { url = "https://files.pythonhosted.org/packages/f8/cb/38e09c2d8d8af874ae9650d51ba74fb65af5e016e10154454e4f585699d7/numpy-2.5.0rc1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a4c5bccef100aad3ca67f0c82fec6c9c41d93f45af082765a49248af9e4aa4c", size = 16648175 }, - { url = "https://files.pythonhosted.org/packages/18/b4/74ad66aab93cf2e45b01ffc00b552d988d2d3c7978f3b6f90415adf4529f/numpy-2.5.0rc1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fe949230df0a1c10e75e4ddbd0b382f1773c04ff8e4b988b43a3386b80885dd5", size = 16510274 }, - { url = "https://files.pythonhosted.org/packages/b0/c6/9025469bac3f2e11e327058e94e872b08d3e8eb22f9985ae20a05f46edbc/numpy-2.5.0rc1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9352b974bded4f5e82dd94c028207bdc26c5051c9aa76508215c8430a9f98047", size = 18406033 }, - { url = "https://files.pythonhosted.org/packages/e1/c8/e19a496ae871db9627f16c52ab7ba5393a2404dccefcc4c295c60b593da6/numpy-2.5.0rc1-cp313-cp313-win32.whl", hash = "sha256:79316ee5595e364c589a7d4b910006a818a2f8455e13ca1b544144d3b26b5c16", size = 6051769 }, - { url = "https://files.pythonhosted.org/packages/31/e6/899d0ae5ca1c12af50c84a251b3a9807326ac6f2549289d3318649b60f1c/numpy-2.5.0rc1-cp313-cp313-win_amd64.whl", hash = "sha256:009be5174f1d8ebcc2f246eb1606c3e695a864f7d79821f3be5d7e2758213753", size = 12411388 }, - { url = "https://files.pythonhosted.org/packages/db/31/aad462df2fda6948de95329dc1cb1d7f45651e51407937266f132b6a3e98/numpy-2.5.0rc1-cp313-cp313-win_arm64.whl", hash = "sha256:cc5330a6613229cc2511dd36578a0eb853e0aa6c248cf8d0a880bd775b8000e3", size = 10334033 }, - { url = "https://files.pythonhosted.org/packages/d7/26/defbaa994ef5a2626a5c0d22a4d6e7c9f53c4699a3a534f03abbaa1cb1c0/numpy-2.5.0rc1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d672d8b3414f94d170dd4903b594c44bec4ae5ac1fcf37fe61e7cb0eb94f510d", size = 16784532 }, - { url = "https://files.pythonhosted.org/packages/77/93/cac22c6d06e9a7220a1c167dd6cae45658460d8843f7b38c58673d9c4896/numpy-2.5.0rc1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a123a7f1ee049548835eea5af9e10f31ee1b334215b45b3fcc4a6f9240faa9e4", size = 14813009 }, - { url = "https://files.pythonhosted.org/packages/56/69/2f4fa0a9deb91de9d4b5384e19b396a4bbfb9de38a30134a07e5e59aa8f5/numpy-2.5.0rc1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2461850c9e41a1abd79fa8538b52bc7a828a8f5565398d3f9a7bf2da4e891fdd", size = 5319042 }, - { url = "https://files.pythonhosted.org/packages/f0/11/3448e6923d5e342e08d3929878472791d2e04ed4b348959a994d6b4f936b/numpy-2.5.0rc1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:f6c70078f019426adda42de7ed2369b7631ed41ee2cec7064b2f90db23ac6507", size = 6642057 }, - { url = "https://files.pythonhosted.org/packages/70/5b/c2885366e1e4c68f4c5683bedb4caf7f868a80b813269ae4e157b30b9b53/numpy-2.5.0rc1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00a7bcd1be5d066f7ff834706f2ffb6aee7ebbb544236b5293e5c702a5dc22b7", size = 15167044 }, - { url = "https://files.pythonhosted.org/packages/08/ff/8b877f5e097518319cc6c9dbb78c0dfed378109cf719b94dfa0a39d4d386/numpy-2.5.0rc1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:799814f0986b8fd3275b125b8efb1f066b3a9d1454d753e70648f38fb488bf0d", size = 16652160 }, - { url = "https://files.pythonhosted.org/packages/c7/d2/c8997aa8d92f599afec8b5c9d8e5f11a847cb894eee98a91cdde00b694f1/numpy-2.5.0rc1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4642001be298cc2b47d567feb499d4aa9a9b88dca795d6f147ceb16ebd685ff0", size = 16523955 }, - { url = "https://files.pythonhosted.org/packages/2f/5f/07de8d32301763b19a88fc8b63b0175971de3879537d0f501433bd736067/numpy-2.5.0rc1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:19592531defb5237022cd60120b4aea1639065cd05cdf0bde731a2ed96eff6ab", size = 18410190 }, - { url = "https://files.pythonhosted.org/packages/d2/0c/ed1012f7dc187de21f21b634161f9661c702c713973aaf339463009d4495/numpy-2.5.0rc1-cp314-cp314-win32.whl", hash = "sha256:dacc0758f3b01f15fbc7a0e57d868d5ba55d19fc2fd19a979b8f8d00cb5e13d4", size = 6104044 }, - { url = "https://files.pythonhosted.org/packages/b6/04/e24e16f1dde491350c64e82a37317da5f8f264d129ed4f9b5f117d4a4dfc/numpy-2.5.0rc1-cp314-cp314-win_amd64.whl", hash = "sha256:6089d453e0e6828f918636677fbceca9a82674b32f1fb327f9b1ee494ea36688", size = 12547661 }, - { url = "https://files.pythonhosted.org/packages/a4/d3/0b9bb44def2b4dbd6c962e30db3048a77c1ef3e8a3c1d9d57e95102b125b/numpy-2.5.0rc1-cp314-cp314-win_arm64.whl", hash = "sha256:185b5534a5e7d1d63742fefa30fe023f6372c2dc501a7944ab751598e3d1e0e5", size = 10611115 }, - { url = "https://files.pythonhosted.org/packages/32/85/2c2d9798cf5ece4a2ea2fdfa6446e829c7038924885432643e26cd539d58/numpy-2.5.0rc1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9b042e0c0e565785f7a949238c6f133b79b81798916764802c4fe6e42ec44152", size = 14929474 }, - { url = "https://files.pythonhosted.org/packages/3e/7c/63e362acb28a1829897d6ebddf5ff0b574296c33ba8c1ae8afe5b688c546/numpy-2.5.0rc1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:d6f5f960cf81af1bab473ae447b9bc0eeddfe75daa5c6d40666a06c64c85b935", size = 5435431 }, - { url = "https://files.pythonhosted.org/packages/3d/65/a50dd4c4b95bafe57cd578d2c80ef28e6f9b961c138eff6482147cf7e2c0/numpy-2.5.0rc1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09d9c6728008dcfe9b5fafb78000a1349176d095e25abae7828026eb8922a3ab", size = 6745844 }, - { url = "https://files.pythonhosted.org/packages/18/9c/e1e6dde63fa7b7df6bebd97c5f2ec91e918c58a264423338ae1ce2fa06dd/numpy-2.5.0rc1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a9e7396a878d06b74c3114753091178981cc1ed40de0afe924bed6961e5d53b", size = 15212366 }, - { url = "https://files.pythonhosted.org/packages/85/20/f11412d706cc3622a55a4a5d04bcc6ac1a77c935cb5771c5629a6304b799/numpy-2.5.0rc1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b13412a84ce0b894c63148a68ab743b7f405f696dad6a7e72d9534f535137bd8", size = 16688617 }, - { url = "https://files.pythonhosted.org/packages/01/c7/4002b397c8ff3fc1c0109ddb9f5b9cc0c10a16f1627e96c63d8a8fba83d4/numpy-2.5.0rc1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5b32736a68a67c0935a678e92a798209f3acbf857306cfe1a807142cb7a6c7c9", size = 16577833 }, - { url = "https://files.pythonhosted.org/packages/14/3e/3316e3b6db7505df3b8f66e74d5e102be4b9297a5661ba0f95df74991e96/numpy-2.5.0rc1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:28865f569d8c0caf71a3de85c95fd1f021aedb732bdd21bb1e37ed3a17644672", size = 18451445 }, - { url = "https://files.pythonhosted.org/packages/60/27/dca162784210d5046a0e83128614d07e42e0196c240e32679b55d65cb3a0/numpy-2.5.0rc1-cp314-cp314t-win32.whl", hash = "sha256:a06ddccbcc74b3bdc63a8f781af8792b4dcb2bec9a39c0ff3c630372e638a1c7", size = 6251446 }, - { url = "https://files.pythonhosted.org/packages/60/b1/bb7e49625673e0398d3ec6d1a7a7a46ba044569c8b6373d58d9931d1b823/numpy-2.5.0rc1-cp314-cp314t-win_amd64.whl", hash = "sha256:6a9405558adc50738a254e68c786467f7ab74a523a2689c51fb003863b8289c7", size = 12732397 }, - { url = "https://files.pythonhosted.org/packages/53/dd/bec9b508b770988aa3218de36847f31b0bab94699e83d9d3d401379718df/numpy-2.5.0rc1-cp314-cp314t-win_arm64.whl", hash = "sha256:e2857303f8c8bfe897addc98099dd166a192fe847dc5147a5d7e49625143edcf", size = 10680555 }, +sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" }, + { url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" }, + { url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" }, + { url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" }, + { url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" }, + { url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" }, + { url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" }, + { url = "https://files.pythonhosted.org/packages/eb/07/ec2a3f0c91761581d4b7104a740791800025983f9a4dc4e73f91a99aeac4/numpy-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1", size = 16796419, upload-time = "2026-07-04T17:06:40.37Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ab/ddb499fc4f8780354395face5b65c7fd107bcd6e1d667a5f07d046956f6f/numpy-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6", size = 11765832, upload-time = "2026-07-04T17:06:42.768Z" }, + { url = "https://files.pythonhosted.org/packages/88/b3/3c28c558a09fc72100c646dac6d2fce8e834c471b0edca01a29996706117/numpy-2.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d", size = 5325143, upload-time = "2026-07-04T17:06:45.466Z" }, + { url = "https://files.pythonhosted.org/packages/5e/0e/ce19b985bb15c596f4f05954e76cccc77c845083b3b8f938a6c68e523128/numpy-2.5.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1", size = 6659749, upload-time = "2026-07-04T17:06:47.288Z" }, + { url = "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd", size = 15164716, upload-time = "2026-07-04T17:06:49.494Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a", size = 16661440, upload-time = "2026-07-04T17:06:52.061Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d7/a41e3310c886fe457d36e670bbf24fae411aca8a7b6ad92a32afd924077c/numpy-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7", size = 16526305, upload-time = "2026-07-04T17:06:54.605Z" }, + { url = "https://files.pythonhosted.org/packages/53/75/4333a9a707c1edd3a4e1a0c58eca52c0f31e55089fa80db02b5565b24df7/numpy-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6", size = 18423008, upload-time = "2026-07-04T17:06:57.54Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/e314a32b1c11a2ffe818ddad3a57b50b4b6e1b6c487192eb50cdef0415d0/numpy-2.5.1-cp313-cp313-win32.whl", hash = "sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9", size = 6063885, upload-time = "2026-07-04T17:07:00.14Z" }, + { url = "https://files.pythonhosted.org/packages/10/70/800b3fca480af32df9e8ea9f3d4a0c8feb4b32d7f195d174eabbda4829ad/numpy-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74", size = 12425674, upload-time = "2026-07-04T17:07:02.387Z" }, + { url = "https://files.pythonhosted.org/packages/8b/0b/196350c122f50f6ca56846f2d71efd5e0d24b7b2e07355e019b2e2c7a11e/numpy-2.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107", size = 10350256, upload-time = "2026-07-04T17:07:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8", size = 16795063, upload-time = "2026-07-04T17:07:07.374Z" }, + { url = "https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75", size = 11776652, upload-time = "2026-07-04T17:07:09.907Z" }, + { url = "https://files.pythonhosted.org/packages/b5/59/2b844c7a6e9deff69b404a66221e1542937734f65d5e6e39411876053862/numpy-2.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2", size = 5335944, upload-time = "2026-07-04T17:07:12.227Z" }, + { url = "https://files.pythonhosted.org/packages/86/51/9bf7cb2cabcebc9e017e4ec7e6322b378317a542c08b4cb68479c1efc716/numpy-2.5.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b", size = 6656266, upload-time = "2026-07-04T17:07:14.368Z" }, + { url = "https://files.pythonhosted.org/packages/83/3e/fb7615b211b82a32f44d5180a6d421b61f84d4fadd578b48ba4ac34e189f/numpy-2.5.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95", size = 15179720, upload-time = "2026-07-04T17:07:16.272Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21", size = 16664835, upload-time = "2026-07-04T17:07:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/97d6475ee91afe2587797d09446f9d3e475ad4cb681662d824809327b75a/numpy-2.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373", size = 16539135, upload-time = "2026-07-04T17:07:22.015Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/4db81e4ba0be7e2776b1de68c82aa862c7f8ec27e1b4927d4ae075e20678/numpy-2.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438", size = 18426684, upload-time = "2026-07-04T17:07:24.941Z" }, + { url = "https://files.pythonhosted.org/packages/1f/64/c0ba2d90724d450279a7df8f32057241070250a26a7e2b5337d77347f481/numpy-2.5.1-cp314-cp314-win32.whl", hash = "sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace", size = 6116103, upload-time = "2026-07-04T17:07:27.622Z" }, + { url = "https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a", size = 12562177, upload-time = "2026-07-04T17:07:29.887Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/49707938b6dd0a78a9178dd93227dc89e4c11af47f5c798d70366e8d0483/numpy-2.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0", size = 10627739, upload-time = "2026-07-04T17:07:32.568Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c7/bb4b882cfe7f299cbc8b66e42e7dd78cf9d14e40f9469fc5e3db7e15b3bd/numpy-2.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22", size = 11894709, upload-time = "2026-07-04T17:07:34.941Z" }, + { url = "https://files.pythonhosted.org/packages/40/3f/5af7f4a7f6224aef48017aa82bb6174c7a659d724be0c75017b7e64a55b4/numpy-2.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7", size = 5453810, upload-time = "2026-07-04T17:07:37.495Z" }, + { url = "https://files.pythonhosted.org/packages/20/c9/3474309bc94d634d3f9c3eddf03250ecb8c22cd948ef16fef69a77cc5d7b/numpy-2.5.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d", size = 6761189, upload-time = "2026-07-04T17:07:39.563Z" }, + { url = "https://files.pythonhosted.org/packages/90/8a/558ae39fdd55d7e7f7fef9a84a6e964ac6b23edbd2a07e52bb084500507d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09", size = 15225039, upload-time = "2026-07-04T17:07:41.682Z" }, + { url = "https://files.pythonhosted.org/packages/63/27/ca7392b2d030277bdf0273e7d23255b3ee57d57a7c170a6f4fb3981e1e5d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4", size = 16701306, upload-time = "2026-07-04T17:07:44.611Z" }, + { url = "https://files.pythonhosted.org/packages/02/42/03d53ae7996c44d4374a8262e9dc41671fd56cbb98f7d47ef85cf5da4c6b/numpy-2.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1", size = 16589955, upload-time = "2026-07-04T17:07:47.694Z" }, + { url = "https://files.pythonhosted.org/packages/7b/15/6c1784ae469640e65db111e9a34b3d0f14d91e8a38b9ce34810ced370dbb/numpy-2.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077", size = 18464252, upload-time = "2026-07-04T17:07:50.684Z" }, + { url = "https://files.pythonhosted.org/packages/94/a8/f98e50356cf167df656c526c2dfeec2d7dde182f2a3da4b458a5938e2776/numpy-2.5.1-cp314-cp314t-win32.whl", hash = "sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf", size = 6263298, upload-time = "2026-07-04T17:07:53.445Z" }, + { url = "https://files.pythonhosted.org/packages/72/ac/96ae880cdecad0b3275d9359fcec72667b49a4863c9f12942e43679dda02/numpy-2.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af", size = 12748623, upload-time = "2026-07-04T17:07:55.384Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5a/4d2b1601df3602dba7a14f3348ba9bfe94a18adb428e693df6154c293831/numpy-2.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb", size = 10697674, upload-time = "2026-07-04T17:07:58.506Z" }, ] [[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]] @@ -1390,192 +1387,124 @@ dependencies = [ { name = "pytz", marker = "python_full_version < '3.11'" }, { name = "tzdata", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763 }, - { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217 }, - { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791 }, - { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373 }, - { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444 }, - { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459 }, - { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086 }, - { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790 }, - { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831 }, - { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267 }, - { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281 }, - { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453 }, - { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361 }, - { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702 }, - { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846 }, - { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618 }, - { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212 }, - { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693 }, - { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002 }, - { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971 }, - { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722 }, - { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671 }, - { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807 }, - { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872 }, - { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371 }, - { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333 }, - { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120 }, - { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991 }, - { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227 }, - { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056 }, - { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189 }, - { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912 }, - { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160 }, - { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233 }, - { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635 }, - { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079 }, - { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049 }, - { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638 }, - { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834 }, - { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925 }, - { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071 }, - { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504 }, - { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702 }, - { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535 }, - { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582 }, - { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963 }, - { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175 }, +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f7/f425a00df4fcc22b292c6895c6831c0c8ae1d9fac1e024d16f98a9ce8749/pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", size = 11555763, upload-time = "2025-09-29T23:16:53.287Z" }, + { url = "https://files.pythonhosted.org/packages/13/4f/66d99628ff8ce7857aca52fed8f0066ce209f96be2fede6cef9f84e8d04f/pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", size = 10801217, upload-time = "2025-09-29T23:17:04.522Z" }, + { url = "https://files.pythonhosted.org/packages/1d/03/3fc4a529a7710f890a239cc496fc6d50ad4a0995657dccc1d64695adb9f4/pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", size = 12148791, upload-time = "2025-09-29T23:17:18.444Z" }, + { url = "https://files.pythonhosted.org/packages/40/a8/4dac1f8f8235e5d25b9955d02ff6f29396191d4e665d71122c3722ca83c5/pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", size = 12769373, upload-time = "2025-09-29T23:17:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/df/91/82cc5169b6b25440a7fc0ef3a694582418d875c8e3ebf796a6d6470aa578/pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", size = 13200444, upload-time = "2025-09-29T23:17:49.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/ae/89b3283800ab58f7af2952704078555fa60c807fff764395bb57ea0b0dbd/pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", size = 13858459, upload-time = "2025-09-29T23:18:03.722Z" }, + { url = "https://files.pythonhosted.org/packages/85/72/530900610650f54a35a19476eca5104f38555afccda1aa11a92ee14cb21d/pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", size = 11346086, upload-time = "2025-09-29T23:18:18.505Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, ] [[package]] name = "pandas" -version = "3.0.0rc1" +version = "3.0.5" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", -] -dependencies = [ - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, - { name = "python-dateutil", marker = "python_full_version >= '3.14'" }, - { name = "tzdata", marker = "(python_full_version >= '3.14' and sys_platform == 'emscripten') or (python_full_version >= '3.14' and sys_platform == 'win32')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5a/c5/f2825785a7323c8d7ea4f38ca9827ddfc39b85daacaac65478f9c7b8883f/pandas-3.0.0rc1.tar.gz", hash = "sha256:76bfc5790d0b713d082a0b2094d6e4af7399bfb3dd6207cc7046fe4de73c09de", size = 4591349 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/09/4424270dca9439bd160cffb0ec14ff64ba1db7e6faa175460b7f597091a4/pandas-3.0.0rc1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:48947da2aa7bba25eaec003a9371cc226923d315b23f4ed0d789cedd26d36d9b", size = 10254993 }, - { url = "https://files.pythonhosted.org/packages/aa/97/02d214ae964f785e7d44369376a6c2cadf16d2b60f74f5a41e07e962a5f2/pandas-3.0.0rc1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3bc0fea0ea8f880ad25c5cbb7127062329db4e2f9359987a28e73d323ed86ea7", size = 9857564 }, - { url = "https://files.pythonhosted.org/packages/9f/d4/a8f326866ab231f47b271d73572fb9b88305d9a8a3b39651e26e5be73fdc/pandas-3.0.0rc1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef6d93391a3141d1fcee0a840d7c643a010cbccb6788cb54005083e0d5a419f1", size = 10692582 }, - { url = "https://files.pythonhosted.org/packages/db/65/6cb69ff29c0ca1c247c7a8ddedef413743da8b812cf3422c2f76a93f39ff/pandas-3.0.0rc1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a292c1c3f942a303503b31b3fd3208a322996eed11750216c030d33abf14e65f", size = 11189923 }, - { url = "https://files.pythonhosted.org/packages/ef/ba/7de315c1b1b92526f7292889728d2b06d0643b55155485a15537c33f3328/pandas-3.0.0rc1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b991708cfa6b9614a8ea456f024ed1e4ce8d63bc5ae50e10f8d1feb0910ce9c6", size = 11705445 }, - { url = "https://files.pythonhosted.org/packages/c0/5b/98411c9cece8610d67f2726c0c2fb00da440bd5f02f85094e1bb9ea713af/pandas-3.0.0rc1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1f6c00b691e0ebd61bf0f33c36b449146749825a49d3b06130b095a13e32fe84", size = 12264634 }, - { url = "https://files.pythonhosted.org/packages/03/d9/605cd207628168a8358cede23b7d3583b84668c4e7d1e4991e4a05812cdd/pandas-3.0.0rc1-cp311-cp311-win_amd64.whl", hash = "sha256:3648f1ac0d3b14511c0b386e91a69035ac69f61718130e0e8539bb0babdd6702", size = 9830326 }, - { url = "https://files.pythonhosted.org/packages/be/ef/74c19261a88961e2a20dadd40e07d75f2656d054131fe8296c1334d7676b/pandas-3.0.0rc1-cp311-cp311-win_arm64.whl", hash = "sha256:dd24891447a8934157850676ed129ac0cd98402eb93f07b782fcc9fa93d4536c", size = 9086258 }, - { url = "https://files.pythonhosted.org/packages/4f/0a/7f123a0f7578e6a8b94991d266cfa130ee45fa18f6a5b2f75a4ac7d2ba88/pandas-3.0.0rc1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ca0f232f96b03a5ad740a4d1eeec645468cd5a8483d6b1837a734504c4eec563", size = 10275419 }, - { url = "https://files.pythonhosted.org/packages/2c/a4/9bc11e764c2486eb424467873423a5bce0f596da3497f4611d3820ed17d3/pandas-3.0.0rc1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:004af2dbf173c2fe9995dabe718af838c4d8671e7106fd4bb613929fb001a82d", size = 9819488 }, - { url = "https://files.pythonhosted.org/packages/a4/51/393a842e02e61c9bdfeaad622640dfd56169527cdce5e445b0d8d6452194/pandas-3.0.0rc1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbf7e33a97ffb6dc03db963468e4cd66d5e6ade5fa5e8c4dfcb3fcc0ceea6e6b", size = 10329689 }, - { url = "https://files.pythonhosted.org/packages/52/5a/6da76c91a7f63d319d0c5b3d3a0a69bd1d16c328d363c6ae67ff16f7c6ef/pandas-3.0.0rc1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a6658025142d593a2bfc1a9f682241ce9212ca74ab51baea82806719c51ebec3", size = 10808895 }, - { url = "https://files.pythonhosted.org/packages/9f/c4/25742560c6152ed536711c8a1c3faa76fd49830f83753bc1d058311e8b3b/pandas-3.0.0rc1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b825dc038231e30d5c37c4964a9e49268728c8b0b85387f99099554f55c18268", size = 11344446 }, - { url = "https://files.pythonhosted.org/packages/71/ca/434f126314d248b7cdf5d5fffbbc636fddb9558c846bdbf296bde2fe1525/pandas-3.0.0rc1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4cca8813044026ffc2b1a8605373b4b0732ced718bd7aeabbfe0e48221fa99d4", size = 11859023 }, - { url = "https://files.pythonhosted.org/packages/5a/31/d4bf97305517461832a9902b637a860adf1a7eec75c3e69cc6f9f4bfae4d/pandas-3.0.0rc1-cp312-cp312-win_amd64.whl", hash = "sha256:ac7db90ab91f48d1b1e6097aa9dbe61b969779656823ec7763969a50e866a772", size = 9678063 }, - { url = "https://files.pythonhosted.org/packages/71/5f/a2eb25c8a875c52d2a8646344c98820cb258d325a7dd8c8ca172fcfae36d/pandas-3.0.0rc1-cp312-cp312-win_arm64.whl", hash = "sha256:34248e90a4cf78e23a4f200e7170f130aaff4ea0dd8658f86d9e4a17bf547dd6", size = 8987736 }, - { url = "https://files.pythonhosted.org/packages/9a/79/8c6fafc30524eb0e2e5a82393ecb2406e7d6de5481ecef7e13bebd275aa5/pandas-3.0.0rc1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:044db67a11f7e0929abc0fc185b5eb0c5acaaae49a530bd0465fe575d45957be", size = 10254087 }, - { url = "https://files.pythonhosted.org/packages/9a/ff/8769cfa4385b68971ca1c06507fec1b860e27882067b22fe5bfb33d8edf4/pandas-3.0.0rc1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:120f7af1ae1b8efada81d056055372fc290d4ce1d600d76dc890a19b6d2e8d5c", size = 9795585 }, - { url = "https://files.pythonhosted.org/packages/36/52/987234b57de087c0033b759b5e5187df18a6901513a7f249ab001380b1f3/pandas-3.0.0rc1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73be4d724c2ffebdf8ff23faa4c8df6d67b1ec3194ed71e9fbe0cc50c50ce938", size = 10295946 }, - { url = "https://files.pythonhosted.org/packages/83/90/bb1954b289edc504d762e83fe20258ee5e4f79fced57da2a428189469429/pandas-3.0.0rc1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59d3587fe2721fa5f7471c296d559cb4517b4fe49981bd659f78ca08e45ff7f4", size = 10807690 }, - { url = "https://files.pythonhosted.org/packages/fa/17/bd30bda0940505aa495a9fde45ded79e396ba7c58fd0f857a9e4a682ab02/pandas-3.0.0rc1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:03a05703a2ed9973d2c0d5e694746d5d49f0388993f0976b3749e298134a96ea", size = 11315199 }, - { url = "https://files.pythonhosted.org/packages/b7/50/999d89d7c2091fa8edaa6f62fa4c860e181e58d1abe399c15297b0007c17/pandas-3.0.0rc1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2f1044833fde08efb3b704103c6101b036d14c7235794ab46dccad63f636037f", size = 11862393 }, - { url = "https://files.pythonhosted.org/packages/09/84/9d0739fcba030ef4fceb44d2f3cfeadd979f64c3401e6744a9065957585a/pandas-3.0.0rc1-cp313-cp313-win_amd64.whl", hash = "sha256:87b5a0bdb6d84cf084f00385d9d1e13ed021f06ed6ff56ab00c5b35426065626", size = 9679758 }, - { url = "https://files.pythonhosted.org/packages/57/03/9d5f9cda9d20c5088378fc0b6b61b321563690dea2d38f9858ae6c26034b/pandas-3.0.0rc1-cp313-cp313-win_arm64.whl", hash = "sha256:bec194517d86e787e622a7c222c0ac79684fe2199402f23b40dcd1777ec5cd0b", size = 8978875 }, - { url = "https://files.pythonhosted.org/packages/6e/ca/bb0d50f789f2d2265ebfa0c447bad55d0d23b5ad3f378553c56fc9f5e4ed/pandas-3.0.0rc1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:73090fae0db99be7d592e31705641e0acdeb64adc8d004bde0d3301e90da79b5", size = 10688695 }, - { url = "https://files.pythonhosted.org/packages/52/f7/312ecbcbf946da8e13b80b54b22d199c28ee984d48f1c18bd26ae0da0bf0/pandas-3.0.0rc1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:487e849ef1e54fe4b1fe77263395bf89d7901b774bd8dd277812a46f30739921", size = 10340069 }, - { url = "https://files.pythonhosted.org/packages/f4/f1/d0afce2464d7c5b80bf013031e2284e8af5ef953a53b23276b6d6de63d78/pandas-3.0.0rc1-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb1da63e460ee42a657e29a9a6b924f7dc2d17af4490b633ce1bd77ffa43bf0b", size = 10248902 }, - { url = "https://files.pythonhosted.org/packages/2e/7c/5b3f307a4ad22958c65643f4dc5457a113bd510fb9034742b737d56b553c/pandas-3.0.0rc1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b4b3ad6681d8d6228be3e256bdb68adc1c5d1baccfb89506dde6f015e828bead", size = 10646068 }, - { url = "https://files.pythonhosted.org/packages/b5/ed/b1de6ba7b15ef69087148cdaa5ce7943504c8eb3f93cd591a3d8780e7f65/pandas-3.0.0rc1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2b1f8a762bb83b6ad43463d1eb6ff0723078f0c5388fb1b2bcd901e2e6c78577", size = 11269830 }, - { url = "https://files.pythonhosted.org/packages/37/55/09b48513324c501dc44256630c596539769d48bb5ad63f1a9a3844852e07/pandas-3.0.0rc1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eba48d31c0bd8a6e7875e19a2091fd2d6d5eb99288ac99f164b29819f3cc07e0", size = 11715984 }, - { url = "https://files.pythonhosted.org/packages/1b/58/005a7a65495ceaa8f33af59357a0956ebab675dc94c34237bdc055681490/pandas-3.0.0rc1-cp313-cp313t-win_amd64.whl", hash = "sha256:637d2ce2463550fc3850da660659f747083d608e5882f66becebf74816c5493d", size = 10415674 }, - { url = "https://files.pythonhosted.org/packages/09/03/fe99286d560985875d3e1262dec0836b40464a7f1b2831e1753c9888def7/pandas-3.0.0rc1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ea4381c9dfcfc4411f1d1a3e343f75aa19fff02a76e5137bfb6ac5e20f4c7d59", size = 10254348 }, - { url = "https://files.pythonhosted.org/packages/23/f2/70225a80286d23c1769e6c83765b7472f7939a63df3182a0d14c2a460151/pandas-3.0.0rc1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:95277356c9db56be89e156848feedc63e9f904f8f5ab41846fed32173a8d541c", size = 9845954 }, - { url = "https://files.pythonhosted.org/packages/a2/db/3a776e1d45610ebfd6242597250260d4fac8e166ec0cf9921d3e44f022c3/pandas-3.0.0rc1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05c1906f250dee01b4c7c50b9b8094508297bddf6d9ebbe85c69be9dafa27213", size = 10375126 }, - { url = "https://files.pythonhosted.org/packages/a1/9c/b81fa64eb08add53afb9559a0d7ceef97b71b14c8bfa610c3b5029b76db1/pandas-3.0.0rc1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2d31e26f0d7281abfcf2a1bd06d9cbf1aadc2d4a879e32ec21d28c2c2089d231", size = 10829079 }, - { url = "https://files.pythonhosted.org/packages/ec/8c/5a1a185e06c39f9a74ceb5c14f726087f63c746af78de7ae5be350599fc9/pandas-3.0.0rc1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:12a8dc27d4eb67601b8cbf9d91860fa888cda71f709bd7faab3a782bae19770b", size = 11387158 }, - { url = "https://files.pythonhosted.org/packages/38/5e/976211fad4f53e3d6c01c628154b2479bad9775e325376e88fbd5738e2c9/pandas-3.0.0rc1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:43958f4d1c4752c2faf3c1c99017630c0588449ac85c6cc9d3d239711dddd7b9", size = 11896934 }, - { url = "https://files.pythonhosted.org/packages/8e/9e/be6624881769064b3f121a30bf7a89c9af198b1c75eef5ae69f4c53dfca9/pandas-3.0.0rc1-cp314-cp314-win_amd64.whl", hash = "sha256:5ab21f63f653dab4fc08d2069b0824d8cdbd270aaba9501bac91dde0fdb8dde4", size = 9797402 }, - { url = "https://files.pythonhosted.org/packages/18/52/fa78dc8fb20d43cb3d07f91d75c77651484674404d1258631b7ab31c811e/pandas-3.0.0rc1-cp314-cp314-win_arm64.whl", hash = "sha256:99189e4252c076f6d1e4920c586a83b9e035f82c9ff98fbffc6ecf29e1be5de4", size = 9125442 }, - { url = "https://files.pythonhosted.org/packages/39/b2/50bdb01a3aaf7293ec13ef2670c667236e01b76b949bd932b2a76fecf903/pandas-3.0.0rc1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:e41bdd1f06a6f99cbc59245a7765ee2c9ae991674ac7e0baaa39496aa57b6a36", size = 10710181 }, - { url = "https://files.pythonhosted.org/packages/3c/d7/1087ebda369b6876c45bfdcf0da45ffbfa30d0dfae46ad6f99742b0f81b3/pandas-3.0.0rc1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:548f52fe74e42e13df4f80adb454200c87b7fa174ff7f4ac02c4c7fcc32946a7", size = 10356297 }, - { url = "https://files.pythonhosted.org/packages/1e/50/17ee68dfc09fce0a22bbb0995638341beaae26862419b24347d6389e8de4/pandas-3.0.0rc1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdd95f95174fcc78bce40e97ca26c46ffff89cd57cf1d305b30e5d041b0aefef", size = 10271853 }, - { url = "https://files.pythonhosted.org/packages/66/8a/dca73266405348b09b18ec316b9abed924d512994f96df51bce2fa287375/pandas-3.0.0rc1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05015e0c0b6edd4b44eab818bf72d1f1604f39d5ac4bc975d5f042bdff858c54", size = 10674707 }, - { url = "https://files.pythonhosted.org/packages/ca/6d/339116388730ac9ccd10e7b491038dbab1c4cafec863deede7c4cc14994d/pandas-3.0.0rc1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b619f74031c8474b58ee75bd4fe5a56f89fe0009cdfbb0736b2eae3deca6dded", size = 11290051 }, - { url = "https://files.pythonhosted.org/packages/60/ac/4e0d391ae631f936a3710ced3e479045a40637bd5c86e5789429c89e627c/pandas-3.0.0rc1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9e7bdc6a804138950f5ca6e6fc873ace92c8a4d17ac23b6900a9c95b95d88e14", size = 11742749 }, - { url = "https://files.pythonhosted.org/packages/61/f8/aaaf23563baada8c5cea7f5d46b77c8aa71e7af683c1b731de1c719201b5/pandas-3.0.0rc1-cp314-cp314t-win_amd64.whl", hash = "sha256:34d8098a4e3ce9c0d6c235072be3ba3a94f42da4a884aa5ccdcde1f0aad47933", size = 10819676 }, - { url = "https://files.pythonhosted.org/packages/6e/50/1f57a2bafd90a6ddca96e05c015a79074ea5f1959904dd7be44124625df9/pandas-3.0.0rc1-cp314-cp314t-win_arm64.whl", hash = "sha256:85dbfc9cc0b26f6f07b91c66f357617fa6183985f887caf447f0b52c66cda232", size = 9389780 }, -] - -[[package]] -name = "pandas" -version = "3.0.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' and python_full_version < '3.14'" }, - { name = "python-dateutil", marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, - { name = "tzdata", marker = "(python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and python_full_version < '3.14' and sys_platform == 'win32')" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495 }, - { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250 }, - { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558 }, - { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611 }, - { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670 }, - { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708 }, - { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609 }, - { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596 }, - { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846 }, - { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550 }, - { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965 }, - { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600 }, - { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824 }, - { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889 }, - { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463 }, - { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158 }, - { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071 }, - { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690 }, - { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634 }, - { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243 }, - { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659 }, - { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880 }, - { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091 }, - { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282 }, - { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016 }, - { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210 }, - { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126 }, - { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051 }, - { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796 }, - { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741 }, - { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958 }, - { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065 }, - { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101 }, - { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553 }, - { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065 }, - { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188 }, - { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966 }, - { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755 }, - { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658 }, - { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242 }, - { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369 }, - { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306 }, - { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394 }, - { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717 }, - { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897 }, - { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855 }, - { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464 }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "python-dateutil", marker = "python_full_version >= '3.11'" }, + { name = "tzdata", marker = "(python_full_version >= '3.11' and sys_platform == 'emscripten') or (python_full_version >= '3.11' and sys_platform == 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/be/4f/5f3422a2afec5ffc46308b79e53291365a93748b498ac2e58bead0197916/pandas-3.0.5.tar.gz", hash = "sha256:dca3734d6ab7c906e6730f0788b0a1dbb9f2467731f9711f77995c8e9d62d712", size = 4658219, upload-time = "2026-07-22T22:19:28.819Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/ef/f1fd7431d635bf20015489bf0bd69c17fff1018de773540f651455a3916b/pandas-3.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2946e77e4a53cd248cbde631a12f0e51c8324ce354c3eba4d20147c1ad6f4282", size = 10397178, upload-time = "2026-07-22T22:17:48.274Z" }, + { url = "https://files.pythonhosted.org/packages/31/b4/0eafac990a431561187694126de01f9b12559549b4d86360c0c4bd870fde/pandas-3.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71ecc8fb7ed1a7aa4392316b5309a6347e8e7f832f38fd897846b3a1457a9298", size = 9990736, upload-time = "2026-07-22T22:17:52.388Z" }, + { url = "https://files.pythonhosted.org/packages/de/21/359880af3ea9b7cb23bea5b51e8e70ef3866c03be09da9a2787e18e330a8/pandas-3.0.5-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b173f5951ff6b8b0ec7675e20dff3c97b7e7a57dfcce387c2d7c5afe87cb7899", size = 10814438, upload-time = "2026-07-22T22:17:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/d1/50/d6cc4d7e508bbccf5d6027314a8312bc7ac73d0ec7f195f53838daafab40/pandas-3.0.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2c0cf1dd9b55a22d105fc46c1b489af3bd42264fcba7c66297bf47a9a1d9c78a", size = 11323634, upload-time = "2026-07-22T22:17:56.858Z" }, + { url = "https://files.pythonhosted.org/packages/70/2b/d5f0a8c90dd0ae04e64ba53b871afb796ec026b615086d382ddc2ade729b/pandas-3.0.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0fac0010c75e4efb6b99e249c183a8993ce0dc95c240f9b120a5e67c727b7928", size = 11850860, upload-time = "2026-07-22T22:17:59.1Z" }, + { url = "https://files.pythonhosted.org/packages/5c/30/183aec2e19adf778a98d29b5729a0a68f4cc4ebf9b9c3b70d0297355bcb1/pandas-3.0.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:08d24fe11a17dc33bd6e937dc9c665f9cba08fbdc9f657f405713515febe300d", size = 12411100, upload-time = "2026-07-22T22:18:01.485Z" }, + { url = "https://files.pythonhosted.org/packages/fa/9a/31f4983f191af51ab2a8f2d0c7b33dff3a84da26533f982fff02c2f9e28b/pandas-3.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:b1261758dfb6cf12c3cff8300e21cefad30e7ec709abb4c24ac7318e6a52462a", size = 9968804, upload-time = "2026-07-22T22:18:03.903Z" }, + { url = "https://files.pythonhosted.org/packages/49/97/7886c89a39045c69ad82cbceaf3343810480c8ef49a216319ce8183860a6/pandas-3.0.5-cp311-cp311-win_arm64.whl", hash = "sha256:679f4e85b30ddb1515458ab1e788d3e260eae369b1f78da7a3aa4cac8ebf4a2a", size = 9205447, upload-time = "2026-07-22T22:18:06.134Z" }, + { url = "https://files.pythonhosted.org/packages/1c/54/1dc810ea558d1320b597aa140a514f2fdf1d2ea09c38cf556f13ea712ec9/pandas-3.0.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa290c16964d4963fbfbc358928239cf3bd755b20e988ce944877def2f44471d", size = 10411717, upload-time = "2026-07-22T22:18:08.307Z" }, + { url = "https://files.pythonhosted.org/packages/68/56/fbe81c09195924d8b7b8d4461a20458fe80a6a5ed6b24f0314da684277e1/pandas-3.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2e26bb46934b8a2ca0c3de1d3d606fc5f6746584791b2db264d58cf370e08dc", size = 9957095, upload-time = "2026-07-22T22:18:10.6Z" }, + { url = "https://files.pythonhosted.org/packages/e0/51/fac252f4a913ed5eabf3c11b880a9e8d5a6c10f0b2129d0462212d238b4d/pandas-3.0.5-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73fa87b08a7ef706f8aafda39ddaccf2a99047bea62d8c88a0361bcafb2237bc", size = 10485458, upload-time = "2026-07-22T22:18:12.834Z" }, + { url = "https://files.pythonhosted.org/packages/12/98/e976540c1addf70442be7842a18cf70884a964abbf69442504f4d2939989/pandas-3.0.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d373ce03ffd84010ed9839fa73672a9c8256990532e158440c0085db7d914b34", size = 10998091, upload-time = "2026-07-22T22:18:15.209Z" }, + { url = "https://files.pythonhosted.org/packages/a4/8c/1f29b5be8d3fc47dd7567eb167fabba2085879b31e0287ce7cba6d3d2ff4/pandas-3.0.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a29c53d85ea98c5e792c59ef82ee9fbe6ca902c0d0adb6b23f45ef894cd7bf6", size = 11499501, upload-time = "2026-07-22T22:18:17.689Z" }, + { url = "https://files.pythonhosted.org/packages/9d/e2/bd9c98ad2df7b38bde002adde4cdf353519da51881634323b126c55997f9/pandas-3.0.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a5ad3b02ed6bc7d7ae9b70804b2c6aa31827489d150f8e623ce82491b82085d7", size = 12060559, upload-time = "2026-07-22T22:18:20.147Z" }, + { url = "https://files.pythonhosted.org/packages/f3/9a/ffbd852d58bd74a617fe2f8ee6a58a96982271ce41cf981eab22190b4a4b/pandas-3.0.5-cp312-cp312-pyemscripten_2024_0_wasm32.whl", hash = "sha256:b2acb4650527eec6822c3dadb2b771277b65e7dae7a267d4bccf65fd1bb3fbce", size = 7197652, upload-time = "2026-07-22T22:18:22.502Z" }, + { url = "https://files.pythonhosted.org/packages/70/b5/d2d3e9ae73362ba4229651b0ee1455cf78073a1ce585f6ff693782ce263e/pandas-3.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:80a611068e8a3ac23f7398c6c14eb46dc974e5cc9997f653e2dcfd1da74edd41", size = 9831691, upload-time = "2026-07-22T22:18:24.534Z" }, + { url = "https://files.pythonhosted.org/packages/52/51/dea1e89d6a6796b9c43f85a09b484ee03edb8a4c4842e73e200a8c11301c/pandas-3.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:25ff585b972a18ef1fe9ffa3ac6544d9950508aa76832e5147640b6022821e49", size = 9105796, upload-time = "2026-07-22T22:18:27.064Z" }, + { url = "https://files.pythonhosted.org/packages/bf/09/7b95c4a0025227d6f118c4039b423412ac6a982db02864166185d812fbc7/pandas-3.0.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c1c05a767fe8e5b4fe9e1c29806829c582052eaedb9120a3da83ba3f69e24a5b", size = 10385742, upload-time = "2026-07-22T22:18:29.346Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0c/dc78fd8c4da477b4b5e8ad37295af352190d21ef63a9ee1bc071753074cc/pandas-3.0.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b86765f268b56f7e665b93bce9d5df69dee7f99e595cf8fb839483ab315942a3", size = 9932067, upload-time = "2026-07-22T22:18:31.833Z" }, + { url = "https://files.pythonhosted.org/packages/3e/71/3592c055cf44df9808550f9368ceda80ff2b224d355ef73fe251dcda1802/pandas-3.0.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c597ecf5616b5c420372c1d4d4c00dbbfba7398bea857dcc984347e1ea48417b", size = 10466756, upload-time = "2026-07-22T22:18:34.195Z" }, + { url = "https://files.pythonhosted.org/packages/e3/70/4363150359f95b4cb4bcbb34ca23572bb5495749a621a8f3d5a1ddfd293c/pandas-3.0.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4b11c36e218331d0387cbe3a0a5f75162357a1d92d57b2b08a336ff94b19b2be", size = 10938525, upload-time = "2026-07-22T22:18:36.81Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d0/317e7a0c67c0e69fa905a0161409397a7dc2d46ff611f6ca4803352c042b/pandas-3.0.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf52e1f61d229496da17dc7ab54acdee627357e7008fd4fecba3d0ba2937fa58", size = 11489303, upload-time = "2026-07-22T22:18:39.287Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8d/36dade89b49e4f9d5cbdbe863772581f98c0c6d78fc39ad4c557f6f2e17e/pandas-3.0.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:db172144bb56422bd157812f3b021eacc255451470b31e2c633c349490a1cfee", size = 11989004, upload-time = "2026-07-22T22:18:42.208Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ba/18c4ec8a746e177da05a9e7a7963781d8ea195780724f854601b6ebd6b78/pandas-3.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:0d298e951f23016ce4699951d044ae6418dbc91bf68cefca0f77666fcbb4e5c6", size = 9826896, upload-time = "2026-07-22T22:18:44.539Z" }, + { url = "https://files.pythonhosted.org/packages/de/ec/28a57266b753799a87b8bc79e7887ac6fd981b8c6d2978a0b7e7b6bd708c/pandas-3.0.5-cp313-cp313-win_arm64.whl", hash = "sha256:66266d3442a5e8b3c90274c2b8b230bee42dd1c286bc822cc2f9f2c7e12b883e", size = 9094790, upload-time = "2026-07-22T22:18:47.468Z" }, + { url = "https://files.pythonhosted.org/packages/51/2f/cf6aae281264f4463f0875bcbb15fd2bb6d291cc535187dad1732475e4a9/pandas-3.0.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2f264fc46911cc8131a7322a16199bbf8e353d27c10bb211f5bd0c814324dc36", size = 10390034, upload-time = "2026-07-22T22:18:49.818Z" }, + { url = "https://files.pythonhosted.org/packages/06/ec/5189518c7a7659c4bdcc6b1eb32c46c6f3c86b0661ffd84143d1112c7732/pandas-3.0.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:53730687fcd161883b24e10411c06d6a4c0f2275d2faf3bb2bc25deb4ba8007c", size = 9980065, upload-time = "2026-07-22T22:18:52.249Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f1/598503ce8d7e3c35601e0747ba288c7864baae66380725bc12f13f884dfe/pandas-3.0.5-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:960d3ebcf249f75206899fcd2c6de53f736b7265759ced0d3e559df0b8b709b0", size = 10545532, upload-time = "2026-07-22T22:18:54.813Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/ceae2adf7034e07e9910299fe412e1819c4f0dd520700a888bcb03625448/pandas-3.0.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e94c2c5ca43bd3ca32bf64d32308887b65e5f9bfd8023ea52755107a999f93b", size = 10963120, upload-time = "2026-07-22T22:18:57.42Z" }, + { url = "https://files.pythonhosted.org/packages/66/25/86e0f4451874eb79e688deeebe3c451fec4557f8952005818d800ee8ac7e/pandas-3.0.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e819dd5f62966b481a8cb649d3299ebd886a1ea91ed5a99bf7ce77c98d18ab94", size = 11563178, upload-time = "2026-07-22T22:18:59.729Z" }, + { url = "https://files.pythonhosted.org/packages/f3/45/8643daa3b4147e433adfcccefdd0380d3aad79d86b15d8999730fe1944d5/pandas-3.0.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3c5ed2e7c06e91d340dfd091d7934f9bc82e4a36b95f647f090b9d1c9ac649da", size = 12028708, upload-time = "2026-07-22T22:19:02.164Z" }, + { url = "https://files.pythonhosted.org/packages/96/58/ad979ae617615576e8aafd569c9d4b62f1191d896e38f51d66ba06f3b89a/pandas-3.0.5-cp314-cp314-win_amd64.whl", hash = "sha256:cd8f7c6dc98527058ee6264219343f5392240a6f1bfa654fc5d79023020d0c92", size = 9951806, upload-time = "2026-07-22T22:19:04.596Z" }, + { url = "https://files.pythonhosted.org/packages/69/32/7ac03886b304049a9d2625ee88f59af760d8a93bd30ed9239bce7b9869a8/pandas-3.0.5-cp314-cp314-win_arm64.whl", hash = "sha256:5183427f5a8156d480f30333777bc978be93650a49a7c01db26adffe95b31e85", size = 9238297, upload-time = "2026-07-22T22:19:06.836Z" }, + { url = "https://files.pythonhosted.org/packages/be/ed/1d1f2ee5547d5167face2376d11c8b2a4c7bfff5a416ee7a9046891fab1e/pandas-3.0.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:303da736987d481074ca720ada325f8bd80c64ebc2d45ed79b29df3aaa4a26ca", size = 10849690, upload-time = "2026-07-22T22:19:09.391Z" }, + { url = "https://files.pythonhosted.org/packages/57/55/17e17152e98fbb0c4b1e562bc65387a2f20a80db0f4a86bf8d3a0e4248d4/pandas-3.0.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3b2801bbb049d0136f6c213eae02b5fca969384fc2064dd728d8620552aa49da", size = 10509945, upload-time = "2026-07-22T22:19:11.773Z" }, + { url = "https://files.pythonhosted.org/packages/88/90/817d44dbf83facf9556f33576d9af0a241981e7bb5c00606c0bcb5df8dda/pandas-3.0.5-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cce3a9d11d2b1f82c69a27ec1f4948a170e2c403c4bbfa8cca62e3fdebe2ef3a", size = 10392197, upload-time = "2026-07-22T22:19:14.024Z" }, + { url = "https://files.pythonhosted.org/packages/f1/da/889f00c0a6f5aa1545add70abbf01502dff87ab577adb855bd631c54d2f2/pandas-3.0.5-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef01af4d8dc6cd2c8d6c7736f149574ef93fe043811eeb5e445f2647154b5040", size = 10862726, upload-time = "2026-07-22T22:19:16.351Z" }, + { url = "https://files.pythonhosted.org/packages/bc/98/f1e934fb3c98fce859c6147c6785816c7b5b9ab7821115c5d8c4de9842b9/pandas-3.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e2759e890db96dfcffdbd9b86c3c2cb6afaf58def482820317e06163ec1066cd", size = 11414864, upload-time = "2026-07-22T22:19:18.981Z" }, + { url = "https://files.pythonhosted.org/packages/fe/be/d448af7d657d82e1888dd8551f79c6d6fb161080b5b9752d84d910ec2319/pandas-3.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b58b1b39d46a5862e3fb18f50d1a201398619d16a0f9f73f57eea5583cf0e63c", size = 11925105, upload-time = "2026-07-22T22:19:21.515Z" }, + { url = "https://files.pythonhosted.org/packages/29/c1/ccb4238212c8c4f496c584f3044d94e0c030ed8e1d68999db46c91c2242f/pandas-3.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:1c10461f6eeb35d8f05b6184c65c8b9991663b66c46b1d559b682cb34ae7c6ea", size = 10387612, upload-time = "2026-07-22T22:19:24.257Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cf/6a51b2c38980e04c279fd2fa908a1b0982064e860444acfca4ec2e2c8359/pandas-3.0.5-cp314-cp314t-win_arm64.whl", hash = "sha256:3c5015fd1730fbf883647e88068176c839c102cea883ba1769a6f4593bfc1f8c", size = 9509776, upload-time = "2026-07-22T22:19:26.694Z" }, ] [[package]] @@ -1586,9 +1515,9 @@ dependencies = [ { name = "locket" }, { name = "toolz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029 } +sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029, upload-time = "2024-05-06T19:51:41.945Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905 }, + { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905, upload-time = "2024-05-06T19:51:39.271Z" }, ] [[package]] @@ -1599,14 +1528,13 @@ dependencies = [ { name = "attrs" }, { name = "eccodes" }, { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pandas", version = "3.0.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, + { name = "pandas", version = "3.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pint", version = "0.24.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "pint", version = "0.25.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763 } +sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763, upload-time = "2026-02-26T17:03:46.376Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633 }, + { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633, upload-time = "2026-02-26T17:03:45.16Z" }, ] [[package]] @@ -1623,9 +1551,9 @@ dependencies = [ { name = "platformdirs", marker = "python_full_version < '3.11'" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225 } +sdist = { url = "https://files.pythonhosted.org/packages/20/bb/52b15ddf7b7706ed591134a895dbf6e41c8348171fb635e655e0a4bbb0ea/pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80", size = 342225, upload-time = "2024-11-07T16:29:46.061Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029 }, + { url = "https://files.pythonhosted.org/packages/b7/16/bd2f5904557265882108dc2e04f18abc05ab0c2b7082ae9430091daf1d5c/Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659", size = 302029, upload-time = "2024-11-07T16:29:43.976Z" }, ] [[package]] @@ -1635,15 +1563,15 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ @@ -1652,27 +1580,27 @@ dependencies = [ { name = "platformdirs", marker = "python_full_version >= '3.11'" }, { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106 } +sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106, upload-time = "2026-03-19T21:57:08.72Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488 }, + { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488, upload-time = "2026-03-19T21:57:07.022Z" }, ] [[package]] name = "platformdirs" -version = "4.10.0" +version = "4.11.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224 } +sdist = { url = "https://files.pythonhosted.org/packages/78/9b/560e4be8e26f6fd133a03630a8df0c663b9e8d61b4ade152b72005aec83b/platformdirs-4.11.0.tar.gz", hash = "sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0", size = 31953, upload-time = "2026-07-21T13:09:36.565Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743 }, + { url = "https://files.pythonhosted.org/packages/7d/68/d8d58938dfb1370b266a1a729e6d77a985be23689a0496498ee17b2cbf90/platformdirs-4.11.0-py3-none-any.whl", hash = "sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74", size = 23247, upload-time = "2026-07-21T13:09:35.422Z" }, ] [[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 }, + { 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]] @@ -1688,7 +1616,7 @@ dependencies = [ { name = "mir-python" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "thermofeel" }, ] @@ -1703,7 +1631,7 @@ dev = [ requires-dist = [ { name = "array-api-compat" }, { name = "code-meters" }, - { name = "earthkit-data", extras = ["fdb", "mars"] }, + { name = "earthkit-data", extras = ["fdb", "mars"], specifier = "<1.0" }, { name = "earthkit-meteo" }, { name = "eccodes" }, { name = "fdb5lib" }, @@ -1721,35 +1649,35 @@ dev = [ [[package]] name = "prek" -version = "0.4.4" +version = "0.4.11" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/13/3d71b3adbf385f7dc7fb6e16d6e25421fd8398b45d8f8410a328bf22bd3f/prek-0.4.4.tar.gz", hash = "sha256:4ec5771153d158a0e4473933b7fd9b51e1b1f57f2df50aeb7560ea6812226dc5", size = 470641 } +sdist = { url = "https://files.pythonhosted.org/packages/c4/1a/73b6dae5ce7e997cb35a69bfe1d25a798e85fa3d2eabf95324563f461b30/prek-0.4.11.tar.gz", hash = "sha256:4a14cb9bbae850605ae3904fbdbb12f0e00c12455efaa2266da8fb8e5c0350d7", size = 516254, upload-time = "2026-07-24T17:05:35.107Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/9f/68a577888edf7f2647a652b02899508ccd84e57ce1f79c51a44edfd308d7/prek-0.4.4-py3-none-linux_armv6l.whl", hash = "sha256:23cfd96a25de1c93e3c43c746643b80489e3b2fa49ca9c0ffd6022e51535c900", size = 5550271 }, - { url = "https://files.pythonhosted.org/packages/35/b8/5427a0023116343a8d787b446536a7fddfa5db7eec7713dd05618da2bdfe/prek-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a427b792c4436f49732b1f6ebccf221fdcc6390c148474280da9c2c6eaabc9c4", size = 5910136 }, - { url = "https://files.pythonhosted.org/packages/9d/4f/d751e90b7e768e472e054cd41cbe502589436ca9c1a13bfe4fa9513f9cde/prek-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b998038fc92c990e03147eb5b95b0f2c394517f8857ab911aac8e092f1b9b3ab", size = 5470124 }, - { url = "https://files.pythonhosted.org/packages/c6/fe/e73241c5777b6f9b6b95132febbd27f9be9e89912e9e93c0982680593af2/prek-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:9cebca8c15da4f1d6e3a25e6ae0611425c8596e926222050f2588c390e42df8a", size = 5732725 }, - { url = "https://files.pythonhosted.org/packages/ca/a3/329bd910e7e5d9d0eb5e571f3ba48023213744e78411afb81f5ef8356cab/prek-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8742ac26363e74c855df6215a709d5db183204d00ac0f1a722b13aed4da3cd0", size = 5457953 }, - { url = "https://files.pythonhosted.org/packages/3d/f8/d642990513d9707398506bad45d39173d84266231f7d919899f694aefe2c/prek-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2b7c8710546a1e894afa7ab022030cd4e21f1ee7ffb301b4360773d22f1f00f", size = 5860556 }, - { url = "https://files.pythonhosted.org/packages/8d/17/a2e29cb278503a8c18612d8a62a15020648dc768e2e94bc4b4d4c9411e07/prek-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e02bd4d5e05c500e4d9f70f024e30d13aa361dc490724b7f476d2e35542c239f", size = 6652492 }, - { url = "https://files.pythonhosted.org/packages/ab/10/ad3270b18135ee5d1af6f6cf4b0c8601b1cc2cb38d16e835081da820833a/prek-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a25041733de987a47e5a7bace47182a6f0e2ae5f960cb54c1d4630afd2591", size = 6113837 }, - { url = "https://files.pythonhosted.org/packages/59/d9/e8c201b9b41c4561673cea01c630ab604df89d13e952f87dbcb807d32588/prek-0.4.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:0b04a0f36d07474f2a9fc5b1ba1197a1b326b2b211f39cd74cf0d4613545f7f4", size = 5729155 }, - { url = "https://files.pythonhosted.org/packages/e8/cd/227b0494fcbc91e8fe15c2a4db9e6dfff95314ef38db3e40e6ea96db249d/prek-0.4.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f032ccbe2d6edc345f81a6d772c18cc169d63c27b5a8292bfe416b352bdfee57", size = 5590775 }, - { url = "https://files.pythonhosted.org/packages/cc/e0/9d750b9cf21ece884afdc15668d0f005a36588fe1b0bb5ff4a8112ab51cb/prek-0.4.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:bad3586fcea3e913f0edf2e8f132f97889e03976b7ee3d120fd294ad4e89a5eb", size = 5437864 }, - { url = "https://files.pythonhosted.org/packages/3a/48/e2e5c0299590ad18a253c0ac09508b615baa1b382010c511186572f711d3/prek-0.4.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4058638532c6dcbf0076d23b9264cbdd9f0f0e320762e237a6b9e4e4b854a766", size = 5718579 }, - { url = "https://files.pythonhosted.org/packages/54/48/7fb3d4e7f664d1ce8ae35ec553872ffddf9fab4c5081735fdaae610b1e7c/prek-0.4.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:619bab14071670249777deea0cc0b29d904c4a514cf33b20e583900a544f0399", size = 6231622 }, - { url = "https://files.pythonhosted.org/packages/46/c0/a4ddbf38034afe67cfa97c4bd81c86429ada098e7c323218d9f9fd061566/prek-0.4.4-py3-none-win32.whl", hash = "sha256:143154b329c05b2f9fa3230e604d02d9c4297dd43f96135a8ba166772e8ecd60", size = 5240317 }, - { url = "https://files.pythonhosted.org/packages/bc/8c/fe97b5b095187bb2f93bbe406bccf108c879e5e4c83f165809b0d16ce0fb/prek-0.4.4-py3-none-win_amd64.whl", hash = "sha256:c38c5140ae2ea55ebb02e6ca590a416664ea1af287cdd21f54daeec53a81015a", size = 5626104 }, - { url = "https://files.pythonhosted.org/packages/25/63/3586226d536796e65f8e725b531d6104e55caaa18659bdcb512661629586/prek-0.4.4-py3-none-win_arm64.whl", hash = "sha256:3efa28fb37b9ddbafb7759da8d497f0d36cf02a05816e15d6541f5669d5d2114", size = 5470399 }, + { url = "https://files.pythonhosted.org/packages/8e/d7/a00b2de492a80e99b1698e72c1d196ac3ed544dc7ee0ada261ac066e78e0/prek-0.4.11-py3-none-linux_armv6l.whl", hash = "sha256:3830cb7cc47e837888b8b464ecb21355a69235cfacef0fd89101e17f09345d63", size = 5770511, upload-time = "2026-07-24T17:05:12.829Z" }, + { url = "https://files.pythonhosted.org/packages/c1/1e/f97c74defcd5d5645888cb99fcdd9b8b48cc7247cf31e64414d106d56d66/prek-0.4.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:45facadf9c2332b28e6ab2744312ae0275a93ab5a437da8bcc53a8c7260cb4b0", size = 6118049, upload-time = "2026-07-24T17:05:14.451Z" }, + { url = "https://files.pythonhosted.org/packages/d9/92/8367d26421ee6fe6019a63928fb0ed31179cd0d6199879c524f89ef4c95c/prek-0.4.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2f8a194b1d00d24dff8baff691c99e2668339da2da3482b4ee99c1a0f2409378", size = 5601478, upload-time = "2026-07-24T17:05:15.81Z" }, + { url = "https://files.pythonhosted.org/packages/e1/6f/7617c9b87afaadede4167720aae7ef12d7e51167db903bc8fbac0cadef7b/prek-0.4.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:21d93e6d76bf3d7a9bb70c6ac86ef372adaee50068c45749e6b9e1c2ac4ec939", size = 5932071, upload-time = "2026-07-24T17:05:17.217Z" }, + { url = "https://files.pythonhosted.org/packages/ef/41/6796a4011b04212333259064aa885a71d03d9581ba9bff52db3ce58d1f06/prek-0.4.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7fb07cde2d2156efa6980122b3f13dc88f20c84b933c6205675d0f1e7be2cde8", size = 5677617, upload-time = "2026-07-24T17:05:18.658Z" }, + { url = "https://files.pythonhosted.org/packages/03/5f/3e339901f8460b6073313619b4fd9bf4135e48430695c53640b83ace88ea/prek-0.4.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b7f5e446d2aca739bd18b380578e9c78bb4c086299abc3e167d51c47840c56f", size = 6106370, upload-time = "2026-07-24T17:05:20.219Z" }, + { url = "https://files.pythonhosted.org/packages/8e/4e/94e24b5c1910ec15692ecaf33d0d8ef0d02a02a8b5e40d3c976396880cba/prek-0.4.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7059d640e595d098600e2d97af961f46292b4112670edbe632de84f6828389e", size = 6884342, upload-time = "2026-07-24T17:05:21.587Z" }, + { url = "https://files.pythonhosted.org/packages/a2/7c/fc0daa033dcafe74990c00af2da1e16922790b9c1b8da7e8eebf1123838b/prek-0.4.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a4df33998fcac878bce3b2c624e1caeb9609f3d562c640702c1234ed815daf", size = 6331365, upload-time = "2026-07-24T17:05:22.87Z" }, + { url = "https://files.pythonhosted.org/packages/d7/36/49f152b8f539930e9685cff0509695ce4054abcecc22f4c16c4e1e5c23d0/prek-0.4.11-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:866991f387527c5f880ce2cc3ddea9b33cc5b986881f8c7f92524cf0969c1350", size = 5939075, upload-time = "2026-07-24T17:05:24.249Z" }, + { url = "https://files.pythonhosted.org/packages/4f/fe/7b097af9161edae7ddedcc9f5cda4a5f31346a492ce3f92583d96c46f628/prek-0.4.11-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:247e5d8740e137ebdf24fa96f01a95b2d2f1892e956a1ab00c7b1474a59ebcc0", size = 5799029, upload-time = "2026-07-24T17:05:25.652Z" }, + { url = "https://files.pythonhosted.org/packages/49/63/dc955ff99e1002d3cd375b21467c87046bc41deddfce86d898240757b151/prek-0.4.11-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:603ba9f2fd9d666dddb3ae190a25a5c55091b843cde90ed52e0a1116f50d4062", size = 5651211, upload-time = "2026-07-24T17:05:27.027Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b8/bf2139ec25eefb5afef43afac7620c5181f2c2661f220598beacb1771207/prek-0.4.11-py3-none-musllinux_1_1_i686.whl", hash = "sha256:f2682ece3c5fc7201106c4fdd84b0587ccea4b8a2ecefa3e94d3074d2841f1df", size = 5954784, upload-time = "2026-07-24T17:05:28.391Z" }, + { url = "https://files.pythonhosted.org/packages/fc/29/3fe5990aee1bd7c4d50a03358ad867c5e912d9510aafb83a359c7347e5fa/prek-0.4.11-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:22721d30394192931fecc80d6fc6dd47e8ddf8db8b9693805aba8ec0f50087ec", size = 6448916, upload-time = "2026-07-24T17:05:29.837Z" }, + { url = "https://files.pythonhosted.org/packages/0f/fb/abddacf43738302242ecd237236c7c80cd7c1d27545e16e803770aee76e9/prek-0.4.11-py3-none-win32.whl", hash = "sha256:8b093e7624522146049e994d5cf283d01d71632b638620b79ae0f96afeaa2624", size = 5483539, upload-time = "2026-07-24T17:05:31.228Z" }, + { url = "https://files.pythonhosted.org/packages/00/1e/c293f7a15cb93963c4be36a02e144b93f43906bc02644a3f04e5708e7453/prek-0.4.11-py3-none-win_amd64.whl", hash = "sha256:5a3d7c80b970b456e5f1bcec8382008ee1ae6a3f324a6b9bb4ff7e666ab0f3c4", size = 5861119, upload-time = "2026-07-24T17:05:32.479Z" }, + { url = "https://files.pythonhosted.org/packages/cd/0c/05fe6eb9d6a54d0e02dfa8cc5ad6f86869bf953419ec15909a32466a28ee/prek-0.4.11-py3-none-win_arm64.whl", hash = "sha256:e7b0df37ce05e45a14a9da39ab104691474d72f139bf4f6c860f754763a322cb", size = 5626386, upload-time = "2026-07-24T17:05:33.813Z" }, ] [[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]] @@ -1762,23 +1690,23 @@ dependencies = [ { name = "findlibs" }, { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/b8/ee087c4bf0e8328eab5ddf738e1d9ee347a3463e6bbe3bf9d0c1b8b31379/pyfdb-0.1.3.tar.gz", hash = "sha256:b070f5dde8de850e82729d03c1e97a2f76281572624826383ac0049b3587352e", size = 17502 } +sdist = { url = "https://files.pythonhosted.org/packages/72/b8/ee087c4bf0e8328eab5ddf738e1d9ee347a3463e6bbe3bf9d0c1b8b31379/pyfdb-0.1.3.tar.gz", hash = "sha256:b070f5dde8de850e82729d03c1e97a2f76281572624826383ac0049b3587352e", size = 17502, upload-time = "2025-10-29T13:56:40.898Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/a8/b37e3e3398c54a33b994607e2808ef0de97809cbad3f0d784191862429eb/pyfdb-0.1.3-py3-none-any.whl", hash = "sha256:a9d3b69e19fbeb57bb0c6ccbe69d32fe3551e8b1eda4635c36ff6f88eacc2d66", size = 17202 }, + { url = "https://files.pythonhosted.org/packages/04/a8/b37e3e3398c54a33b994607e2808ef0de97809cbad3f0d784191862429eb/pyfdb-0.1.3-py3-none-any.whl", hash = "sha256:a9d3b69e19fbeb57bb0c6ccbe69d32fe3551e8b1eda4635c36ff6f88eacc2d66", size = 17202, upload-time = "2025-10-29T13:56:39.857Z" }, ] [[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 = "pytest" -version = "9.0.3" +version = "9.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -1789,9 +1717,9 @@ dependencies = [ { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165 } +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249 }, + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, ] [[package]] @@ -1801,82 +1729,82 @@ 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 = "pytz" -version = "2026.2" +version = "2026.3.post1" 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/fb/48/fb042503b6ca6cd271261dc559fd6432f7d8c713153e9ec5c591af4dfc1c/pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d", size = 319745, upload-time = "2026-07-25T15:12:07.385Z" } 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/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815", size = 508283, upload-time = "2026-07-25T15:12:05.782Z" }, ] [[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/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227 }, - { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019 }, - { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646 }, - { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793 }, - { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293 }, - { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872 }, - { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828 }, - { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415 }, - { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561 }, - { 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/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063 }, - { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973 }, - { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116 }, - { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011 }, - { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870 }, - { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089 }, - { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181 }, - { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, - { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, - { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, - { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 }, - { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 }, - { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 }, - { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159 }, - { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626 }, - { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613 }, - { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115 }, - { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 }, - { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 }, - { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 }, - { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814 }, - { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809 }, - { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454 }, - { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355 }, - { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175 }, - { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228 }, - { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194 }, - { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 }, - { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 }, - { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108 }, - { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641 }, - { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901 }, - { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132 }, - { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261 }, - { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272 }, - { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923 }, - { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 }, - { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 }, +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/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" }, + { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" }, + { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" }, + { 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" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] [[package]] @@ -1886,12 +1814,12 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "rpds-py", version = "0.30.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "rpds-py", version = "2026.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "rpds-py", version = "2026.6.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -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]] @@ -1904,9 +1832,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856 } +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075 }, + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, ] [[package]] @@ -1917,423 +1845,607 @@ resolution-markers = [ "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", ] -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/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490 }, - { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751 }, - { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696 }, - { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136 }, - { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699 }, - { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022 }, - { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522 }, - { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579 }, - { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305 }, - { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503 }, - { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322 }, - { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792 }, - { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901 }, - { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823 }, - { 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/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086 }, - { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053 }, - { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763 }, - { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951 }, - { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622 }, - { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492 }, - { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080 }, - { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680 }, - { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589 }, - { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289 }, - { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737 }, - { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120 }, - { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782 }, - { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463 }, - { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868 }, - { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887 }, - { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904 }, - { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945 }, - { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783 }, - { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021 }, - { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589 }, - { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025 }, - { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895 }, - { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799 }, - { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731 }, - { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027 }, - { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020 }, - { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139 }, - { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224 }, - { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645 }, - { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443 }, - { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375 }, - { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850 }, - { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812 }, - { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841 }, - { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149 }, - { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843 }, - { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507 }, - { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949 }, - { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790 }, - { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217 }, - { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806 }, - { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341 }, - { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768 }, - { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099 }, - { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192 }, - { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080 }, - { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841 }, - { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670 }, - { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005 }, - { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112 }, - { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049 }, - { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661 }, - { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606 }, - { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126 }, - { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371 }, - { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298 }, - { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604 }, - { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391 }, - { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868 }, - { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747 }, - { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795 }, - { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330 }, - { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194 }, - { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340 }, - { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765 }, - { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834 }, - { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470 }, - { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630 }, - { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148 }, - { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030 }, - { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570 }, - { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532 }, - { 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/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, + { 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/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, + { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, + { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, + { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, + { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, + { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, + { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, + { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, + { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, + { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, + { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, + { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, + { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, + { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, + { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, + { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, + { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, + { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, + { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, + { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, + { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, + { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, + { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, + { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, + { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, + { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, + { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, + { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, + { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, + { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, + { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, + { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, + { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, + { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, + { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, + { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, + { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, + { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, + { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, + { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, + { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, + { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, + { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, + { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, + { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, + { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, + { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, + { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, + { 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 = "rpds-py" -version = "2026.5.1" +version = "2026.6.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] -sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609 }, - { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460 }, - { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031 }, - { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121 }, - { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026 }, - { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865 }, - { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012 }, - { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111 }, - { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225 }, - { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487 }, - { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798 }, - { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053 }, - { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390 }, - { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097 }, - { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361 }, - { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040 }, - { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775 }, - { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329 }, - { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539 }, - { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674 }, - { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268 }, - { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280 }, - { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233 }, - { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009 }, - { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113 }, - { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838 }, - { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436 }, - { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734 }, - { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045 }, - { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967 }, - { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787 }, - { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179 }, - { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173 }, - { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162 }, - { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093 }, - { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829 }, - { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786 }, - { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920 }, - { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059 }, - { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030 }, - { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975 }, - { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178 }, - { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481 }, - { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519 }, - { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446 }, - { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287 }, - { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033 }, - { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891 }, - { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646 }, - { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830 }, - { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830 }, - { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613 }, - { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183 }, - { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578 }, - { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573 }, - { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861 }, - { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633 }, - { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074 }, - { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635 }, - { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756 }, - { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831 }, - { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127 }, - { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034 }, - { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823 }, - { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144 }, - { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959 }, - { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558 }, - { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789 }, - { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405 }, - { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975 }, - { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701 }, - { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806 }, - { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985 }, - { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219 }, - { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148 }, - { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196 }, - { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981 }, - { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961 }, - { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965 }, - { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526 }, - { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190 }, - { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921 }, - { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766 }, - { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343 }, - { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502 }, - { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916 }, - { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855 }, - { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422 }, - { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576 }, - { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640 }, - { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322 }, - { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066 }, - { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586 }, - { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415 }, - { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427 }, - { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615 }, - { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786 }, - { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583 }, - { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941 }, - { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349 }, - { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922 }, - { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003 }, - { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245 }, - { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015 }, - { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016 }, - { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775 }, - { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270 }, - { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285 }, - { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581 }, - { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041 }, - { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946 }, - { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526 }, - { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165 }, - { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778 }, - { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839 }, - { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866 }, - { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441 }, - { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151 }, - { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195 }, - { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850 }, - { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899 }, - { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618 }, - { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003 }, - { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778 }, - { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359 }, - { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820 }, - { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243 }, - { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541 }, - { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326 }, +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/1f/a2dca5ffdbf1d475ffc4e80e4d5d720ff3a00f691795910116960ee12511/rpds_py-2026.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7", size = 342174, upload-time = "2026-06-30T07:14:54.821Z" }, + { url = "https://files.pythonhosted.org/packages/4d/dc/323d08583c0832911768663d1944f0107fcd4088704858d84b5e06d105a0/rpds_py-2026.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911", size = 345513, upload-time = "2026-06-30T07:14:56.515Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2a/e31989834d18d2f26ec1d2774c5b1eb3331df4ea8ada525175294c94b48a/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4", size = 373783, upload-time = "2026-06-30T07:14:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/fe/e80107ee3639585c9941c17d6a42cd65325022f656c023191fce78c324c8/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261", size = 378316, upload-time = "2026-06-30T07:14:59.077Z" }, + { url = "https://files.pythonhosted.org/packages/22/6f/81e3adf81acfb6fa694de2a6e4e7d8863121e3e0799e0a7725e6cf5679c4/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278", size = 499423, upload-time = "2026-06-30T07:15:00.488Z" }, + { url = "https://files.pythonhosted.org/packages/2d/9a/41263969df0ce3d9af2a96d5005a288200af1989aed3354bfceb5fc0b21f/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9", size = 386077, upload-time = "2026-06-30T07:15:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7", size = 371315, upload-time = "2026-06-30T07:15:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/99/3c/2b973b4d371906a134b03decfea7f5d9835a2c6d263454392e15b64b5b18/rpds_py-2026.6.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3", size = 383502, upload-time = "2026-06-30T07:15:04.627Z" }, + { url = "https://files.pythonhosted.org/packages/98/2a/12e2799500af0a307bca76b63361c51f9fe479223561489c29eea1f2ee41/rpds_py-2026.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da", size = 402673, upload-time = "2026-06-30T07:15:05.856Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e3/21e5872d165fe08be4f229e3d5ee9d90019c0bf0e5538de60dbd54009450/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4", size = 549964, upload-time = "2026-06-30T07:15:07.159Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d0/5ee0fe36844297de8123bee27bc12078c1a7416ad9f1b8a8ca18d6b0c0ac/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6", size = 615446, upload-time = "2026-06-30T07:15:08.531Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/1ea5873cb683f2fbe5f21b23ea1f6d179ead19f3c5b249b7eb5dca568ef2/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93", size = 576975, upload-time = "2026-06-30T07:15:09.97Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e1/90ef639217a5ddb15b7f4f61b1c33911fd044ad03c311bafdd2bcab85582/rpds_py-2026.6.3-cp311-cp311-win32.whl", hash = "sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a", size = 204453, upload-time = "2026-06-30T07:15:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b7/b7a1695d7af36f521fb11e80d6d3adbd744f73b921859bd3c2a2c0dc706f/rpds_py-2026.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127", size = 223219, upload-time = "2026-06-30T07:15:12.476Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/145afacf796e4506062825941176ad9445c2dcf2b3b6a1f13d3030a15e19/rpds_py-2026.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804", size = 219137, upload-time = "2026-06-30T07:15:13.631Z" }, + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, + { url = "https://files.pythonhosted.org/packages/b4/9c/f0d19ac587fd0e4ab6b72cda355e9c5a6166b01ef7e064e437aef8eb9fef/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f", size = 349791, upload-time = "2026-06-30T07:17:33.315Z" }, + { url = "https://files.pythonhosted.org/packages/38/c7/1d49d204c9fd2ee6c537601dc4c1ba921e03363ca576bfab94a00254ac9a/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171", size = 352842, upload-time = "2026-06-30T07:17:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e5/c0b5dc93cd0d4c06ce1f438907649514e2ea077bcd911e3154a51e96c38e/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90", size = 382094, upload-time = "2026-06-30T07:17:36.514Z" }, + { url = "https://files.pythonhosted.org/packages/0d/54/ec0e907b4ca8d541112db352409bd15f871c9b243e0c92c9b5a46ae96f01/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca", size = 388662, upload-time = "2026-06-30T07:17:38.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f4/921c22a4fd0f1c1ac13a3996ffbf0aa67951e2c8ad0d1d9574938a2932e8/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9", size = 504896, upload-time = "2026-06-30T07:17:39.689Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1b/a114b972cefa1ab1cdb3c7bb177cd3844a12826c507c722d3a73516dbbaf/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c", size = 391545, upload-time = "2026-06-30T07:17:41.336Z" }, + { url = "https://files.pythonhosted.org/packages/4e/98/af9b3db77d47fcbe6c8c1f36e2c2147ec70292819e99c325f871584a1c11/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9", size = 380059, upload-time = "2026-06-30T07:17:42.857Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ba/0efd8668b97c1d26a61566386c636a7a7a09829e474fdf807caa15a2c844/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41", size = 393235, upload-time = "2026-06-30T07:17:44.637Z" }, + { url = "https://files.pythonhosted.org/packages/62/90/8c139ee9690f73b0829f32647de6f40d826f8f443af6fa72644f96351aac/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c", size = 413008, upload-time = "2026-06-30T07:17:46.225Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/0043896fdd7828ce09a1d9a8b06433714d0960fc4ff3fc4aa72b666b764e/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9", size = 558118, upload-time = "2026-06-30T07:17:47.759Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/02355f0e134f783a8f9814c4680a1bd311d37671577a5964ea838573ff37/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76", size = 623138, upload-time = "2026-06-30T07:17:49.355Z" }, + { url = "https://files.pythonhosted.org/packages/10/85/48f0abdcef5cce4e034c7a5b0ceeceba0b01bf0d942824f4bb720afe2dec/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826", size = 586486, upload-time = "2026-06-30T07:17:51.141Z" }, +] + +[[package]] +name = "scipy" +version = "1.15.3" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "(python_full_version < '3.11' and platform_machine != 'ARM64') or (python_full_version < '3.11' and sys_platform != 'win32')", +] +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770, upload-time = "2025-05-08T16:04:20.849Z" }, + { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511, upload-time = "2025-05-08T16:04:27.103Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151, upload-time = "2025-05-08T16:04:31.731Z" }, + { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732, upload-time = "2025-05-08T16:04:36.596Z" }, + { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617, upload-time = "2025-05-08T16:04:43.546Z" }, + { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964, upload-time = "2025-05-08T16:04:49.431Z" }, + { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749, upload-time = "2025-05-08T16:04:55.215Z" }, + { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383, upload-time = "2025-05-08T16:05:01.914Z" }, + { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201, upload-time = "2025-05-08T16:05:08.166Z" }, + { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255, upload-time = "2025-05-08T16:05:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035, upload-time = "2025-05-08T16:05:20.152Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499, upload-time = "2025-05-08T16:05:24.494Z" }, + { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602, upload-time = "2025-05-08T16:05:29.313Z" }, + { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415, upload-time = "2025-05-08T16:05:34.699Z" }, + { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622, upload-time = "2025-05-08T16:05:40.762Z" }, + { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796, upload-time = "2025-05-08T16:05:48.119Z" }, + { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684, upload-time = "2025-05-08T16:05:54.22Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504, upload-time = "2025-05-08T16:06:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735, upload-time = "2025-05-08T16:06:06.471Z" }, + { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284, upload-time = "2025-05-08T16:06:11.686Z" }, + { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958, upload-time = "2025-05-08T16:06:15.97Z" }, + { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454, upload-time = "2025-05-08T16:06:20.394Z" }, + { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199, upload-time = "2025-05-08T16:06:26.159Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455, upload-time = "2025-05-08T16:06:32.778Z" }, + { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140, upload-time = "2025-05-08T16:06:39.249Z" }, + { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549, upload-time = "2025-05-08T16:06:45.729Z" }, + { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184, upload-time = "2025-05-08T16:06:52.623Z" }, + { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256, upload-time = "2025-05-08T16:06:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540, upload-time = "2025-05-08T16:07:04.209Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115, upload-time = "2025-05-08T16:07:08.998Z" }, + { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884, upload-time = "2025-05-08T16:07:14.091Z" }, + { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018, upload-time = "2025-05-08T16:07:19.427Z" }, + { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716, upload-time = "2025-05-08T16:07:25.712Z" }, + { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342, upload-time = "2025-05-08T16:07:31.468Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869, upload-time = "2025-05-08T16:07:38.002Z" }, + { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851, upload-time = "2025-05-08T16:08:33.671Z" }, + { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011, upload-time = "2025-05-08T16:07:44.039Z" }, + { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407, upload-time = "2025-05-08T16:07:49.891Z" }, + { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030, upload-time = "2025-05-08T16:07:54.121Z" }, + { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709, upload-time = "2025-05-08T16:07:58.506Z" }, + { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045, upload-time = "2025-05-08T16:08:03.929Z" }, + { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062, upload-time = "2025-05-08T16:08:09.558Z" }, + { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132, upload-time = "2025-05-08T16:08:15.34Z" }, + { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503, upload-time = "2025-05-08T16:08:21.513Z" }, + { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097, upload-time = "2025-05-08T16:08:27.627Z" }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", + "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057, upload-time = "2026-02-23T00:16:36.931Z" }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300, upload-time = "2026-02-23T00:16:49.108Z" }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333, upload-time = "2026-02-23T00:17:01.293Z" }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314, upload-time = "2026-02-23T00:17:12.576Z" }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512, upload-time = "2026-02-23T00:17:23.424Z" }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248, upload-time = "2026-02-23T00:17:34.561Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, + { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, + { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, + { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, + { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, + { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, + { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, + { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, + { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, + { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, + { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, + { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, + { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, + { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, + { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, + { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510, upload-time = "2026-02-23T00:21:01.015Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131, upload-time = "2026-02-23T00:21:05.888Z" }, + { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032, upload-time = "2026-02-23T00:21:09.904Z" }, + { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766, upload-time = "2026-02-23T00:21:14.313Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007, upload-time = "2026-02-23T00:21:19.663Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333, upload-time = "2026-02-23T00:21:25.278Z" }, + { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066, upload-time = "2026-02-23T00:21:31.358Z" }, + { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763, upload-time = "2026-02-23T00:21:37.247Z" }, + { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984, upload-time = "2026-02-23T00:22:35.023Z" }, + { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877, upload-time = "2026-02-23T00:22:39.798Z" }, + { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750, upload-time = "2026-02-23T00:21:42.289Z" }, + { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858, upload-time = "2026-02-23T00:21:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723, upload-time = "2026-02-23T00:21:52.039Z" }, + { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098, upload-time = "2026-02-23T00:21:56.185Z" }, + { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397, upload-time = "2026-02-23T00:22:01.404Z" }, + { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163, upload-time = "2026-02-23T00:22:07.024Z" }, + { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291, upload-time = "2026-02-23T00:22:12.585Z" }, + { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317, upload-time = "2026-02-23T00:22:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327, upload-time = "2026-02-23T00:22:24.442Z" }, + { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, +] + +[[package]] +name = "scipy" +version = "1.18.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a7/25/c2700dfaf6442b4effaa91af24ebce5dc9d31bb4a69706313aae70d72cd0/scipy-1.18.0.tar.gz", hash = "sha256:67b2ad2ad54c72ca6d04975a9b2df8c3638c34ddd5b28738e94fc2b57929d378", size = 30774447, upload-time = "2026-06-19T15:01:43.456Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/19/ca10ead60b0acc80b2b833c2c4a4f2ff753d0f58b811f70d911c7e94a25c/scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:7bd21faaf5a1a3b2eff922d02db5f191b99a6518db9078a8fb23169f6d22259a", size = 31056519, upload-time = "2026-06-19T14:59:45.203Z" }, + { url = "https://files.pythonhosted.org/packages/96/72/1e6442a00cd2924d361aa1b642ab6373ec35c6fabf311a760be9f76e0f13/scipy-1.18.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:265915e79107de9f946b855e50d7470d5893ec3f54b342e1aa6201cbdcd8bb6b", size = 28681889, upload-time = "2026-06-19T14:59:48.103Z" }, + { url = "https://files.pythonhosted.org/packages/9b/2d/11dd93d21e147a73ba22bd75c0b9208d3a2e0ec76d53170ce7d9029b1015/scipy-1.18.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9ab7b758be6940954a713ee466e2043e9f6e2ed965c1fce5c91039f4be3d90a9", size = 20423580, upload-time = "2026-06-19T14:59:50.665Z" }, + { url = "https://files.pythonhosted.org/packages/9c/01/93552f75e0d2a7dd115a45e59209c51e8d514daff02fc887d2623be06fe1/scipy-1.18.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:97b6cddaaee0a779ef6b5ca83c9604b27cc16b2b8fc22c142652df8793319fb8", size = 23054441, upload-time = "2026-06-19T14:59:53.564Z" }, + { url = "https://files.pythonhosted.org/packages/3c/23/21f5e703643d66f21faa6b4c73195bfcad70c55efcb4f1ab327cd7c4101a/scipy-1.18.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:52a96e21517c7292375c0e27dd796a811f03fcea5fd4d108fdfea8145dcf17ab", size = 33968720, upload-time = "2026-06-19T14:59:56.415Z" }, + { url = "https://files.pythonhosted.org/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f55797419e16e7f30cf88ffb3113ce0467f00cfe3f70d5c281730b21769bfc2", size = 35287115, upload-time = "2026-06-19T14:59:59.411Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ff/eec46be7e9234208f801062b53e1983085eddebd693f6c9bfb03b459830d/scipy-1.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ad033410e2e0672ffdc1042110cef20e1c46f8fd0616cee1d44d8d58fad8fc11", size = 35577989, upload-time = "2026-06-19T15:00:02.235Z" }, + { url = "https://files.pythonhosted.org/packages/84/ca/210d4759c7210bb7d269437421959b39a33434e2776b60c5cb8a763bb30a/scipy-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4a55985d54c769c872e64b7f4c8a81cc30ef700cc04296abbbf3705439c126de", size = 37421717, upload-time = "2026-06-19T15:00:05.102Z" }, + { url = "https://files.pythonhosted.org/packages/2b/54/9a9edb45345bd6744da5ddfb6628e5d5185920494c6a67ec45b6381004cb/scipy-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:71ccc8faa2dd16ac310233203474a8b5cb67f10dedd54a3116d34943f4b19132", size = 36597428, upload-time = "2026-06-19T15:00:08.112Z" }, + { url = "https://files.pythonhosted.org/packages/99/0e/33f32a2a58987e26aec0f7df252cbbad1e90ae77bdbc76f40dd4ed0cf0ea/scipy-1.18.0-cp312-cp312-win_arm64.whl", hash = "sha256:d88363fd9d8fbd3511bd273f1a49efb2a540773ddf92a91d57498ce7dd7f3e76", size = 24351481, upload-time = "2026-06-19T15:00:11.103Z" }, + { url = "https://files.pythonhosted.org/packages/05/52/9c0136c2de7ae0779b7b366447766cec6d9f0702c56bb8ffeb04c8fd3af4/scipy-1.18.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:09143f676d157d9f546d663504ef9c1becb819824f1afc018814176411942446", size = 31036107, upload-time = "2026-06-19T15:00:14.03Z" }, + { url = "https://files.pythonhosted.org/packages/02/73/0291a64843270f4efb86cdcf2ee0f2048631b65ec6b405398b2b4dbf11bf/scipy-1.18.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5efe260f69417b97ddae455bfb5a95e8359f7f66ad7fa9522a60feb66f169520", size = 28663303, upload-time = "2026-06-19T15:00:16.819Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0f/10ffa0b697a572f4e0d48b92a88895d366422f019f723e7e14a84c050dac/scipy-1.18.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:68363b7eaacd8b5dd426df56d782cc156468ac79a127a1b87ca597d6e2e82197", size = 20404960, upload-time = "2026-06-19T15:00:19.635Z" }, + { url = "https://files.pythonhosted.org/packages/7e/d2/e896cea21ba8edd6c81d4c55b1ffcc717e79698dcbebf9641b4cfb4c6622/scipy-1.18.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:c5557d8be5da8e41353fcd4d21491fdbab83b062fc579e94dc09a7c8ab4f669b", size = 23034074, upload-time = "2026-06-19T15:00:22.107Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b2/e83ea34279a52c03374477c74006256ec78df65fc877baa4617d6de1d202/scipy-1.18.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0d13bca67c096d89fb95ced0d8921807300fce0275643aef9533cc63a0773468", size = 33942038, upload-time = "2026-06-19T15:00:24.964Z" }, + { url = "https://files.pythonhosted.org/packages/f6/af/e8fe5fb136f51e2b01678b92cb4106d10d8cd68ec147ead2e7cb0ac75398/scipy-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a46f9273dbd0eb1cefba61c9b8648b4dfe3cbc14a080176f9a73e44b8336dc7f", size = 35266390, upload-time = "2026-06-19T15:00:28.059Z" }, + { url = "https://files.pythonhosted.org/packages/3a/49/2c5cbb907b56695fc67517811d1db234dfd83381a84814ec220aded2794d/scipy-1.18.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5aba46108853ddfc77906b6557aac839d2b52e900c1d72a1180adaaab58d265f", size = 35551324, upload-time = "2026-06-19T15:00:31.014Z" }, + { url = "https://files.pythonhosted.org/packages/bb/73/eda39f7a2d306ff0ffc574afd13c0bbb6d10a603d9a413998ee269487a80/scipy-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b6f758e35f12757b5d95c00bc6de2438e229c2664b7a92e96f205959d9f2dfa4", size = 37404785, upload-time = "2026-06-19T15:00:34.072Z" }, + { url = "https://files.pythonhosted.org/packages/b7/d2/ae881ee28d014f38e0ccbfd974a06a919ba9af34f1f74bf42b5301891d63/scipy-1.18.0-cp313-cp313-win_amd64.whl", hash = "sha256:1afac4a847207c7ff8efd321734a50b06d0280b3b2a2c0fc2f413101747ad7c7", size = 36554943, upload-time = "2026-06-19T15:00:36.903Z" }, + { url = "https://files.pythonhosted.org/packages/70/3a/21154e2d54eb3639c6bf4dbae2e531c68356bfe95990daa30df33b30d556/scipy-1.18.0-cp313-cp313-win_arm64.whl", hash = "sha256:c5dbddf60e58c2312316d097271a8e73d40eaf2eabfa4d95ed7d3695bbf2ce7b", size = 24350911, upload-time = "2026-06-19T15:00:40.062Z" }, + { url = "https://files.pythonhosted.org/packages/78/b5/915a19b3de2f7430062b509653563db1633ddbb6f021b06731521115d4e2/scipy-1.18.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:4c256ee70c0d1a8a2ace807e199ccd4e3f57037433842abb3fb36bc17eaa9578", size = 31036253, upload-time = "2026-06-19T15:00:43.216Z" }, + { url = "https://files.pythonhosted.org/packages/d7/88/b72def7262e150d16be13fca37a96481138d624e700340bc3362a7588929/scipy-1.18.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:2ef3abc54a4ffc53765374b0d5728532dfdd2585ed23f6b11c206a1f0b1b9af8", size = 28673758, upload-time = "2026-06-19T15:00:46.663Z" }, + { url = "https://files.pythonhosted.org/packages/91/02/2e636a61a525632c373cf6a9c24442a3ffb79e364d38e98b32042964ac32/scipy-1.18.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f2a6af57bd9e4a75d70e4117e78a1bbee84f79ae3fbb6d0111005d6ebcc4cb8d", size = 20415514, upload-time = "2026-06-19T15:00:49.399Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b6/2135974442f6aba159d9d39d774a1c8cb19947016725d69fecc685df45bf/scipy-1.18.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:3f1ac564d3bf6c03d861d2cd87a1bea0da2887136f7fb1bf519c05a8971452d6", size = 23034398, upload-time = "2026-06-19T15:00:51.941Z" }, + { url = "https://files.pythonhosted.org/packages/f6/e6/ba89ec5abf6ee9257c0d1ec985573f3ae32742c24bc03e016388a40b1b15/scipy-1.18.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40395a5fcd1abee49a5c7aaa98c29db393eedc835138560a588c47ec16156690", size = 33998032, upload-time = "2026-06-19T15:00:54.838Z" }, + { url = "https://files.pythonhosted.org/packages/7f/c4/bc41eb19b0fd0db868f4132920879019318d80cc522ad8f2bca4611af808/scipy-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ca01e8ae69f1b18e9a58d91afead31be3cef0dd905a10249dac559ee15460a0", size = 35283333, upload-time = "2026-06-19T15:00:58.152Z" }, + { url = "https://files.pythonhosted.org/packages/53/a4/cbdeef6eb3830a8462a9d4ada814de5fc984345cc9ecf17cbec51a036f1e/scipy-1.18.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7a7f3b01647384dbc3a711e8c6778e0aabbe93959249fef5c7393396bcac0867", size = 35610216, upload-time = "2026-06-19T15:01:01.155Z" }, + { url = "https://files.pythonhosted.org/packages/80/4d/b2b82502b65f661d1b789c1665dcdf315d5f12194e06fc0b37946294ebae/scipy-1.18.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6aa94e78ec192a30063a5e72e561c28af769dc311190b24fe91774eff1969709", size = 37418960, upload-time = "2026-06-19T15:01:04.155Z" }, + { url = "https://files.pythonhosted.org/packages/93/3e/902d836831474b0ab5a37d16404f7bc5fafd9efba632890e271ba952635f/scipy-1.18.0-cp314-cp314-win_amd64.whl", hash = "sha256:2d8bbdc6c817f5b4006a54d799d4f5bab6f910193cbb9a1ff310833d4d270f61", size = 37288845, upload-time = "2026-06-19T15:01:07.822Z" }, + { url = "https://files.pythonhosted.org/packages/b6/43/8d73b337a3bdb14daa0314f0434210747c02d79d729ce1777574a817dcf6/scipy-1.18.0-cp314-cp314-win_arm64.whl", hash = "sha256:18e9575f1569b2c54174e6159d32942e03731177f63dce7975f0a0c88d102f5b", size = 24988971, upload-time = "2026-06-19T15:01:11.076Z" }, + { url = "https://files.pythonhosted.org/packages/b4/b4/f11918b0508a2787031a0499a03fbe3546f3bb5ca05d01038c45b278c09a/scipy-1.18.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:f351e0dd702687d12a402b867a1b4146a256923e1c38317cbc472f6372b94707", size = 31399325, upload-time = "2026-06-19T15:01:13.723Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d1/1f287b57c0ff0ee5185dff3946d92c8017d39b0e431f0ae79a3ff1859512/scipy-1.18.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7c7a51b33ce387193c97f228320cf8e87361daa1bba750638677729598b3e677", size = 29092110, upload-time = "2026-06-19T15:01:16.908Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1a/7b74eb6c392fdcb27d414c0e7558a6d0231eb3b6d73571f479bb81ea8794/scipy-1.18.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:84031d7b052a54fae2f8632e0ec802073d385476eb9a63079bce6e23ef9283d4", size = 20833811, upload-time = "2026-06-19T15:01:20.488Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ad/f3941716320a7b9cb4d68734a903b45fe16eff5fb7da7e16f2e619304979/scipy-1.18.0-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:56abf29a7c067dde59be8b9a22d606a4ea1b2f2a4b756d9d903c62818f5dacce", size = 23396644, upload-time = "2026-06-19T15:01:23.364Z" }, + { url = "https://files.pythonhosted.org/packages/22/22/1446b62ffe07f9719b7d9b1b6a4e05a772833ae8f441fe4c22c34c9b250f/scipy-1.18.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ad44305cfa24b1ba5803cbbebf033590ccbac1aa5d612d727b785325ab408b0", size = 34079318, upload-time = "2026-06-19T15:01:26.002Z" }, + { url = "https://files.pythonhosted.org/packages/56/3b/b87da667098bb470fa30c7011b0ba351ee976dd395c78798c66e941665a3/scipy-1.18.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:945c1761b93f38d7f99ae81ae80c63e621471608c7eeead563f6df025585cd58", size = 35324320, upload-time = "2026-06-19T15:01:28.881Z" }, + { url = "https://files.pythonhosted.org/packages/f8/a1/c7932f91909759b0267f75fdea34e91309f96b895757534b76a90b6b4344/scipy-1.18.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1a4441f15d620578772a49e5ab48c0ee1f7a0220e387110283062729136b2553", size = 35699541, upload-time = "2026-06-19T15:01:31.968Z" }, + { url = "https://files.pythonhosted.org/packages/f7/86/5185061a1fcc41d18c5dc2463969b3a3964b31d9ac67b2fb05d4c7ff7670/scipy-1.18.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9aac6192fac56bf2ca534389d24623f07b39ff83317d58287285e7fbd622ff76", size = 37472480, upload-time = "2026-06-19T15:01:35.136Z" }, + { url = "https://files.pythonhosted.org/packages/31/8e/f04c68e39919a010d34f2ee1367fd705b0a25a02f609d755f0bfbc0a15fc/scipy-1.18.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e40baea28ae7f5475c779741e2d90b1247c78531207b49c7030e698ff81cee3f", size = 37365390, upload-time = "2026-06-19T15:01:38.091Z" }, + { url = "https://files.pythonhosted.org/packages/d5/19/969dc072906c84dd0a3b05dcf57ea750936087d7873549e408b35cfc3f97/scipy-1.18.0-cp314-cp314t-win_arm64.whl", hash = "sha256:368e0a705903c466aa5f08eefb39e6b1b6b2d659e7352a31fd9e2438365be0f8", size = 25279661, upload-time = "2026-06-19T15:01:40.817Z" }, ] [[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 = "thermofeel" -version = "2.1.7" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8a/9b/467dc4de053aa5ba379ecc9ac000c62551520fc4bcc1a079ddbdbaebfa11/thermofeel-2.1.7.tar.gz", hash = "sha256:f034ffa8d8d096416cd94cc234a67db8afc2ae72ca872144c59e9fc104b09073", size = 38251 } +sdist = { url = "https://files.pythonhosted.org/packages/fa/a5/aeec22f9a35735f62061d133206960b67e72a0ea3ac3ff1ce8bfb5b3e338/thermofeel-2.3.0.tar.gz", hash = "sha256:3546db63e93737e91692973d642c016c1ae832626258e2d8d31aca82fc0fb254", size = 50725, upload-time = "2026-07-16T10:50:30.858Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/4b/90bb6dfe1828aae53d99c7fdbf5232f2a0037d9d30b2ac946c50366da319/thermofeel-2.1.7-py3-none-any.whl", hash = "sha256:ede7e3c4cb818803173468cb9a6b9ca9c91fc310fa93978eba24505bf9baa9e0", size = 42533 }, + { url = "https://files.pythonhosted.org/packages/c1/e2/eac387d67ccf3df506e858af16d5a20201cbcf21dae53e923be2e70efbee/thermofeel-2.3.0-py3-none-any.whl", hash = "sha256:32b9b1db96edaebbff84c82d78f8850400c84e7b5c0e5c2304a39942a67972ad", size = 35296, upload-time = "2026-07-16T10:50:29.864Z" }, ] [[package]] name = "tomli" version = "2.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704 }, - { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454 }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561 }, - { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824 }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227 }, - { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859 }, - { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204 }, - { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084 }, - { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285 }, - { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924 }, - { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018 }, - { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948 }, - { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341 }, - { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159 }, - { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290 }, - { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141 }, - { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847 }, - { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088 }, - { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866 }, - { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887 }, - { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704 }, - { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628 }, - { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180 }, - { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674 }, - { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976 }, - { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755 }, - { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265 }, - { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726 }, - { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859 }, - { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713 }, - { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084 }, - { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973 }, - { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223 }, - { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973 }, - { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082 }, - { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490 }, - { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263 }, - { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736 }, - { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717 }, - { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461 }, - { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855 }, - { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144 }, - { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683 }, - { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196 }, - { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393 }, - { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, ] [[package]] name = "toolz" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613 } +sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613, upload-time = "2025-10-17T04:03:21.661Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093 }, + { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093, upload-time = "2025-10-17T04:03:20.435Z" }, ] [[package]] name = "tqdm" -version = "4.67.3" +version = "4.70.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598 } +sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374 }, + { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, ] [[package]] name = "ty" -version = "0.0.44" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/f4/fbb120226e4f239652525a664bad976a23fea58c646d1323f2296fee8a61/ty-0.0.44.tar.gz", hash = "sha256:5886229830ab77022842a1c55d2ef57405621a91fc465969fa6d538661898173", size = 5803665 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/c6/b5b8c4762efb4d85401652658786506867553ecfc2beac3bcf361a15937f/ty-0.0.44-py3-none-linux_armv6l.whl", hash = "sha256:272d31e7ad49b1dc5e8465a9fe700354e14c755b40d9c75f08f031d786903df3", size = 11607267 }, - { url = "https://files.pythonhosted.org/packages/1c/5c/f4b405570737f44ab0fc4214117fe43353f8f0825a1823d9e99e9c8e57be/ty-0.0.44-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b92c4ddd7a3daf2049715edec9dc70cf6fd31a5a318ee647258f90dd75495eed", size = 11382826 }, - { url = "https://files.pythonhosted.org/packages/9d/aa/fb9835aa492b148d7754cb4c3db07f31a7e2e09f0d8e0e8e297f01125dd2/ty-0.0.44-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4d42cfd84a690f6654b2a4f0515027c21b692cf2512d32e6433f754893a95609", size = 10809741 }, - { url = "https://files.pythonhosted.org/packages/47/f5/0b20ba6b66837a5a37bab7f74ac0732c66e766b5f0b2d55b30816b15f348/ty-0.0.44-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc47ae87e4cb7db2a9166bb23b78a905c3626e523296ec5bccf36b5e89bda6b", size = 11318153 }, - { url = "https://files.pythonhosted.org/packages/ca/bb/b82ea730774a4f950f06d355fbc120d51eac7da23b57fc79ef6ff7c79cbb/ty-0.0.44-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46d867e80f16f421ac72c9a85240dbf050d62d9b3fbd10a8b5b082fb21679e0b", size = 11403108 }, - { url = "https://files.pythonhosted.org/packages/8b/41/e2c83856165291049c702eda4e2ef3d3ebd875e8a0a77b8cc4ef3156aa1c/ty-0.0.44-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:411f5de0f96a4e4e5cccc3e0d55954c41f6a99ee6ca1fe5a7226cbc68406e053", size = 11944815 }, - { url = "https://files.pythonhosted.org/packages/66/95/1fa6a101eb9d5bec042b87e5ca9c8fc349b75961beca6306f95af5cd5539/ty-0.0.44-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b15f01ecb4e2b46c05a1769293f9d32c3d4a1e4e7dfccf37c604d705dc3e3f4", size = 12476121 }, - { url = "https://files.pythonhosted.org/packages/72/6a/da4b45b1229d39207c6140681c2aaf4f5691bcb1dc830b84450ca25c8f57/ty-0.0.44-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:edd32b7467af509c99c0244c2226a4e4c03400699003ec33373282ab931654d9", size = 12091340 }, - { url = "https://files.pythonhosted.org/packages/16/c7/e1c9260ea5188195962ff1214ace418b5d69187e8fa7c0a1ec4994b8071b/ty-0.0.44-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503a585f4007387c3afc58bae23a7ca1b9f236cbdb1a881dc36110655ceb1937", size = 11986201 }, - { url = "https://files.pythonhosted.org/packages/92/f9/312bb112da9b1a7da295bb0426be85e72ad48da4e4266c36d77256b4058d/ty-0.0.44-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d28bcfa83243d77c2316944e8cf197f73597bf17d1ddc047d0b10a762531252", size = 12168475 }, - { url = "https://files.pythonhosted.org/packages/02/de/64978d603f6c3e5dd7cb97eca2214567d8ad0c85fa4a7435b7852ae4b779/ty-0.0.44-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:56fd2dd0192def189715b25f5338f6222fb827884dc34111e50aa1c4e061cee5", size = 11292937 }, - { url = "https://files.pythonhosted.org/packages/64/63/a625d8a3c71dcaa01988d330f849c465fe72ead4b0bbab44fe4bd6e672b5/ty-0.0.44-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7f8d990489032de1984e73c159f3e760d754cf83a602b874827d943821f63595", size = 11421560 }, - { url = "https://files.pythonhosted.org/packages/99/96/61aeba0e629b0c91bd316ff94d00e38817ec493ae4316f39508988daa287/ty-0.0.44-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f61ffe72996a755432922fe90b28db593f572eb5cbf48e3ef4e67b282533d1b0", size = 11580282 }, - { url = "https://files.pythonhosted.org/packages/fa/f7/256e1538ce21cab67b381201444c42454de69d310059c4929d92a0ee9c48/ty-0.0.44-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2b237a143bac4f30cec9257d45f01e72da97030a80a09a2b69cfef065f09c37f", size = 12085723 }, - { url = "https://files.pythonhosted.org/packages/d3/76/ec3957c10872643a98db7a7895101ad89c5b7cba4bc6c4aebbbfc91756cc/ty-0.0.44-py3-none-win32.whl", hash = "sha256:6a24586c65419223ac5bab4822d49ab493a5d19ea2a897514284c232b9d6166a", size = 10892978 }, - { url = "https://files.pythonhosted.org/packages/a5/7d/ba24050432196e7d7f03945e5c379951593c48e04e5c5d5275cfc4624791/ty-0.0.44-py3-none-win_amd64.whl", hash = "sha256:8cccb27e348c89a9733fbad1b2efadfbad79b107c7e52adb52dfd8a70156a38d", size = 11987058 }, - { url = "https://files.pythonhosted.org/packages/71/34/16ec3f1fec75292d9c56a8b5fef037ceaba85a5c30562206c1a245a00a67/ty-0.0.44-py3-none-win_arm64.whl", hash = "sha256:58049504e7a12bf1957f24a5384a332c94d5590127083a80db5e5a1bed34190b", size = 11329961 }, +version = "0.0.64" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/aa/14c9965d3b173105692473897cc89c34cd91241368b2044e43167e1c17ff/ty-0.0.64.tar.gz", hash = "sha256:d12ddbb05f15158bb518af619378b385486450def95fb06f8ab98037febe9f2c", size = 6350966, upload-time = "2026-07-27T18:32:45.403Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/4c/c54937e4ff3fa7b34a99ea3387ec766bf0ad98dc8df8d792e89b388e658e/ty-0.0.64-py3-none-linux_armv6l.whl", hash = "sha256:3830a6675ab43635ced1c4c557f380ac4a49e9414e03975e4e4e8db644c64944", size = 12118357, upload-time = "2026-07-27T18:32:08.702Z" }, + { url = "https://files.pythonhosted.org/packages/ce/aa/a839ee2bc78e943d079e6abe199a97b4eeffb7e5c9a57326d69de452186a/ty-0.0.64-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3ff07d7bc32a2135f58afe57393789a32ea2fed1a66216129a8e535e76043903", size = 11790882, upload-time = "2026-07-27T18:32:10.997Z" }, + { url = "https://files.pythonhosted.org/packages/4c/de/19f14357888a7198438926303753cf749428e3d62e8980ff1e9a72a78402/ty-0.0.64-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4f6d1c7f897cca05d12bacbf1435150d5ffa496099515aa6ed303c8b29e1d0bb", size = 11317394, upload-time = "2026-07-27T18:32:13.162Z" }, + { url = "https://files.pythonhosted.org/packages/08/2f/f54462300535ab99b551eda733177be2eef5dbc2997d3fdb357c4ddd760a/ty-0.0.64-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:138d6c37ad4bf8583aa7a9b29d90954151d7856f9910a03eae3eb34b34c57215", size = 11863042, upload-time = "2026-07-27T18:32:15.307Z" }, + { url = "https://files.pythonhosted.org/packages/5e/95/dbecf745520ebe8bd7b02fc55eee6441c9be312ebf6addce605eb52740dd/ty-0.0.64-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ed9719d1b7b66fb8efe073d860208a44c40af1f6cd5c2364aa9b323a1e579b4", size = 11910730, upload-time = "2026-07-27T18:32:17.467Z" }, + { url = "https://files.pythonhosted.org/packages/3b/26/12cfd40028e51ceed7b3cb645281c61c02eb64ff9fb0c09231d65c30ff25/ty-0.0.64-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d68b23e5169e2137b5f1de7169ab0cebecab6c8eda374c34c1f6394308f58242", size = 12631936, upload-time = "2026-07-27T18:32:19.533Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d0/65ffc2b0a686347193c6f98e9421a7fc2a96fc3cd0b1001cf7cf284baff9/ty-0.0.64-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f41cb07d89d32626fcaf3ed4d262778fcb28b2628b6ed1e172cd7b18820668d8", size = 13171049, upload-time = "2026-07-27T18:32:22.026Z" }, + { url = "https://files.pythonhosted.org/packages/f6/a4/975a5961842dcd6fa60f0770a102c0bba7509da909ab652919bfcdcd4fc7/ty-0.0.64-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f24e1504ab9e212f92356b82fe088fdeb3a39f9a2f4ff25e505d2e1d0db9056", size = 12826438, upload-time = "2026-07-27T18:32:24.178Z" }, + { url = "https://files.pythonhosted.org/packages/af/ef/dfb9b7f9bcc032d3b540b0d1f55f532a336e2fb41b1bd539c05ae81a151a/ty-0.0.64-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86db830cb914bb33bb8247b66ccea58de4496c2391bd42658aba744b439f3290", size = 12440880, upload-time = "2026-07-27T18:32:26.341Z" }, + { url = "https://files.pythonhosted.org/packages/ee/d0/bedac20505e8a8f5501ad73d7d15d8e421a563fef59993909a23036929a4/ty-0.0.64-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:652ee3d6d03bea76cd2fe8949c78bb5970394ebd7c5fd270e9518c0dee1b931d", size = 12782439, upload-time = "2026-07-27T18:32:28.642Z" }, + { url = "https://files.pythonhosted.org/packages/79/d5/795733f13ceff1378f08b3de0c49d0f518df220ed856b0dfac869f3b7c81/ty-0.0.64-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4838768295774a86e95f9ec5633e739d016adbbb69dcbdc62f3549578a11f624", size = 11814821, upload-time = "2026-07-27T18:32:30.632Z" }, + { url = "https://files.pythonhosted.org/packages/52/3e/9d99cd1e1831003434f508ed9f258a56543194afc3bbe051eba2545fa676/ty-0.0.64-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5a3d700669868599edf39ce5125196682f15a8880cc8c669bc2a83b99984d99b", size = 11928678, upload-time = "2026-07-27T18:32:32.888Z" }, + { url = "https://files.pythonhosted.org/packages/b8/3d/448f49a3503fb119a34348a5714bb92001f252fadbbb12d645f2e744b557/ty-0.0.64-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b161f0a82a8e2f2432db3bf7702b4d3924fa9486ba0014f6710a160fc157df0d", size = 12202249, upload-time = "2026-07-27T18:32:34.905Z" }, + { url = "https://files.pythonhosted.org/packages/dd/9b/75768e562cec990d189dc05807ae72890b20ffbd1e1f43597bb98db63c60/ty-0.0.64-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:39b9dd42908df47c2dc57dda87e656fab97097ffd2618474bbdea986af0d6a9d", size = 12548817, upload-time = "2026-07-27T18:32:36.995Z" }, + { url = "https://files.pythonhosted.org/packages/34/89/44cc276ea6ca0245495014758ffeadde1798fb0b5840c9cf36d8d2ed3250/ty-0.0.64-py3-none-win32.whl", hash = "sha256:d0676ab0e0935795e5843baa28dd5e366dc343d7c0945a996df9eab8e0644885", size = 11545474, upload-time = "2026-07-27T18:32:39.389Z" }, + { url = "https://files.pythonhosted.org/packages/01/7e/d1c8a871a38d17c8f168b9a6975f6247f7660f8334e517656a5e4b4a4858/ty-0.0.64-py3-none-win_amd64.whl", hash = "sha256:dcb9bd31f54097e362b776c26ab4564d4564cdd1355cb883481167a26c03cc3f", size = 12542987, upload-time = "2026-07-27T18:32:41.412Z" }, + { url = "https://files.pythonhosted.org/packages/35/4d/6d18640d0204cacd69abbaca95ad6a34c6d7e9169e9051d0117b17b827ec/ty-0.0.64-py3-none-win_arm64.whl", hash = "sha256:82cc34c1ad9a8feb6059aef193bebcecc656e548f6fab3d518bcd8b57d198d39", size = 11899263, upload-time = "2026-07-27T18:32:43.366Z" }, ] [[package]] name = "typing-extensions" -version = "4.15.0" +version = "4.16.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/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } 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/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, ] [[package]] name = "tzdata" -version = "2026.2" +version = "2026.3" 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/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" } 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/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" }, ] [[package]] name = "urllib3" version = "2.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602 } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087 }, + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, ] [[package]] @@ -2349,46 +2461,45 @@ dependencies = [ { name = "packaging", marker = "python_full_version < '3.11'" }, { name = "pandas", version = "2.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185 } +sdist = { url = "https://files.pythonhosted.org/packages/19/ec/e50d833518f10b0c24feb184b209bb6856f25b919ba8c1f89678b930b1cd/xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0", size = 3003185, upload-time = "2025-06-12T03:04:09.099Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739 }, + { url = "https://files.pythonhosted.org/packages/82/8a/6b50c1dd2260d407c1a499d47cf829f59f07007e0dcebafdabb24d1d26a5/xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b", size = 1314739, upload-time = "2025-06-12T03:04:06.708Z" }, ] [[package]] name = "xarray" -version = "2026.4.0" +version = "2026.7.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.11.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version == '3.11.*' and sys_platform == 'emscripten'", "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11.*'" }, - { name = "numpy", version = "2.5.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "pandas", version = "3.0.0rc1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, - { name = "pandas", version = "3.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' and python_full_version < '3.14'" }, + { name = "pandas", version = "3.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311 } +sdist = { url = "https://files.pythonhosted.org/packages/ea/96/3f7bdd00e505ec3698903415b30135024703e017b28c6b61f98da3193b0d/xarray-2026.7.0.tar.gz", hash = "sha256:361b495928fdbf5b58d0969bb6775339019da5e93ca74d61ddf4eb5edd6ce604", size = 3145348, upload-time = "2026-07-09T17:38:26.515Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326 }, + { url = "https://files.pythonhosted.org/packages/57/5b/28365212062939d213802e5e5fe855cdb231e1c2a93254ba1690066504e3/xarray-2026.7.0-py3-none-any.whl", hash = "sha256:bf9dd130b93806dc78e90c1b7ac24851b31557b888674c53622235691cf21824", size = 1426778, upload-time = "2026-07-09T17:38:24.224Z" }, ] [[package]] name = "zipp" version = "4.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214 } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238 }, + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, ] From a6705b0980c1a238b90bb15711308835b662c3fa Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 08:49:39 +0100 Subject: [PATCH 59/95] Fix problem with setting rhp paramid --- .../src/ppruntime/thermal_indices.py | 49 ++++++++-------- pproc-runtime/src/ppruntime/thermo/helpers.py | 14 ----- pproc-runtime/tests/test_thermal_indices.py | 56 +++++++++++-------- 3 files changed, 57 insertions(+), 62 deletions(-) diff --git a/pproc-runtime/src/ppruntime/thermal_indices.py b/pproc-runtime/src/ppruntime/thermal_indices.py index d141970d..6c4dc5b9 100644 --- a/pproc-runtime/src/ppruntime/thermal_indices.py +++ b/pproc-runtime/src/ppruntime/thermal_indices.py @@ -16,7 +16,6 @@ step_interval, validate_utci, create_output, - create_surface_output, ) from ppruntime.metadata import resolve_metadata @@ -73,7 +72,7 @@ def calc_cossza(*fields: FieldList, metadata: Optional[dict] = None) -> FieldLis return create_output( cossza, metadata_intensity(summed_fields)[:1], - {**resolve_metadata(metadata), "paramId": "214001"}, + {**resolve_metadata(metadata)}, ) @@ -83,10 +82,10 @@ def calc_hmdx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: logger.debug(f"calc_hmdx: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 168]) hmdx = thermofeel.calculate_humidex(*inputs) - return create_surface_output( + return create_output( hmdx, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "261016"}, + {**resolve_metadata(metadata)}, ) @@ -96,10 +95,10 @@ def calc_rhp(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList: logger.debug(f"calc_rhp: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 168]) rhp = thermofeel.calculate_relative_humidity_percent(*inputs) - return create_surface_output( + return create_output( rhp, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "260242"}, + {**resolve_metadata(metadata)}, ) @@ -109,10 +108,10 @@ def calc_heatx(*fields: FieldList, metadata: Optional[dict] = None) -> FieldList logger.debug(f"calc_heatx: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 168]) heatx = thermofeel.calculate_heat_index_adjusted(*inputs) - return create_surface_output( + return create_output( heatx, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "260004"}, + {**resolve_metadata(metadata)}, ) @@ -129,7 +128,7 @@ def calc_dsrp(*fields: FieldList, metadata: Optional[dict] = None): return create_output( dsrp, metadata_accumulation(summed_fields), - {**resolve_metadata(metadata), "paramId": "47"}, + {**resolve_metadata(metadata)}, ) @@ -158,10 +157,10 @@ def calc_utci(*fields: FieldList, metadata: Optional[dict] = None, validate=True validate_utci(utci[index], missing, lats, lons) utci[index][missing] = np.nan - return create_surface_output( + return create_output( utci, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "261001"}, + {**resolve_metadata(metadata)}, ) @@ -171,10 +170,10 @@ def calc_wbgt(*fields: FieldList, metadata: Optional[dict] = None): logger.debug(f"calc_wbgt: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 261002, 207, 168]) wbgt = thermofeel.calculate_wbgt(*inputs) - return create_surface_output( + return create_output( wbgt, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "261014"}, + {**resolve_metadata(metadata)}, ) @@ -186,10 +185,10 @@ def calc_gt(*fields: FieldList, metadata: Optional[dict] = None): gt = thermofeel.calculate_bgt(*inputs) - return create_surface_output( + return create_output( gt, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "261015"}, + {**resolve_metadata(metadata)}, ) @@ -199,10 +198,10 @@ def calc_wbt(*fields: FieldList, metadata: Optional[dict] = None): logger.debug(f"calc_wbt: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 260242]) wbt = thermofeel.calculate_wbt(*inputs) - return create_surface_output( + return create_output( wbt, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "261023"}, + {**resolve_metadata(metadata)}, ) @@ -212,10 +211,10 @@ def calc_nefft(*fields: FieldList, metadata: Optional[dict] = None): logger.debug(f"calc_nefft: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 207, 260242]) nefft = thermofeel.calculate_normal_effective_temperature(*inputs) - return create_surface_output( + return create_output( nefft, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "261018"}, + {**resolve_metadata(metadata)}, ) @@ -225,10 +224,10 @@ def calc_wcf(*fields: FieldList, metadata: Optional[dict] = None): logger.debug(f"calc_wcf: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 207]) wcf = thermofeel.calculate_wind_chill(*inputs) - return create_surface_output( + return create_output( wcf, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "260005"}, + {**resolve_metadata(metadata)}, ) @@ -238,10 +237,10 @@ def calc_aptmp(*fields: FieldList, metadata: Optional[dict] = None): logger.debug(f"calc_aptmp: {summed_fields.ls(namespace='mars')}") inputs = field_values(summed_fields, [167, 207, 260242]) aptmp = thermofeel.calculate_apparent_temperature(*inputs) - return create_surface_output( + return create_output( aptmp, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "260255"}, + {**resolve_metadata(metadata)}, ) @@ -266,8 +265,8 @@ def calc_mrt(*fields: FieldList, metadata: Optional[dict] = None): ssrd * f, ssr * f, dsrp * f, strd * f, fdir * f, strr * f, cossza ) # Kelvin - return create_surface_output( + return create_output( mrt, metadata_intensity(summed_fields), - {**resolve_metadata(metadata), "paramId": "261002"}, + {**resolve_metadata(metadata)}, ) diff --git a/pproc-runtime/src/ppruntime/thermo/helpers.py b/pproc-runtime/src/ppruntime/thermo/helpers.py index 9d65174d..3b044293 100644 --- a/pproc-runtime/src/ppruntime/thermo/helpers.py +++ b/pproc-runtime/src/ppruntime/thermo/helpers.py @@ -178,17 +178,3 @@ def step_interval(fields) -> int: def create_output(values: np.ndarray, template: list[Metadata], metadata: dict): template = [x.override(**metadata) for x in template] return earthkit.data.FieldList.from_array(values, template) - - -def create_surface_output(values: np.ndarray, template: list[Metadata], metadata: dict): - template = [x.override(**metadata) for x in template] - template = [ - x.override( - **metadata, - typeOfFirstFixedSurface=1, - scaleFactorOfFirstFixedSurface="MISSING", - scaledValueOfFirstFixedSurface="MISSING", - ) - for x in template - ] - return earthkit.data.FieldList.from_array(values, template) diff --git a/pproc-runtime/tests/test_thermal_indices.py b/pproc-runtime/tests/test_thermal_indices.py index fb34b64f..cb0b79ac 100644 --- a/pproc-runtime/tests/test_thermal_indices.py +++ b/pproc-runtime/tests/test_thermal_indices.py @@ -1,9 +1,9 @@ import os -import pytest +import pytest from typing import Optional import numpy as np -import earthkit.data +import earthkit.data from ppruntime import thermal_indices @@ -12,38 +12,48 @@ @pytest.mark.parametrize( - "function", [ - thermal_indices.calc_mrt, - thermal_indices.calc_aptmp, - thermal_indices.calc_wcf, - thermal_indices.calc_nefft, - thermal_indices.calc_wbt, - thermal_indices.calc_gt, - thermal_indices.calc_wbgt, - thermal_indices.calc_utci, - thermal_indices.calc_dsrp, - thermal_indices.calc_heatx, - thermal_indices.calc_rhp, - thermal_indices.calc_hmdx, - thermal_indices.calc_cossza, - ] + "function, paramid", + [ + [thermal_indices.calc_mrt, 261002], + [thermal_indices.calc_aptmp, 260255], + [thermal_indices.calc_wcf, 260005], + [thermal_indices.calc_nefft, 261018], + [thermal_indices.calc_wbt, 261023], + [thermal_indices.calc_gt, 261015], + [thermal_indices.calc_wbgt, 261014], + [thermal_indices.calc_utci, 261001], + [thermal_indices.calc_dsrp, 47], + [thermal_indices.calc_heatx, 260004], + [thermal_indices.calc_rhp, 260242], + [thermal_indices.calc_hmdx, 261016], + [thermal_indices.calc_cossza, 214001], + ], ) -def test_thermal_indices(monkeypatch, function): - inputs: earthkit.data.FieldList = earthkit.data.from_source("file", os.path.join(DATA_DIR, "test_2t_12.grib")) # type: ignore +def test_thermal_indices(monkeypatch, function, paramid): + inputs: earthkit.data.FieldList = earthkit.data.from_source( + "file", os.path.join(DATA_DIR, "test_2t_12.grib") + ) # type: ignore + def patched_sel(paramId: Optional[int] = None, stepType: Optional[str] = None): if paramId is not None: selected = inputs.sel(param="2t") if paramId == 214001: # To avoid invalid value warnings for arcsin return earthkit.data.FieldList.from_array( - np.random.rand(*selected.values.shape), selected[0].metadata().override(stepType="diff", stepRange="0-12") - ) + np.random.rand(*selected.values.shape), + selected[0].metadata().override(stepType="diff", stepRange="0-12"), + ) return selected if stepType is not None: param = inputs.sel(param="2t") return earthkit.data.FieldList.from_array( - param.values, param[0].metadata().override(stepType="diff", stepRange="0-12") + param.values, + param[0].metadata().override(stepType="diff", stepRange="0-12"), ) + ds = earthkit.data.FieldList.from_array(inputs.values, inputs.metadata()) monkeypatch.setattr(ds, "sel", patched_sel) - function(ds, metadata={"edition": 2}) \ No newline at end of file + out = function(ds, metadata={"edition": 2, "paramId": paramid}) + metadata = out[0].metadata() + assert metadata.get("paramId") == paramid + assert metadata.get("typeOfFirstFixedSurface") == "sfc" From 4e5bad22977c1609cb4cbbd4def64c39cbd3d4b9 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 08:58:49 +0100 Subject: [PATCH 60/95] Test thermofeel execution --- .../workflows/plugins/pproc/fluent.py | 12 +- pproc-core/tests/schema.yaml | 74 +- pproc/pyproject.toml | 4 - pproc/tests/templates/v3/thermo.yaml | 886 ++++++++++++++++++ pproc/tests/test_products.py | 14 +- 5 files changed, 957 insertions(+), 33 deletions(-) create mode 100644 pproc/tests/templates/v3/thermo.yaml diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index f377a390..1896c2fd 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -496,6 +496,7 @@ def thermal_index( operation=None, coords=[[steps[x], steps[x + 1]] for x in range(len(steps) - 1)], deaccumulate=True, + metadata={"stepType": "diff"}, ) deaccum = type(self)( nodetree_from_dict( @@ -522,10 +523,13 @@ def thermal_index( param_action._squeeze_dimension("step") param_action = param_action.combine_branches(dim=dim) - ret = param_action._wrapped_reduction( - fluent.Payload(func=function, kwargs={"metadata": metadata or {}}), - dim=dim, - ) + if method := getattr(param_action, function, None): + ret = method(dim=dim, metadata=metadata) + else: + ret = param_action._wrapped_reduction( + fluent.Payload(func=function, kwargs={"metadata": metadata or {}}), + dim=dim, + ) ret._add_dimension(dim, str(metadata.get("paramId"))) if not join: return ret diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index 206a89b3..bdd74ff9 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -160,20 +160,30 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 261016 join: false "261023": entrypoint: pproc-thermal-indices preprocessing: - operation: thermal_index - function: "ppruntime.thermal_indices.calc_wbt" + function: "ppruntime.thermal_indices.calc_rhp" params: ["167", "168"] metadata: edition: 2 bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 260242 + join: true + - operation: thermal_index + function: "ppruntime.thermal_indices.calc_wbt" + params: ["167", "260242"] + metadata: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + paramId: 261023 join: false "260242": entrypoint: pproc-thermal-indices @@ -186,7 +196,7 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 260242 join: false "260004": entrypoint: pproc-thermal-indices @@ -199,16 +209,17 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 260004 join: false "260005": entrypoint: pproc-thermal-indices preprocessing: - operation: thermal_index function: norm - params: ["167", "168"] + params: ["165", "166"] metadata: paramId: 207 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_wcf" params: ["167", "207"] @@ -217,7 +228,7 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 260005 join: false "214001": entrypoint: pproc-thermal-indices @@ -231,7 +242,7 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 214001 join: false "47": entrypoint: pproc-thermal-indices @@ -246,6 +257,7 @@ config: packingType: "grid_ccsds" typeOfGeneratingProcess: 2 paramId: 214001 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_dsrp" params: ["228021", "214001"] @@ -255,7 +267,7 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 47 join: false "261002": entrypoint: pproc-thermal-indices @@ -270,25 +282,27 @@ config: packingType: "grid_ccsds" typeOfGeneratingProcess: 2 paramId: 214001 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_mrt" - params: ["214001", "47", "169", "228021", "175", "177", "176"] + params: ["167", "214001", "47", "169", "228021", "175", "177", "176"] deaccumulate: ["47", "169", "228021", "175", "177", "176"] metadata: edition: 2 bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 261002 join: false "261001": entrypoint: pproc-thermal-indices preprocessing: - operation: thermal_index function: norm - params: ["167", "168"] + params: ["165", "166"] metadata: paramId: 207 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_cossza" params: ["167", "228021"] @@ -299,9 +313,10 @@ config: packingType: "grid_ccsds" typeOfGeneratingProcess: 2 paramId: 214001 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_mrt" - params: ["214001", "47", "169", "228021", "175", "177", "176"] + params: ["167", "214001", "47", "169", "228021", "175", "177", "176"] deaccumulate: ["47", "169", "228021", "175", "177", "176"] metadata: edition: 2 @@ -309,6 +324,7 @@ config: packingType: "grid_ccsds" typeOfGeneratingProcess: 2 paramId: 261002 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_utci" params: ["167", "168", "207", "261002"] @@ -317,16 +333,17 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 261001 join: false "261014": entrypoint: pproc-thermal-indices preprocessing: - operation: thermal_index function: norm - params: ["167", "168"] + params: ["165", "166"] metadata: paramId: 207 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_cossza" params: ["167", "228021"] @@ -337,9 +354,10 @@ config: packingType: "grid_ccsds" typeOfGeneratingProcess: 2 paramId: 214001 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_mrt" - params: ["214001", "47", "169", "228021", "175", "177", "176"] + params: ["167", "214001", "47", "169", "228021", "175", "177", "176"] deaccumulate: ["47", "169", "228021", "175", "177", "176"] metadata: edition: 2 @@ -347,6 +365,7 @@ config: packingType: "grid_ccsds" typeOfGeneratingProcess: 2 paramId: 261002 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_wbgt" params: ["167", "168", "207", "261002"] @@ -355,16 +374,17 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 261014 join: false "261015": entrypoint: pproc-thermal-indices preprocessing: - operation: thermal_index function: norm - params: ["167", "168"] + params: ["165", "166"] metadata: paramId: 207 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_cossza" params: ["167", "228021"] @@ -375,9 +395,10 @@ config: packingType: "grid_ccsds" typeOfGeneratingProcess: 2 paramId: 214001 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_mrt" - params: ["214001", "47", "169", "228021", "175", "177", "176"] + params: ["167", "214001", "47", "169", "228021", "175", "177", "176"] deaccumulate: ["47", "169", "228021", "175", "177", "176"] metadata: edition: 2 @@ -385,6 +406,7 @@ config: packingType: "grid_ccsds" typeOfGeneratingProcess: 2 paramId: 261002 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_gt" params: ["167", "207", "261002"] @@ -393,16 +415,17 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 261015 join: false "261018": entrypoint: pproc-thermal-indices preprocessing: - operation: thermal_index function: norm - params: ["167", "168"] + params: ["165", "166"] metadata: paramId: 207 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_rhp" params: ["167", "168"] @@ -412,6 +435,7 @@ config: packingType: "grid_ccsds" typeOfGeneratingProcess: 2 paramId: 260242 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_nefft" params: ["167", "207", "260242"] @@ -420,16 +444,17 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 261018 join: false "260255": entrypoint: pproc-thermal-indices preprocessing: - operation: thermal_index function: norm - params: ["167", "168"] + params: ["165", "166"] metadata: paramId: 207 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_rhp" params: ["167", "168"] @@ -439,6 +464,7 @@ config: packingType: "grid_ccsds" typeOfGeneratingProcess: 2 paramId: 260242 + join: true - operation: thermal_index function: "ppruntime.thermal_indices.calc_aptmp" params: ["167", "260242", "207"] @@ -447,7 +473,7 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" typeOfGeneratingProcess: 2 - paramId: "{param}:int" + paramId: 260255 join: false em/es: entrypoint: "pproc-ensms" diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index af0335bc..35d470ed 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -30,14 +30,12 @@ dependencies = [ "filelock>=3.12", "numexpr", "pproc-core", - "pproc-runtime", "psutil", "scikit-learn", "scipy>=1.8", "xarray", ] optional-dependencies.tcycl = [ - "pyinfero @ git+ssh://git@github.com/ecmwf/infero.git@0.3.1#subdirectory=src/infero/api/pyinfero", "wget", ] scripts.pproc-accumulate = "pproc.accumulate:main" @@ -99,10 +97,8 @@ package = true [tool.uv.sources] pproc-core = { workspace = true } -pproc-runtime = { workspace = true } [tool.uv.workspace] members = [ "../pproc-core", - "../pproc-runtime", ] diff --git a/pproc/tests/templates/v3/thermo.yaml b/pproc/tests/templates/v3/thermo.yaml new file mode 100644 index 00000000..5413bccd --- /dev/null +++ b/pproc/tests/templates/v3/thermo.yaml @@ -0,0 +1,886 @@ +log: + level: INFO + format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' +execution: + hosts: 1 + workers: 1 +products: +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: ppruntime.thermal_indices.calc_cossza + params: + - '167' + - '228021' + deaccumulate: + - '228021' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 214001 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_mrt + params: + - '167' + - '214001' + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + deaccumulate: + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261002 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: + - 0 + - 1 + expver: '0001' + levtype: sfc + param: + - '47' + - '228021' + - '169' + - '175' + - '176' + - '177' + date: '20260720' + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: '167' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261002 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_cossza + params: + - '167' + - '228021' + deaccumulate: + - '228021' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 214001 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_mrt + params: + - '167' + - '214001' + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + deaccumulate: + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261002 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_utci + params: + - '167' + - '168' + - '207' + - '261002' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261001 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: + - 0 + - 1 + expver: '0001' + levtype: sfc + param: + - '169' + - '175' + - '176' + - '177' + - '228021' + - '47' + date: '20260720' + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261001 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: ppruntime.thermal_indices.calc_heatx + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260004 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 260004 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_wcf + params: + - '167' + - '207' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260005 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 260005 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_rhp + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260242 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_aptmp + params: + - '167' + - '260242' + - '207' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260255 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 260255 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: ppruntime.thermal_indices.calc_rhp + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260242 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 260242 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: ppruntime.thermal_indices.calc_hmdx + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261016 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261016 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_rhp + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260242 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_nefft + params: + - '167' + - '207' + - '260242' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261018 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261018 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_cossza + params: + - '167' + - '228021' + deaccumulate: + - '228021' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 214001 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_mrt + params: + - '167' + - '214001' + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + deaccumulate: + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261002 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_gt + params: + - '167' + - '207' + - '261002' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261015 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: + - 0 + - 1 + expver: '0001' + levtype: sfc + param: + - '169' + - '175' + - '176' + - '177' + - '228021' + - '47' + date: '20260720' + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261015 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_cossza + params: + - '167' + - '228021' + deaccumulate: + - '228021' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 214001 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_mrt + params: + - '167' + - '214001' + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + deaccumulate: + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261002 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_wbgt + params: + - '167' + - '168' + - '207' + - '261002' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261014 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: + - 0 + - 1 + expver: '0001' + levtype: sfc + param: + - '169' + - '175' + - '176' + - '177' + - '228021' + - '47' + date: '20260720' + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261014 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: ppruntime.thermal_indices.calc_rhp + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260242 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_wbt + params: + - '167' + - '260242' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261023 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261023 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +input_overrides: {} +output_overrides: {} diff --git a/pproc/tests/test_products.py b/pproc/tests/test_products.py index 7b355abd..d66975e1 100644 --- a/pproc/tests/test_products.py +++ b/pproc/tests/test_products.py @@ -207,8 +207,20 @@ def test_products_v2(tmpdir, monkeypatch, fdb, product, main, custom_args, req, }, 20, ], + [ + "thermo", + { + "stream": "oper", + "type": "fc", + "param": [261002, 261001, 260004, 260005, 260255, 260242, 261016, 261018, 261015, 261014, 261023], + "step": [1], + "date": 20260720, + "time": 12, + }, + 11, + ], ], - ids=["ensms", "prob", "quantiles"], + ids=["ensms", "prob", "quantiles", "thermo"], ) def test_products_v3(tmpdir, monkeypatch, fdb, product, req, length): monkeypatch.chdir(tmpdir) # To avoid polluting cwd with grib templates From d06a86f2a64ae08bc9eae9c5f470784201cf34d3 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 08:59:01 +0100 Subject: [PATCH 61/95] Update pproc lock --- pproc/uv.lock | 2936 ++++++++++++++++++++++--------------------------- 1 file changed, 1324 insertions(+), 1612 deletions(-) diff --git a/pproc/uv.lock b/pproc/uv.lock index 32231164..359f2ada 100644 --- a/pproc/uv.lock +++ b/pproc/uv.lock @@ -1,4 +1,5 @@ version = 1 +revision = 3 requires-python = ">=3.11" resolution-markers = [ "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", @@ -16,78 +17,51 @@ resolution-markers = [ members = [ "pproc", "pproc-core", - "pproc-runtime", ] [[package]] name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] [[package]] name = "array-api-compat" version = "1.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/86/12/65d297d3e425cb7fe5247b7ec14b4ed83539e9b5e89b65c15ea7ee274182/array_api_compat-1.15.0.tar.gz", hash = "sha256:53c5f922491bf15f62847afafc4e39eedfae57d218988fefb8cce39c2a9b3dea", size = 129305 } +sdist = { url = "https://files.pythonhosted.org/packages/86/12/65d297d3e425cb7fe5247b7ec14b4ed83539e9b5e89b65c15ea7ee274182/array_api_compat-1.15.0.tar.gz", hash = "sha256:53c5f922491bf15f62847afafc4e39eedfae57d218988fefb8cce39c2a9b3dea", size = 129305, upload-time = "2026-06-07T20:53:24.964Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/86/16/1a8fd2b19544b84575cf84ef7aa3ad4c173b756d5f087c91f85d1b295777/array_api_compat-1.15.0-py3-none-any.whl", hash = "sha256:7b1b9c53269061403fd5f45a8de349f16e7887653328bfa0c5f2d45299ff0a8e", size = 79113 }, + { url = "https://files.pythonhosted.org/packages/86/16/1a8fd2b19544b84575cf84ef7aa3ad4c173b756d5f087c91f85d1b295777/array_api_compat-1.15.0-py3-none-any.whl", hash = "sha256:7b1b9c53269061403fd5f45a8de349f16e7887653328bfa0c5f2d45299ff0a8e", size = 79113, upload-time = "2026-06-07T20:53:23.621Z" }, ] [[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 }, -] - -[[package]] -name = "atlaslib-ecmwf" -version = "0.46.0.19" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "eckitlib" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/22/b9c3d9b0198c4bb2df40510793402463e0b471bf20de260561d51271c845/atlaslib_ecmwf-0.46.0.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:21ba8c25b6d9024674ce47582e086c7628fb8f2663d476056ef13d705cd148ab", size = 5200826 }, - { url = "https://files.pythonhosted.org/packages/4d/87/5fd44d072449dd41099be19073049e6a5a82089141bd433dc9cde3895e2a/atlaslib_ecmwf-0.46.0.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:d12b4481546d2bcab7b9481e816d1e9424814a5258ceb7efd8af95f21619cad3", size = 5794258 }, - { url = "https://files.pythonhosted.org/packages/55/06/24e64985cb6a872bd1b350b756f7686656093e99d3c4f2eea837fb72ee3f/atlaslib_ecmwf-0.46.0.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b27205c408cb2f809993275b39b8d71990921270876114b2e6e4275837a4d056", size = 6061766 }, - { url = "https://files.pythonhosted.org/packages/73/1e/1366068bf78390918fc5b460c65274d5887f0370326d2b033b416358a4f4/atlaslib_ecmwf-0.46.0.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:88d8f97bf2f03432803850acd09738a99fc6e72f316b97195bed2417bbb3a426", size = 6423405 }, - { url = "https://files.pythonhosted.org/packages/d5/e6/acd57994110b415d229856abd24dd7a481e47371ab295fe93fb2aa51eb00/atlaslib_ecmwf-0.46.0.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:01eebce538aa17fb0e32466209eaf3284411ef83c47040e689e250422fb3ffb5", size = 5200825 }, - { url = "https://files.pythonhosted.org/packages/d3/b7/fe0d0b6b483b667c59ffd84f167c9125e4eddfdd60445bb88126c2dbef41/atlaslib_ecmwf-0.46.0.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:a6c534e57d23e591074d2f5943b4727441de00e3b606d3a42500897f5373c310", size = 5794255 }, - { url = "https://files.pythonhosted.org/packages/bd/9d/bf8829d673ad92b2bc87ab236987d47916ff9850c66fa422d1cdf70de14f/atlaslib_ecmwf-0.46.0.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:85ef8a2e20d10190fe866966490e1f170450e9e507d9af665b45d9d532cd524a", size = 6061713 }, - { url = "https://files.pythonhosted.org/packages/d6/66/f715e844a5861a25279ce888a2edacb2cb39487176eb4ed35cf894228e7b/atlaslib_ecmwf-0.46.0.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:248b84de9f49529cc15b16e0cfc0440983b01a0266d910aee0525bd71563b32b", size = 6423393 }, - { url = "https://files.pythonhosted.org/packages/83/9c/053012c75f41aeedeeab5b36442b1dbdeea2905b9d2cd3d969564968b7ca/atlaslib_ecmwf-0.46.0.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:130cfa4fac5afdbd5736dd825a590808e697f81bdb42d5c6651a3a204edf21cb", size = 5200826 }, - { url = "https://files.pythonhosted.org/packages/9c/7d/f455ec827e1253aa3f513d137d85e0ac2d2cc16c2e1b0a11e9acaf304427/atlaslib_ecmwf-0.46.0.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:d90522885a2a001513e1af0b14005cb852ff386fa90476001c56cd45c0d0beaa", size = 5794254 }, - { url = "https://files.pythonhosted.org/packages/83/a2/010ed47f3f2d50a30404c5e47bdf4d8a95c23e91801b0c83d6ace54030e4/atlaslib_ecmwf-0.46.0.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:856a991ef92221dbf0fbd7d43dfeb9776aab027e349caea0702dea5ceb44bc24", size = 6061712 }, - { url = "https://files.pythonhosted.org/packages/37/1e/dd2831805246552dbbe87bb65451098d490cf325b993fe5ccb94044027aa/atlaslib_ecmwf-0.46.0.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ecc0292fcc5971036ff2e4ea4f27ed74b3c0176658b6ef5f95d979e84210a33b", size = 6423393 }, - { url = "https://files.pythonhosted.org/packages/08/b5/eb7d9a3a1bf3e6bed160eb8d33c9adabb77a57cd4eecfafc2c5d1c02c2aa/atlaslib_ecmwf-0.46.0.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:f1237f4eeee2a65e9bd16f3278a16d2f5fd2a0f3bfa1df6adda50b2c7ee3fa8f", size = 5200829 }, - { url = "https://files.pythonhosted.org/packages/92/be/4230bed074027242c0ee34ac507f38a2ac94e164927de60d506a47c771fe/atlaslib_ecmwf-0.46.0.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:91faa9dcf3efcca4093863a21bcdf8e2aea1bab3340a4a65bc02edd8d957926c", size = 5794265 }, - { url = "https://files.pythonhosted.org/packages/68/67/5fe31bd3a7df78533bcfc004e4554a8fbd5b89d2756bb57426cfd6286f00/atlaslib_ecmwf-0.46.0.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:478da5a786310ab188d03e91fb19a98d326f7b5aa6b86943aad837badb310cb9", size = 6061701 }, - { url = "https://files.pythonhosted.org/packages/bf/24/fcd862359b88dcd0d8cd51320c738b6426e001d5e45911cf2246857c0b1e/atlaslib_ecmwf-0.46.0.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:f0df39af92336edba1c569f1eb431b20a209954134409ad77ab20fe7bc933025", size = 6423396 }, + { 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 }, + { 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 = "certifi" version = "2026.5.20" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422 } +sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134 }, + { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" }, ] [[package]] @@ -97,67 +71,67 @@ 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 }, - { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271 }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048 }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529 }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097 }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983 }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519 }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572 }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963 }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361 }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932 }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557 }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762 }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230 }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043 }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446 }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101 }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948 }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422 }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499 }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928 }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302 }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909 }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402 }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780 }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320 }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487 }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049 }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793 }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300 }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244 }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828 }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926 }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328 }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650 }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687 }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773 }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013 }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593 }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354 }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480 }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584 }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443 }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437 }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487 }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726 }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195 }, +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, 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" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, ] [[package]] @@ -170,9 +144,9 @@ dependencies = [ { name = "eccodes" }, { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591 } +sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591, upload-time = "2025-09-30T22:46:14.133Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123 }, + { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123, upload-time = "2025-09-30T22:46:12.206Z" }, ] [[package]] @@ -182,131 +156,131 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733 }, - { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946 }, - { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856 }, - { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573 }, - { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563 }, - { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631 }, - { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383 }, - { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175 }, - { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980 }, - { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166 }, - { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614 }, - { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090 }, - { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840 }, - { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534 }, - { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453 }, - { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541 }, - { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014 }, - { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625 }, - { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269 }, - { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364 }, - { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468 }, - { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725 }, - { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445 }, - { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434 }, - { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812 }, - { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768 }, - { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818 }, - { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862 }, - { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781 }, - { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218 }, - { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932 }, - { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894 }, - { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027 }, - { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065 }, +sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605, upload-time = "2025-10-13T18:56:26.352Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733, upload-time = "2025-10-13T18:56:00.189Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946, upload-time = "2025-10-13T18:56:01.262Z" }, + { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856, upload-time = "2025-10-13T19:39:12.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573, upload-time = "2025-10-13T18:56:02.788Z" }, + { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563, upload-time = "2025-10-13T18:56:04.075Z" }, + { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631, upload-time = "2025-10-13T18:56:05.159Z" }, + { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383, upload-time = "2026-01-02T21:16:47.317Z" }, + { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175, upload-time = "2025-10-13T18:56:06.398Z" }, + { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980, upload-time = "2025-10-13T18:56:08.669Z" }, + { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166, upload-time = "2025-10-13T19:39:14.109Z" }, + { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614, upload-time = "2025-10-13T18:56:09.815Z" }, + { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090, upload-time = "2025-10-13T18:56:11.442Z" }, + { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840, upload-time = "2025-10-13T18:56:12.506Z" }, + { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534, upload-time = "2026-01-02T21:16:48.784Z" }, + { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453, upload-time = "2025-10-13T18:56:13.545Z" }, + { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541, upload-time = "2025-10-13T18:56:14.612Z" }, + { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014, upload-time = "2025-10-13T19:39:15.346Z" }, + { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625, upload-time = "2025-10-13T18:56:15.745Z" }, + { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269, upload-time = "2025-10-13T18:56:17.04Z" }, + { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364, upload-time = "2025-10-13T18:56:18.05Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468, upload-time = "2026-01-02T21:16:50.193Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725, upload-time = "2025-10-13T18:56:19.424Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445, upload-time = "2025-10-13T18:56:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434, upload-time = "2025-10-13T19:39:17.084Z" }, + { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812, upload-time = "2025-10-13T18:56:21.971Z" }, + { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768, upload-time = "2025-10-13T18:56:24.027Z" }, + { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818, upload-time = "2025-10-13T18:56:25.376Z" }, + { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862, upload-time = "2026-01-02T20:45:02.625Z" }, + { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781, upload-time = "2026-01-02T20:45:04.818Z" }, + { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218, upload-time = "2026-01-02T20:45:06.788Z" }, + { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932, upload-time = "2026-01-02T20:45:11.194Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894, upload-time = "2026-01-02T20:45:16.351Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027, upload-time = "2026-01-02T20:45:20.023Z" }, + { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065, upload-time = "2026-01-02T20:45:23.398Z" }, ] [[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/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328 }, - { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061 }, - { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031 }, - { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239 }, - { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589 }, - { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733 }, - { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652 }, - { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229 }, - { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552 }, - { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806 }, - { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316 }, - { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274 }, - { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468 }, - { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460 }, - { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330 }, - { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828 }, - { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627 }, - { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008 }, - { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303 }, - { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282 }, - { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595 }, - { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986 }, - { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711 }, - { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036 }, - { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998 }, - { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056 }, - { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537 }, - { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176 }, - { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723 }, - { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085 }, - { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819 }, - { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915 }, - { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234 }, - { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042 }, - { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706 }, - { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727 }, - { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882 }, - { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860 }, - { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564 }, - { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276 }, - { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238 }, - { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189 }, - { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352 }, - { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024 }, - { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869 }, - { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541 }, - { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634 }, - { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384 }, - { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133 }, - { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257 }, - { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851 }, - { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393 }, - { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251 }, - { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609 }, - { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014 }, - { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979 }, - { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238 }, - { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110 }, - { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824 }, - { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103 }, - { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194 }, - { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827 }, - { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168 }, - { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018 }, - { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958 }, +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, 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/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031, upload-time = "2026-04-02T09:26:26.865Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239, upload-time = "2026-04-02T09:26:28.044Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733, upload-time = "2026-04-02T09:26:30.5Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652, upload-time = "2026-04-02T09:26:31.709Z" }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552, upload-time = "2026-04-02T09:26:34.845Z" }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806, upload-time = "2026-04-02T09:26:36.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316, upload-time = "2026-04-02T09:26:37.672Z" }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274, upload-time = "2026-04-02T09:26:38.93Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460, upload-time = "2026-04-02T09:26:41.416Z" }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330, upload-time = "2026-04-02T09:26:42.554Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828, upload-time = "2026-04-02T09:26:44.075Z" }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, + { 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]] @@ -316,36 +290,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007 } +sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639 }, + { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" }, ] [[package]] name = "cloudpickle" version = "3.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330 } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228 }, + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, ] [[package]] name = "code-meters" version = "0.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129 } +sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129, upload-time = "2024-02-23T15:50:40.138Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801 }, + { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801, upload-time = "2024-02-23T15:50:38.443Z" }, ] [[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]] @@ -357,9 +331,9 @@ dependencies = [ { name = "pyyaml" }, { name = "rich-argparse" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cf/19/e8143a210b58494025803a684de9eb94998b7b8288f42f15fbee0161019c/conflator-0.1.8.tar.gz", hash = "sha256:9ee8958a3eebbfeb6fafc4b0b7b77c8a97d1752fd725ca8a514046a596f26508", size = 9753 } +sdist = { url = "https://files.pythonhosted.org/packages/cf/19/e8143a210b58494025803a684de9eb94998b7b8288f42f15fbee0161019c/conflator-0.1.8.tar.gz", hash = "sha256:9ee8958a3eebbfeb6fafc4b0b7b77c8a97d1752fd725ca8a514046a596f26508", size = 9753, upload-time = "2025-12-01T12:37:00.038Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/aa/0d6a2c96234fb5cc3d55a3f5078268ef6bc4e69d202f86b93f17b3f8d2eb/conflator-0.1.8-py3-none-any.whl", hash = "sha256:7e621da64183bc9207b3857cebaa9cd1aee52ea6cb4aea7492aa9d9a4b4968c5", size = 10806 }, + { url = "https://files.pythonhosted.org/packages/a2/aa/0d6a2c96234fb5cc3d55a3f5078268ef6bc4e69d202f86b93f17b3f8d2eb/conflator-0.1.8-py3-none-any.whl", hash = "sha256:7e621da64183bc9207b3857cebaa9cd1aee52ea6cb4aea7492aa9d9a4b4968c5", size = 10806, upload-time = "2025-12-01T12:36:58.839Z" }, ] [[package]] @@ -376,18 +350,18 @@ dependencies = [ { name = "pyyaml" }, { name = "toolz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d7/2a/5d8cc1579590af86576dde890254440e478c7174b93a02095ecfc2e6ba38/dask-2026.3.0.tar.gz", hash = "sha256:f7d96c8274e8a900d217c1ff6ea8d1bbf0b4c2c21e74a409644498d925eb8f85", size = 11000710 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/2a/5d8cc1579590af86576dde890254440e478c7174b93a02095ecfc2e6ba38/dask-2026.3.0.tar.gz", hash = "sha256:f7d96c8274e8a900d217c1ff6ea8d1bbf0b4c2c21e74a409644498d925eb8f85", size = 11000710, upload-time = "2026-03-18T07:10:14.945Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630 }, + { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630, upload-time = "2026-03-18T07:10:12.832Z" }, ] [[package]] name = "decorator" version = "5.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084 } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365 }, + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, ] [[package]] @@ -397,9 +371,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788 } +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788, upload-time = "2020-04-20T14:23:38.738Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178 }, + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" }, ] [[package]] @@ -426,30 +400,9 @@ dependencies = [ { name = "tqdm" }, { name = "xarray" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819 } +sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819, upload-time = "2026-05-13T12:22:44.707Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/d3/a00aeee76005909eaa1f7fcb1e1f2333d9f4b53866666e1bb7f9e9e15148/earthkit_data-0.20.0-py3-none-any.whl", hash = "sha256:e1df4d93354bb5bd30b967ad17d52454b4df4d6a37511fc91f950aebba592056", size = 398525 }, -] - -[package.optional-dependencies] -fdb = [ - { name = "pyfdb" }, -] -mars = [ - { name = "ecmwf-api-client" }, -] - -[[package]] -name = "earthkit-meteo" -version = "0.6.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "earthkit-utils" }, - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/14/87/162771cba3c4371e054914750164851e32bafe924c674153105789f01c88/earthkit_meteo-0.6.2.tar.gz", hash = "sha256:2823ed56947dd2c9c69aae6fe19153eec393c80392126ab84cc760419d0b952b", size = 370304 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/d3/988c1807b315a71cb4f6e5b2b739b115246083dc678b50fa9ff97c8a417a/earthkit_meteo-0.6.2-py3-none-any.whl", hash = "sha256:7380464a3a62422d4027bcfc20fbd4ee3a7bfc51eb1f89d1a5027f24c7f32a4d", size = 57004 }, + { url = "https://files.pythonhosted.org/packages/b9/d3/a00aeee76005909eaa1f7fcb1e1f2333d9f4b53866666e1bb7f9e9e15148/earthkit_data-0.20.0-py3-none-any.whl", hash = "sha256:e1df4d93354bb5bd30b967ad17d52454b4df4d6a37511fc91f950aebba592056", size = 398525, upload-time = "2026-05-13T12:22:43.362Z" }, ] [[package]] @@ -459,9 +412,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyyaml" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/49/fa/37a9a90303908685fba892402248789de689071f6ad4c1373dfd195ac34e/earthkit_time-0.1.8.tar.gz", hash = "sha256:d211f1647c169b34cf79177aed17ac4f472cb8bd3096f98b08d7f77293dfcd81", size = 32560 } +sdist = { url = "https://files.pythonhosted.org/packages/49/fa/37a9a90303908685fba892402248789de689071f6ad4c1373dfd195ac34e/earthkit_time-0.1.8.tar.gz", hash = "sha256:d211f1647c169b34cf79177aed17ac4f472cb8bd3096f98b08d7f77293dfcd81", size = 32560, upload-time = "2026-02-16T17:40:08.144Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/96/614cc95e2bd7f2075b8b4f4b85b37df655c3cc3028f949b799224f4546d4/earthkit_time-0.1.8-py3-none-any.whl", hash = "sha256:a09de208a3696f497e2d9495e535a9e2fc805f0148d4e2555abefd0da759216d", size = 28772 }, + { url = "https://files.pythonhosted.org/packages/40/96/614cc95e2bd7f2075b8b4f4b85b37df655c3cc3028f949b799224f4546d4/earthkit_time-0.1.8-py3-none-any.whl", hash = "sha256:a09de208a3696f497e2d9495e535a9e2fc805f0148d4e2555abefd0da759216d", size = 28772, upload-time = "2026-02-16T17:40:07.195Z" }, ] [[package]] @@ -472,9 +425,9 @@ dependencies = [ { name = "array-api-compat" }, { name = "pint" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013 } +sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013, upload-time = "2026-03-24T14:57:10.184Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/cb/0c9f59b0ca2a5ed941b65c52a4a005a7e16511f52fc3965eb45c53565b76/earthkit_utils-0.3.0-py3-none-any.whl", hash = "sha256:167e0385e062800d6c9f2d25a2a3075d7d91b67c3a02af52d772175b2313aa89", size = 35650 }, + { url = "https://files.pythonhosted.org/packages/eb/cb/0c9f59b0ca2a5ed941b65c52a4a005a7e16511f52fc3965eb45c53565b76/earthkit_utils-0.3.0-py3-none-any.whl", hash = "sha256:167e0385e062800d6c9f2d25a2a3075d7d91b67c3a02af52d772175b2313aa89", size = 35650, upload-time = "2026-03-24T14:57:08.869Z" }, ] [[package]] @@ -495,9 +448,9 @@ dependencies = [ { name = "sortedcontainers" }, { name = "xarray" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/c6/8fd4b42984abff59eaf7bc2bc727a713c4b65539e55324b354aef2795fad/earthkit_workflows-0.15.2.tar.gz", hash = "sha256:616a3065fd14d4be282327048898355f3d4f972b8a648bbb87cbed9329c83202", size = 10865493 } +sdist = { url = "https://files.pythonhosted.org/packages/ff/c6/8fd4b42984abff59eaf7bc2bc727a713c4b65539e55324b354aef2795fad/earthkit_workflows-0.15.2.tar.gz", hash = "sha256:616a3065fd14d4be282327048898355f3d4f972b8a648bbb87cbed9329c83202", size = 10865493, upload-time = "2026-07-08T09:20:38.402Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/45/835afbb6254535370fb0f1917607e7b1b1a0a737a155d5e2f8f2b2ad3e88/earthkit_workflows-0.15.2-py3-none-any.whl", hash = "sha256:ba9ac562c0b57bc05a380b0a2d9881c1c261bab68912491ed431fb9a9da20f0d", size = 217575 }, + { url = "https://files.pythonhosted.org/packages/3c/45/835afbb6254535370fb0f1917607e7b1b1a0a737a155d5e2f8f2b2ad3e88/earthkit_workflows-0.15.2-py3-none-any.whl", hash = "sha256:ba9ac562c0b57bc05a380b0a2d9881c1c261bab68912491ed431fb9a9da20f0d", size = 217575, upload-time = "2026-07-08T09:20:37.055Z" }, ] [package.optional-dependencies] @@ -516,134 +469,48 @@ dependencies = [ { name = "findlibs" }, { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928 }, - { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009 }, - { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001 }, - { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567 }, -] - -[[package]] -name = "eccodeslib" -version = "2.46.2.19" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "eckitlib" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/b6/c2dab62331d291aa0e3d39d5a7021d3403d221a68d929dd9c0142ad5e847/eccodeslib-2.46.2.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:592295430695846ca258fe46f7cb8fc937331bc722e5ad56efca45b743b6374d", size = 8900035 }, - { url = "https://files.pythonhosted.org/packages/8d/b4/7422f4457b4becc32d5f02c5fd7bf8fb184bb0667cd30bcd80a7fc33aac9/eccodeslib-2.46.2.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:a1a6c4e0c783194760dc18d86b07c85f343e83eb19836e9b5f35712de302e406", size = 8731409 }, - { url = "https://files.pythonhosted.org/packages/8b/20/864f25031ebe08cb60a5ba15cf4385338aacc445a4b2bdb4ae0b65115f22/eccodeslib-2.46.2.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6a8c1431f025a2e6015cb7ed59b17c3e11cd48e88316dabe66eb0cb72d02e820", size = 9093647 }, - { url = "https://files.pythonhosted.org/packages/4f/2a/04b7093c1663b5d514487fa7ec95d87f4fe0ee296bb3dc669ec8c83d59c1/eccodeslib-2.46.2.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:095d9bbf2943c0d2435cc7a1971ccd599a04f0e9d3b03def5872eb700b2ba663", size = 8986650 }, - { url = "https://files.pythonhosted.org/packages/0b/ab/eb96e7b9a69521e438f2a562e029e0452e80be93b8f4c8b32be2766913f9/eccodeslib-2.46.2.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:5cb46d9bda6324935539457282195f8fc5df38dae4ea7ff545ba76a9cd50cf5f", size = 8899990 }, - { url = "https://files.pythonhosted.org/packages/98/fe/7c3bec98984b4e946431d13fddf2ebdd5436106a9f85c1a3938e7339c26d/eccodeslib-2.46.2.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:73880e83765b78b149b747549674cf264b2e7bf64532ab4e99eb1225cb8bb485", size = 8731401 }, - { url = "https://files.pythonhosted.org/packages/11/e4/1cdffaa4abd303726a06bc9630b7197360df35d11c297c702bf8b6e83fdd/eccodeslib-2.46.2.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8174d1350e629a0a4e51fbf63703658b1ed2f7423e7cb083a2b539a7dcee80cb", size = 9093644 }, - { url = "https://files.pythonhosted.org/packages/f0/f4/2f83c12c9987040a1a165534e02e28a82acef9744552cba43e705a674689/eccodeslib-2.46.2.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:cab8151ac204a45088d7789236183e8ff7a51fafd168be1488a0c10be886f0f4", size = 8986646 }, - { url = "https://files.pythonhosted.org/packages/d3/12/e48ea960e13791b033c08b25045eeb8221df8beb3a9e58d0753bf5bd42fe/eccodeslib-2.46.2.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:f5fe6a0787381115929ba521d9dafae7cb9c0c9b72790e4f92db1a09a043625f", size = 8899996 }, - { url = "https://files.pythonhosted.org/packages/01/8a/0826b05445c886e95fc46ac908afae28d28a06bb66f4f84dbbf710360a85/eccodeslib-2.46.2.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:a5ba7e609de866ed0f2d45b4785a8a870d21efb6e9e5a71e219d39e8fdeebdf0", size = 8731409 }, - { url = "https://files.pythonhosted.org/packages/bf/3b/758a073c4ed5b1c732f6a3b4a5ba7d8ca122d8408ebc7dd608e7e447c07c/eccodeslib-2.46.2.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:4500abf05428d94693dd29c589c6d208f2d48aff5efa145425c704fcd1f46925", size = 9093643 }, - { url = "https://files.pythonhosted.org/packages/d9/48/5e0e31e3cb310fbe04b08040e96d3107639ceef8a94f8788691af77beb54/eccodeslib-2.46.2.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0f14eb14f37af34bb79f43ba8ab8dff99d6d4876b6681614c6644a3cbbb89d6c", size = 8986651 }, - { url = "https://files.pythonhosted.org/packages/d2/90/3a3180b227e6483e80e6631e8630d8942fc8bfc66b8e6acd9f5549c537c6/eccodeslib-2.46.2.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:d93146a2770d3169f91129193e995a0bd58ac933937e26909c65c347f36b94a6", size = 8900007 }, - { url = "https://files.pythonhosted.org/packages/f4/91/901cb12b04f988420b7e75c914f7361ce5c23bff8c19e8b1d9c56657d7bc/eccodeslib-2.46.2.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:9c2da433e1d87ee4554b684c625234cbca14fa51181256b78a9d646a90f2fe22", size = 8731400 }, - { url = "https://files.pythonhosted.org/packages/ef/33/ab3c19ffc2675514259ff61a8ea757fb2a470ad6052371384f2a5021046c/eccodeslib-2.46.2.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:e62e4d893ec2939b6096c6aed21e31d38a979e33d50917611a1907b3ef0a2996", size = 9093646 }, - { url = "https://files.pythonhosted.org/packages/d7/41/c8ab7aadf86d28149c636970704a923c161b81ce301bc0fc3da82ce3d737/eccodeslib-2.46.2.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:5daa5a8290d10accf308a94678ebc85c8fd843e20f2d5d644559d4a691dd4af1", size = 8986650 }, -] - -[[package]] -name = "eckitlib" -version = "2.0.7.19" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/dc/8729911c1d77aa26438abcfb8b2cab5893c32961068070cfff0bd8dbd7e7/eckitlib-2.0.7.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:d754b8f61dc376daf350f6d1f0e951260716e2b7be5081fa1160646ee121fcce", size = 2480047 }, - { url = "https://files.pythonhosted.org/packages/1e/8b/72e40a8cf04e4fe6b8c2e396f8c9926178aed6125481a7d563e5879840a4/eckitlib-2.0.7.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:7010c09a8e9998eadf98026d682441e588b1b166d8970cb42f6b6198f20085fd", size = 2610843 }, - { url = "https://files.pythonhosted.org/packages/a9/bf/a778df35b83c5019483cc1aef3a1f0d0c6cc3a44d18e438bf0ef33431541/eckitlib-2.0.7.19-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7bb53ee8cec37ebc05712906592c605f1ec166a953ae832fed9ba2117198ce8a", size = 7040517 }, - { url = "https://files.pythonhosted.org/packages/d2/7c/a72978c7b1b61634bd8b6c4159fa6f84f2dd52914a9f6d7dc722a48f8be0/eckitlib-2.0.7.19-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25ce8a8e55ac097193e4de3ef63d80825d45839a6599985d99ece89a261c8dfe", size = 7169837 }, - { url = "https://files.pythonhosted.org/packages/fa/23/269c1271d00596c4e68177c9dda5350e98a3ba19c0058421da9c870380f1/eckitlib-2.0.7.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:cfba9bf706755e649afea97de7597242fd8f4ecff1b72a26c9ef58eafb67857e", size = 2480050 }, - { url = "https://files.pythonhosted.org/packages/00/38/7adb54bdcbce6642230c122515dea472f131e0ccdb0c3cc0fb350440c6bc/eckitlib-2.0.7.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:66bdd16dd1cf1bbeeea9cbeccc0cc1e28822057d5f104e43868dd7011717b172", size = 2610836 }, - { url = "https://files.pythonhosted.org/packages/9b/9f/9728cc577cbf84619f57da633e7ad3625fa5bef7ad05a990118530ed9f0e/eckitlib-2.0.7.19-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5639123c5a3c645d8bcd6bb2fd29eb321675c0af7624a369a8804798abc6364b", size = 7040518 }, - { url = "https://files.pythonhosted.org/packages/4f/f5/4b2c6ac00ea46d1e7f6c680979720d51e05bce6182c61df24b8a2a75326d/eckitlib-2.0.7.19-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:725d8abc7c5eb039788fd0df28aea7d2c0739ff53861f6d00ca9c319dbd321b0", size = 7169837 }, - { url = "https://files.pythonhosted.org/packages/1a/46/9ccdf223a33c07fe27426c01dcc931316a3531881e4873c24d40e4f09dfd/eckitlib-2.0.7.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:5b6518c555f598fef15915c52d07797fe85aa9a09d89f6e9274c5f549c427fb1", size = 2480047 }, - { url = "https://files.pythonhosted.org/packages/f2/49/31d03b6fe1270e055c521d4a350fed77afd81abe5711f254058e4c631579/eckitlib-2.0.7.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:04c4ec2b96b9da37406925b418e752195e4f782d77148c4654f105984525dd0f", size = 2610842 }, - { url = "https://files.pythonhosted.org/packages/32/13/bf8bcf039f81c7e74f68808c6fe1eb0ba57812aaa0e16f0f5644ef7f81ce/eckitlib-2.0.7.19-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13c7acfe19da5d25e9c5f7e6fb806deca39ac7adea31958d118799a58e8739bd", size = 7040512 }, - { url = "https://files.pythonhosted.org/packages/b4/64/9dc3e3a669f251707487308d0e5efaa0e6755a4da8e3566b52a509658a05/eckitlib-2.0.7.19-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2876c3fd3b2c3140a4c5c3a95c63f6d04b874a6a2b62d0d06c8d6f22375c531", size = 7169835 }, - { url = "https://files.pythonhosted.org/packages/b4/b9/fa7908d4b208d1635c13c06ea96183a25c89373ee536a746f709efb5275b/eckitlib-2.0.7.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:f4605a53d939c24083af431e570466be14f42ff6ae7395a7fa5691768ea02e5b", size = 2480048 }, - { url = "https://files.pythonhosted.org/packages/d9/d3/77779e785dfa6f90fea78ece275cbdd43fc19da39bb84c1b09f1db528881/eckitlib-2.0.7.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:a34d28f3b8903527f1693327982ad4539c228c360c24bcd2b3e357ed9b267d0a", size = 2610838 }, - { url = "https://files.pythonhosted.org/packages/5f/d5/0a8b7de8471eb8cda8d4c5680e983e24434391e587b48234f6e92461e790/eckitlib-2.0.7.19-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54fefebd47b7cadef235b2d1082e34ad9aabaf1cbee97ca9f7e72f99ea69685c", size = 7040523 }, - { url = "https://files.pythonhosted.org/packages/61/e2/af1b905dc937bbc44d92c3d6a15d2fdab4b2d228b99583952844a317f760/eckitlib-2.0.7.19-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2479b853bb7b1dc14d5c710a9803e08bc6b3784ed721deec9799dd51b59cce76", size = 7169842 }, -] - -[[package]] -name = "ecmwf-api-client" -version = "1.6.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/14/b5/837fa2daee28118c592cd003b910433894008d5a1f9e3bed9f2c3cabe34b/ecmwf_api_client-1.6.5.tar.gz", hash = "sha256:1fc0eba27163686b7fba5da027cc5dc0a361f75b652508fa7805f50599368b1c", size = 12974 } +sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378, upload-time = "2026-04-22T11:30:08.465Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/f3/7a5832d5fb8e16db4d1f3be58fcb2537e68ccffea1270bff8b65de7c85b5/ecmwf_api_client-1.6.5-py3-none-any.whl", hash = "sha256:82678c2c18083b44be74b23e2a7e82d2343061966c0bf3a895272b9e9a802836", size = 13495 }, + { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928, upload-time = "2026-04-22T11:29:40.702Z" }, + { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009, upload-time = "2026-04-22T11:29:36.343Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001, upload-time = "2026-04-22T11:29:36.596Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567, upload-time = "2026-04-22T11:30:06.789Z" }, ] [[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 = "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 }, -] - -[[package]] -name = "fdb5lib" -version = "5.21.0.19" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "eccodeslib" }, - { name = "eckitlib" }, - { name = "metkitlib" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/3f/7d89b179dee7c4ce63366b59a7313fa20e93c32e9a7966230856dd8591c0/fdb5lib-5.21.0.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:ffc2412194abeec3cd1d2d2f022a133134858cb0dfe34a47b9a307945472ea32", size = 1402510 }, - { url = "https://files.pythonhosted.org/packages/37/93/83ae989626a142b25df81e8b6239583864d8ca395e8dfee68d544d901465/fdb5lib-5.21.0.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:ec40d1d7ba88f0251fb44802b0b0cda3d94367b5b825c9684c267f9dc5f99bd9", size = 1436540 }, - { url = "https://files.pythonhosted.org/packages/e6/b9/8c3e49bf3eea222eb50d8e38b46171ec1bfc8b985f28a40b1468d69c450f/fdb5lib-5.21.0.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:fbaf588a7ab781c0fd33d08e42b17a61312560d289e834db62cf8aefce93d896", size = 1719647 }, - { url = "https://files.pythonhosted.org/packages/23/16/d80e6a60f4336b098733b712d32303d4cf6ef824e3829cd00ab1a7eebc5d/fdb5lib-5.21.0.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:847c9ec9d576484a31380f17a6d9a7cbd16a004fa902cb078e92d5fa3ffc4ec0", size = 1703429 }, - { url = "https://files.pythonhosted.org/packages/a3/01/ecc5c80423b1fd64d074caa49e7d687b8f1f629b252b6949d5862597fc05/fdb5lib-5.21.0.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:bbf5f7b501a809e7d818997c09ad40ecfa07c70a55e6861e95fe0e8b6aa83cee", size = 1402512 }, - { url = "https://files.pythonhosted.org/packages/44/7f/6a0c0435b3f200ef3565f2a4ab7ac5518497c380d7ab15b1d6347248fe6b/fdb5lib-5.21.0.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:a8e5f9024344ea362df1f951abb117beb585ed9082c930c5182f8651829abfb5", size = 1436538 }, - { url = "https://files.pythonhosted.org/packages/3a/71/89ddad61214fe264a8711ba382597aa22ea233c2bd33b14c0f5ec9846d68/fdb5lib-5.21.0.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6302c77080e2276dd62495b6a0cb3f7dee6a0f6538df42245537b5cd14559c53", size = 1719643 }, - { url = "https://files.pythonhosted.org/packages/30/7e/747d4d61779b3018dd3fa909fc854f91d680d17a5b40e89b6891e21ac534/fdb5lib-5.21.0.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f49d5e821f478747afd872d6f3de262dcc3da4c5f63263762900a798f806b0ae", size = 1703428 }, - { url = "https://files.pythonhosted.org/packages/91/47/7277d97cda6d068aa9b223db8c08263d02831b6164af70093ee305ab6e43/fdb5lib-5.21.0.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:d954f328faa157f7c1d444d05c8bfcd15e5d4d3c40b749a64dd51cb52ee6cad5", size = 1402511 }, - { url = "https://files.pythonhosted.org/packages/6b/9b/aa69a3f820bb178facc47e5a2bec8ed67caf968d20fa6dc7972cadd571bb/fdb5lib-5.21.0.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:5b640ae934e407f54531961483562073ceb8abb73c05df9f378fdc545b870e55", size = 1436541 }, - { url = "https://files.pythonhosted.org/packages/3c/ce/4bdb483925b7d49a3d42d36ad77972ac22746d5521e424c1b517d6c3c137/fdb5lib-5.21.0.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5bf91a58b9ff1438bf5f1df7f7f2d79118b1a4bc82b7499bc2a0be6e5d0a3599", size = 1719643 }, - { url = "https://files.pythonhosted.org/packages/d4/d9/b84beb8d5c01875c5582aa0195f29fb71643b5f26b8004b20c490eef514b/fdb5lib-5.21.0.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ca9bcdf50a84dc1ba91f7b12b8b014436d4b4883a8e9ce3c0a32e27d76efde00", size = 1703431 }, - { url = "https://files.pythonhosted.org/packages/8b/53/b3137235cc79e304c7b6262759426f98a3497743475431d903762e4b21f1/fdb5lib-5.21.0.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:05e417f5e5ffd944df5d2d64b928ac844fa0f3ad0f5e052ab3a6d1ad3698fd51", size = 1402512 }, - { url = "https://files.pythonhosted.org/packages/ec/c9/e60abdd7f628af79b4decdf7e271d19f9a226dc4fc951336c5caf185eb7d/fdb5lib-5.21.0.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:67137984a7bbe042c1855b003b8a5dd6ffc42633e0e73b912a73f8e1ae5e7c19", size = 1436538 }, - { url = "https://files.pythonhosted.org/packages/ea/e2/0ba8242c65fa9e14b2a1dc21c610e702e67b859077c2a65b36d254542e9e/fdb5lib-5.21.0.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:1ced95b7ed00119d9c9bed3b3ca59fe3f56a4126191a76a17e3aafe9b63bd051", size = 1719643 }, - { url = "https://files.pythonhosted.org/packages/69/8b/160eb2cffcdff11cd9cfacaa8fdf769fcd331f092d742c5fb95d8e689d21/fdb5lib-5.21.0.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:6f73811ca8a5d3ea5d3735347decc27ca18592e34c5ec6d096eee3c8bd1facc2", size = 1703430 }, + { 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 = "filelock" version = "3.29.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1f/f9/f38573ed5844586db374d085911740a501ccfa373b455fc9413f09f85237/filelock-3.29.1.tar.gz", hash = "sha256:d97e6b1b9757569626c58caa07dc4beb1613f4a2938b1e8cc81afca398906c9e", size = 59335 } +sdist = { url = "https://files.pythonhosted.org/packages/1f/f9/f38573ed5844586db374d085911740a501ccfa373b455fc9413f09f85237/filelock-3.29.1.tar.gz", hash = "sha256:d97e6b1b9757569626c58caa07dc4beb1613f4a2938b1e8cc81afca398906c9e", size = 59335, upload-time = "2026-06-03T15:19:04.053Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/a0/614c5fe402fd88951df45f4dda2fa3b4e17a99ecd92340771929169b3b95/filelock-3.29.1-py3-none-any.whl", hash = "sha256:85199dfd706869641b72b2e8955d5416a4b2b7dc4b0e8e6d97b4cc1299a6983b", size = 40750 }, + { url = "https://files.pythonhosted.org/packages/4c/a0/614c5fe402fd88951df45f4dda2fa3b4e17a99ecd92340771929169b3b95/filelock-3.29.1-py3-none-any.whl", hash = "sha256:85199dfd706869641b72b2e8955d5416a4b2b7dc4b0e8e6d97b4cc1299a6983b", size = 40750, upload-time = "2026-06-03T15:19:02.959Z" }, ] [[package]] name = "findlibs" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/ef/345b0f88b8e9d9e12051142a9cdcf590bf70206d20d81c3f773ade8d9e32/findlibs-0.1.2.tar.gz", hash = "sha256:1f56d220c69686392ebdc4c65b32ee344818bca633643a8c97592957d1728122", size = 11302 } +sdist = { url = "https://files.pythonhosted.org/packages/22/ef/345b0f88b8e9d9e12051142a9cdcf590bf70206d20d81c3f773ade8d9e32/findlibs-0.1.2.tar.gz", hash = "sha256:1f56d220c69686392ebdc4c65b32ee344818bca633643a8c97592957d1728122", size = 11302, upload-time = "2025-07-28T09:15:03.675Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/ff/76dd547e129206899e4e26446c3ca7aeaff948c31b05250e9b8690e76883/findlibs-0.1.2-py3-none-any.whl", hash = "sha256:5348bbc7055d2a505962576c2e285b6c0aae6d749f82ba71296e7d41336e66e8", size = 10707 }, + { url = "https://files.pythonhosted.org/packages/2f/ff/76dd547e129206899e4e26446c3ca7aeaff948c31b05250e9b8690e76883/findlibs-0.1.2-py3-none-any.whl", hash = "sha256:5348bbc7055d2a505962576c2e285b6c0aae6d749f82ba71296e7d41336e66e8", size = 10707, upload-time = "2025-07-28T09:15:02.733Z" }, ] [[package]] @@ -653,9 +520,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "termcolor" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/00/f8d10588d2019d6d6452653def1ee807353b21983db48550318424b5ff18/fire-0.7.1.tar.gz", hash = "sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf", size = 88720 } +sdist = { url = "https://files.pythonhosted.org/packages/c0/00/f8d10588d2019d6d6452653def1ee807353b21983db48550318424b5ff18/fire-0.7.1.tar.gz", hash = "sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf", size = 88720, upload-time = "2025-08-16T20:20:24.175Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/4c/93d0f85318da65923e4b91c1c2ff03d8a458cbefebe3bc612a6693c7906d/fire-0.7.1-py3-none-any.whl", hash = "sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882", size = 115945 }, + { url = "https://files.pythonhosted.org/packages/e5/4c/93d0f85318da65923e4b91c1c2ff03d8a458cbefebe3bc612a6693c7906d/fire-0.7.1-py3-none-any.whl", hash = "sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882", size = 115945, upload-time = "2025-08-16T20:20:22.87Z" }, ] [[package]] @@ -665,9 +532,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816 } +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload-time = "2024-03-09T03:21:07.555Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263 }, + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload-time = "2024-03-09T03:21:05.635Z" }, ] [[package]] @@ -677,45 +544,45 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799 } +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload-time = "2024-11-07T02:00:56.249Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625 }, + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload-time = "2024-11-07T02:00:54.523Z" }, ] [[package]] name = "frozendict" version = "2.4.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082 } +sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082, upload-time = "2025-11-11T22:40:14.251Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264 }, + { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264, upload-time = "2025-11-11T22:40:12.836Z" }, ] [[package]] name = "fsspec" version = "2026.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760 } +sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760, upload-time = "2026-04-29T20:42:38.635Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402 }, + { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402, upload-time = "2026-04-29T20:42:36.842Z" }, ] [[package]] name = "humanize" version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/66/a3921783d54be8a6870ac4ccffcd15c4dc0dd7fcce51c6d63b8c63935276/humanize-4.15.0.tar.gz", hash = "sha256:1dd098483eb1c7ee8e32eb2e99ad1910baefa4b75c3aff3a82f4d78688993b10", size = 83599 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/66/a3921783d54be8a6870ac4ccffcd15c4dc0dd7fcce51c6d63b8c63935276/humanize-4.15.0.tar.gz", hash = "sha256:1dd098483eb1c7ee8e32eb2e99ad1910baefa4b75c3aff3a82f4d78688993b10", size = 83599, upload-time = "2025-12-20T20:16:13.19Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203 }, + { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203, upload-time = "2025-12-20T20:16:11.67Z" }, ] [[package]] name = "idna" version = "3.18" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711 } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455 }, + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, ] [[package]] @@ -725,18 +592,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "zipp", marker = "python_full_version < '3.14'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405 } +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789 }, + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, ] [[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]] @@ -757,9 +624,9 @@ dependencies = [ { name = "traitlets" }, { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e2/23/3a27530575643c8bb7bfc757a28e2e7ef80092afbf59a2bc5716320b6602/ipython-9.14.1.tar.gz", hash = "sha256:f913bf74df06d458e46ced84ca506c23797590d594b236fe60b14df213291e7b", size = 4433457 } +sdist = { url = "https://files.pythonhosted.org/packages/e2/23/3a27530575643c8bb7bfc757a28e2e7ef80092afbf59a2bc5716320b6602/ipython-9.14.1.tar.gz", hash = "sha256:f913bf74df06d458e46ced84ca506c23797590d594b236fe60b14df213291e7b", size = 4433457, upload-time = "2026-06-05T08:12:34.921Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/22/58818a63eaf8982b67632b1bc20585c811611b15a8da19d6012323dc76a5/ipython-9.14.1-py3-none-any.whl", hash = "sha256:5d4a9ecaa3b10e6e5f269dd0948bdb58ca9cb851899cd23e07c320d3eb11613c", size = 627770 }, + { url = "https://files.pythonhosted.org/packages/9d/22/58818a63eaf8982b67632b1bc20585c811611b15a8da19d6012323dc76a5/ipython-9.14.1-py3-none-any.whl", hash = "sha256:5d4a9ecaa3b10e6e5f269dd0948bdb58ca9cb851899cd23e07c320d3eb11613c", size = 627770, upload-time = "2026-06-05T08:12:33.045Z" }, ] [[package]] @@ -769,9 +636,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]] @@ -781,9 +648,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]] @@ -793,27 +660,27 @@ 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 = "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 = "jsonpickle" version = "4.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8d/c0/dde9b4b42cc415b9579573f967f12efbb034e427a2a37e93ad5139891d87/jsonpickle-4.1.2.tar.gz", hash = "sha256:8afed18aa189fd81e2e833b426bb4af485594921f0b1d36c2001fc5637a2f210", size = 319120 } +sdist = { url = "https://files.pythonhosted.org/packages/8d/c0/dde9b4b42cc415b9579573f967f12efbb034e427a2a37e93ad5139891d87/jsonpickle-4.1.2.tar.gz", hash = "sha256:8afed18aa189fd81e2e833b426bb4af485594921f0b1d36c2001fc5637a2f210", size = 319120, upload-time = "2026-05-28T03:50:11.892Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/7b/fd3c7a09649aea9da1d3587aea624d8f9b29963dfd84a1bdb2aa93b36dac/jsonpickle-4.1.2-py3-none-any.whl", hash = "sha256:7ffe34426bc797684dbf1dc84185558bd864cd25b1ff5fb01b7405e392d0a937", size = 47203 }, + { url = "https://files.pythonhosted.org/packages/a1/7b/fd3c7a09649aea9da1d3587aea624d8f9b29963dfd84a1bdb2aa93b36dac/jsonpickle-4.1.2-py3-none-any.whl", hash = "sha256:7ffe34426bc797684dbf1dc84185558bd864cd25b1ff5fb01b7405e392d0a937", size = 47203, upload-time = "2026-05-28T03:50:10.605Z" }, ] [[package]] @@ -826,9 +693,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]] @@ -838,103 +705,103 @@ 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]] name = "locket" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350 } +sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350, upload-time = "2022-04-20T22:04:44.312Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398 }, + { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398, upload-time = "2022-04-20T22:04:42.23Z" }, ] [[package]] name = "lru-dict" version = "1.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760 }, - { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249 }, - { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728 }, - { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795 }, - { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807 }, - { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437 }, - { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168 }, - { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454 }, - { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574 }, - { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031 }, - { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007 }, - { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683 }, - { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216 }, - { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687 }, - { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960 }, - { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882 }, - { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268 }, - { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156 }, - { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395 }, - { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591 }, - { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119 }, - { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109 }, - { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248 }, - { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243 }, - { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938 }, - { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261 }, - { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801 }, - { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688 }, - { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214 }, - { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689 }, - { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034 }, - { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919 }, - { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334 }, - { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211 }, - { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461 }, - { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651 }, - { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120 }, - { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112 }, - { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119 }, - { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435 }, - { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988 }, - { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733 }, - { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222 }, - { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733 }, - { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251 }, - { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405 }, - { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135 }, - { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620 }, - { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077 }, - { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905 }, - { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435 }, - { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423 }, - { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184 }, - { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459 }, - { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938 }, - { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389 }, - { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706 }, - { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892 }, - { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254 }, - { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422 }, - { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909 }, - { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816 }, - { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204 }, - { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384 }, - { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822 }, - { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968 }, - { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904 }, - { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062 }, +sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439, upload-time = "2025-11-02T10:02:13.548Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760, upload-time = "2025-11-02T10:01:06.492Z" }, + { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249, upload-time = "2025-11-02T10:01:07.261Z" }, + { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728, upload-time = "2025-11-02T10:01:08.185Z" }, + { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795, upload-time = "2025-11-02T10:01:08.862Z" }, + { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807, upload-time = "2025-11-02T10:01:09.581Z" }, + { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437, upload-time = "2025-11-02T10:01:10.676Z" }, + { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168, upload-time = "2025-11-02T10:01:11.47Z" }, + { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454, upload-time = "2025-11-02T10:01:12.522Z" }, + { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574, upload-time = "2025-11-02T10:01:13.293Z" }, + { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031, upload-time = "2025-11-02T10:01:13.96Z" }, + { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007, upload-time = "2025-11-02T10:01:14.857Z" }, + { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683, upload-time = "2025-11-02T10:01:15.891Z" }, + { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216, upload-time = "2025-11-02T10:01:16.867Z" }, + { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687, upload-time = "2025-11-02T10:01:17.485Z" }, + { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960, upload-time = "2025-11-02T10:01:18.158Z" }, + { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882, upload-time = "2025-11-02T10:01:18.841Z" }, + { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268, upload-time = "2025-11-02T10:01:19.564Z" }, + { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156, upload-time = "2025-11-02T10:01:20.22Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395, upload-time = "2025-11-02T10:01:20.901Z" }, + { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591, upload-time = "2025-11-02T10:01:21.606Z" }, + { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119, upload-time = "2025-11-02T10:01:22.61Z" }, + { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109, upload-time = "2025-11-02T10:01:23.322Z" }, + { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248, upload-time = "2025-11-02T10:01:24.291Z" }, + { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243, upload-time = "2025-11-02T10:01:25.254Z" }, + { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938, upload-time = "2025-11-02T10:01:25.89Z" }, + { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261, upload-time = "2025-11-02T10:01:26.879Z" }, + { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801, upload-time = "2025-11-02T10:01:27.553Z" }, + { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688, upload-time = "2025-11-02T10:01:28.17Z" }, + { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214, upload-time = "2025-11-02T10:01:28.888Z" }, + { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689, upload-time = "2025-11-02T10:01:29.508Z" }, + { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034, upload-time = "2025-11-02T10:01:30.164Z" }, + { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919, upload-time = "2025-11-02T10:01:30.971Z" }, + { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334, upload-time = "2025-11-02T10:01:31.663Z" }, + { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211, upload-time = "2025-11-02T10:01:32.468Z" }, + { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461, upload-time = "2025-11-02T10:01:33.2Z" }, + { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651, upload-time = "2025-11-02T10:01:33.874Z" }, + { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120, upload-time = "2025-11-02T10:01:34.595Z" }, + { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112, upload-time = "2025-11-02T10:01:35.268Z" }, + { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119, upload-time = "2025-11-02T10:01:36.239Z" }, + { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435, upload-time = "2025-11-02T10:01:36.857Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988, upload-time = "2025-11-02T10:01:37.531Z" }, + { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733, upload-time = "2025-11-02T10:01:38.194Z" }, + { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222, upload-time = "2025-11-02T10:01:39.093Z" }, + { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733, upload-time = "2025-11-02T10:01:39.739Z" }, + { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251, upload-time = "2025-11-02T10:01:40.421Z" }, + { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405, upload-time = "2025-11-02T10:01:41.917Z" }, + { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135, upload-time = "2025-11-02T10:01:42.935Z" }, + { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620, upload-time = "2025-11-02T10:01:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077, upload-time = "2025-11-02T10:01:44.694Z" }, + { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905, upload-time = "2025-11-02T10:01:45.668Z" }, + { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435, upload-time = "2025-11-02T10:01:46.397Z" }, + { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423, upload-time = "2025-11-02T10:01:47.473Z" }, + { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184, upload-time = "2025-11-02T10:01:48.161Z" }, + { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459, upload-time = "2025-11-02T10:01:48.823Z" }, + { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938, upload-time = "2025-11-02T10:01:49.448Z" }, + { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389, upload-time = "2025-11-02T10:01:50.49Z" }, + { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706, upload-time = "2025-11-02T10:01:51.197Z" }, + { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892, upload-time = "2025-11-02T10:01:51.899Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254, upload-time = "2025-11-02T10:01:52.587Z" }, + { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422, upload-time = "2025-11-02T10:01:53.271Z" }, + { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909, upload-time = "2025-11-02T10:01:54.356Z" }, + { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816, upload-time = "2025-11-02T10:01:55.417Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204, upload-time = "2025-11-02T10:01:56.06Z" }, + { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384, upload-time = "2025-11-02T10:02:09.656Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822, upload-time = "2025-11-02T10:02:10.609Z" }, + { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968, upload-time = "2025-11-02T10:02:11.405Z" }, + { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904, upload-time = "2025-11-02T10:02:12.144Z" }, + { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062, upload-time = "2025-11-02T10:02:12.878Z" }, ] [[package]] name = "markdown" version = "3.10.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805 } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180 }, + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, ] [[package]] @@ -944,83 +811,83 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454 } +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687 }, + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, ] [[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 }, - { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615 }, - { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020 }, - { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332 }, - { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947 }, - { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962 }, - { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760 }, - { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529 }, - { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015 }, - { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, - { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, - { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, - { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622 }, - { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029 }, - { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374 }, - { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980 }, - { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990 }, - { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784 }, - { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588 }, - { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041 }, - { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, - { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, - { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, - { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658 }, - { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066 }, - { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639 }, - { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569 }, - { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284 }, - { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801 }, - { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769 }, - { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642 }, - { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, - { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, - { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, - { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619 }, - { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029 }, - { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408 }, - { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005 }, - { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048 }, - { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821 }, - { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606 }, - { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043 }, - { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, - { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, - { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, - { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661 }, - { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069 }, - { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670 }, - { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598 }, - { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261 }, - { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835 }, - { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733 }, - { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672 }, - { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, - { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, - { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, +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, 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" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] [[package]] @@ -1030,102 +897,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150 } +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534 }, + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, ] [[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 = "metkitlib" -version = "1.17.3.19" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "eccodeslib" }, - { name = "eckitlib" }, -] +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/d4/de/b7f2d25236a214508a4599774731b442ddd26ae152efb885b448e0e29cc2/metkitlib-1.17.3.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:dc79e341081d28605b84bf21c01721f3edeccd6191d81800b2102f88f7ef2793", size = 886920 }, - { url = "https://files.pythonhosted.org/packages/84/f0/b03171cbc8b39e388dab87ac7577446dd60443133d90ba2217cfdf8224d3/metkitlib-1.17.3.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6f6fdddd6c1168608eaee8f099cd51eafbacaba65875586bf0b47c47ddceed07", size = 925710 }, - { url = "https://files.pythonhosted.org/packages/9d/30/53737da681ef5970543f423de6a57cc396fd52b9f3fbd8d165d5d573bffc/metkitlib-1.17.3.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:74102e39a1070f2534c4c9bfd30d5ef6903192af30f6101e536bb78963567112", size = 976933 }, - { url = "https://files.pythonhosted.org/packages/ba/05/9015fd8e06d041da30b0f55a4066094b11a826fabd1be5b76a9873d97f25/metkitlib-1.17.3.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f59118ae121b550cfecec2ad263bb157ed69ec3638a940c271765dd0121da13e", size = 1008992 }, - { url = "https://files.pythonhosted.org/packages/c3/c4/50937a1bb68239da55d4ac51664150901a056340a4041d3df61c70dc3991/metkitlib-1.17.3.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:421217f765df35a8f9c5ace6eb1496ddf7fa92f2c8cfd6dbac9a1cf5b6ea287e", size = 886922 }, - { url = "https://files.pythonhosted.org/packages/44/18/12a7915c826422143dbeaeec3f21e39456b434f7ce5b56de960c8c9b216b/metkitlib-1.17.3.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:34f5c2ee4f8aef1ecd71b2fa3d51041744f8647062fc761a375950075a99d37b", size = 925709 }, - { url = "https://files.pythonhosted.org/packages/5b/08/321b8e78ec31921a5ccb1d46bc20a1749c0dc2a8afd1a54ad14ead7dffa0/metkitlib-1.17.3.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f9a0dada3b594c2b8f40f24f26c3c56780eade207f1f5cfa1a494b71fccca5d2", size = 976934 }, - { url = "https://files.pythonhosted.org/packages/48/a2/73077d2f9df1357312336e912efd5710b37eef57a7868a461003a81ca870/metkitlib-1.17.3.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f418c389b2c2cd7306a2bb1387bda3161a89359d04b27a047489f59968756b97", size = 1008999 }, - { url = "https://files.pythonhosted.org/packages/74/42/7111e3cac6b01800d4af7a13bffdb718a735382aa5431a7d6b13a75e73b5/metkitlib-1.17.3.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:ce48299f6fca69f13c32bbb41f9a6f4b91dda247e43968308b3b2818df5225af", size = 886923 }, - { url = "https://files.pythonhosted.org/packages/4d/5a/8de478696d6ac70cc2e61a0cf232d66b0a21e3ca4d2b234efbae9e296858/metkitlib-1.17.3.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:da04bbb344ec1a73e560e5a0f91b985e1a6728df009d51158a32342536b3fcf3", size = 925711 }, - { url = "https://files.pythonhosted.org/packages/d4/90/07e3e48504f7b78f242d79eca82a977ba115e211e52ec3d8033fcbeb0dc2/metkitlib-1.17.3.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:d43636c336f4b06061139749ec82b0cdc92352eacc489156db8e2b38a9a790f3", size = 976934 }, - { url = "https://files.pythonhosted.org/packages/66/e8/72d59212fd9f5ee937c96614b75f87d329ec7df4c793e5f70dd7ad0d6fdb/metkitlib-1.17.3.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:788131841de50573e2afe93bff6fae3c3276a2fada14b4a8fbb89bd5381ef27a", size = 1008997 }, - { url = "https://files.pythonhosted.org/packages/b0/51/1914a8250f4651d6b7141245f310aac5018eeb5e172ef941898b3bf4395a/metkitlib-1.17.3.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:a29017bbc5e2ba9123e820035d88648bda690290544e24ff7269b41c9ca3d8bd", size = 886921 }, - { url = "https://files.pythonhosted.org/packages/bc/5c/274d066aa7b95f376616473518563c0c9b307ab9b3eb48b8438eb61df4ad/metkitlib-1.17.3.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:887099af68d9c1a62a588bbeaa0808bc66b618dc4a0b37389765c15d0402da7c", size = 925710 }, - { url = "https://files.pythonhosted.org/packages/a7/10/5308a62e89ff6987392661f6831edcf176edf928a149d63b3d4ee5797091/metkitlib-1.17.3.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:fd79257d91c26dcc8f98f9410ec8d31e420d063bdcfdc576de6cad0845a45690", size = 976934 }, - { url = "https://files.pythonhosted.org/packages/17/ab/87183088c3a7bce34928b2ed40fde768b199714d718394b3f889aed89f3a/metkitlib-1.17.3.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:25dc227e09474ede0ef50d40416a0ca3aa93aced4121065238e406c6d3a448dc", size = 1008998 }, -] - -[[package]] -name = "mir-python" -version = "1.28.1.19" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "findlibs" }, - { name = "mirlib" }, - { name = "numpy" }, - { name = "pyyaml" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/70/dd/e4b7489dad09cd7760d913fa4f53717d98914fc32242e9fc9fbdbd6ef9e1/mir_python-1.28.1.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:5150f106b893f65546b6e6db931c4c695b54f853a573528cdd70e5d4c5805208", size = 140863 }, - { url = "https://files.pythonhosted.org/packages/f5/c5/82826c8a8f006ce4081174d64cb18303deb6d2c8f57f8d657e187af3275b/mir_python-1.28.1.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:b02bfbc40a8e77672eaa751f63dc37a44392f1244fda22ca4e0e5ffc6876db5a", size = 144561 }, - { url = "https://files.pythonhosted.org/packages/8c/eb/68f96ad53de7ef44670e3a312ef85127f3c2f1aad9e871b5a684e57bec2b/mir_python-1.28.1.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:292d964a558c4bc4a5fa58669b036ae55aad110b15ccc53b297e28e353f1265f", size = 1186778 }, - { url = "https://files.pythonhosted.org/packages/69/57/2bf1d455113e59b7ede8b755f57044a0c9aa82a0f7e462e0011af405693b/mir_python-1.28.1.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:417b3f68362fbee94854158f4347ecdb32e566b75eb9dfafb41a6bd386a79041", size = 1199887 }, - { url = "https://files.pythonhosted.org/packages/eb/4a/9d763a7b8d30aee0d5a52e2edbd9e75b5710498d34a0b70faa1a05579b72/mir_python-1.28.1.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:42dad7d45c203d44b99d51f1fa393d4d5d181308d0e9e1a74f68fc08d92a473b", size = 142519 }, - { url = "https://files.pythonhosted.org/packages/6a/af/e3d633d118567d3990e9a43a2f429aec26af9f4837387ce2418b5c379999/mir_python-1.28.1.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:1e885d6bb37e747ff49d558e33ef4d244f9b6f05507e8ba7858ce930bb71b22f", size = 145872 }, - { url = "https://files.pythonhosted.org/packages/fb/1f/f1f76edeb467db6d1bb613af893a43537fdbf9f47f26962982d85a0cd0cd/mir_python-1.28.1.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:cfc37102ea8a42203b908804ec6dc89e64531ba50f1242a687490fc999b2211b", size = 1175100 }, - { url = "https://files.pythonhosted.org/packages/c0/90/7446a6508d5bfdd8d355c358fa487f0035b6ac2e1892040bd5be9e6198e9/mir_python-1.28.1.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c04eaf0b50c29803f894c1c67eb02fd2cc66d8b6ba370bf498617de9da75fee1", size = 1189717 }, - { url = "https://files.pythonhosted.org/packages/d2/bf/ab7961aaa53e709af0b696c82a0767615a850f0af920705c483f46c2b959/mir_python-1.28.1.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:a71d68c1aee8f45ea69b2c51ceab6291212a21691b90880bae52d6d25f63f450", size = 141722 }, - { url = "https://files.pythonhosted.org/packages/63/71/01505d2ea902d9447b97e79288bcde0d401b7693c969bd14aaf6d09da6fd/mir_python-1.28.1.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:5f694b72018351434ccf7ab9a5051c12caa98b2295c8b773b23972b6c726145e", size = 144978 }, - { url = "https://files.pythonhosted.org/packages/7f/45/a921f895389800256d2cbd7769ec500c89e7cb4167584d818b237afe6aab/mir_python-1.28.1.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2a693a2a3c64a0377f7e400da082c022f920f40a25c7f3e94f776d07245e7452", size = 1168121 }, - { url = "https://files.pythonhosted.org/packages/46/c8/500749c4f7552700d05d62ef38cf9b1157577b23cbb526746d7d03e65cb0/mir_python-1.28.1.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad899b55fadc56c75eb0c41b96ca2eff4ac5d6574a1f8393629d10a776a6f3e6", size = 1184198 }, - { url = "https://files.pythonhosted.org/packages/35/26/332e4614e601d71b3e6ab9b3d6b47843e039e646c297935b06e305fbe450/mir_python-1.28.1.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:86cb9a75fb944cb6610c3ae334bb39ea57a1885aab2b121a6bd4dafd00c097b4", size = 142697 }, - { url = "https://files.pythonhosted.org/packages/2c/0d/b52b55edf58087aa4b7b2254a9e38af3ba8db5e8a622652792d9eea96375/mir_python-1.28.1.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:cb23d96f8105e34f362e18bd26b68fd343c3c7ea1ea43e6ef262b801fd7c68f7", size = 145756 }, - { url = "https://files.pythonhosted.org/packages/a4/bb/2f045d18d425c5c92aa712349274bc1ee83b62e0a64de94648beaccdef72/mir_python-1.28.1.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:d52c14a54605c1ceeb0a35a711414e4cc7cd07e403d5ada39c4c2c781c4f79fc", size = 1169043 }, - { url = "https://files.pythonhosted.org/packages/b3/d9/e4f2dafdbdde7250d6abf0c2a8e799119f15807465aa2bf8d34f5d0fdb52/mir_python-1.28.1.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:8f5f5affd9c446d6c09dfb46c3ba9cfb4d10ea60ed039ef1f6eb5d477240df47", size = 1180946 }, -] - -[[package]] -name = "mirlib" -version = "1.28.1.19" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "atlaslib-ecmwf" }, - { name = "eccodeslib" }, - { name = "eckitlib" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/7e/5106ea2bdd18ef8c324e38c359f2b26e30335451c520965e0d03a627822f/mirlib-1.28.1.19-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:59c0a9e49d88aadd6e626a8769e2e7e703d92a282b3bfb65a6a586e0d43f9409", size = 1839746 }, - { url = "https://files.pythonhosted.org/packages/a5/98/de2820c9c3eadca3cf06cd287483e132136b40c26acd19c26a8ff1f1cbd5/mirlib-1.28.1.19-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6d0d449b798e932b52ee3625a4fa14a5bac662812fafb5b50f1e2d69a42ab195", size = 1941921 }, - { url = "https://files.pythonhosted.org/packages/49/78/299c8241a16719a261e01957b0d3e5b0bcaa71ad4abfe7d5d277fe8c0964/mirlib-1.28.1.19-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f6c3d71fd1709802df402dd14b60668a8332c9cbc1af2261f74d3d5cae6274", size = 2443710 }, - { url = "https://files.pythonhosted.org/packages/9d/2f/f3fa0d68f2d77709bc07db424cb21e779886fb0fd29976c37b76502684bb/mirlib-1.28.1.19-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d3f6feb07fb73828472be15f669702bd90bb052d7b5427ffad5dce0e97f9fa6d", size = 2418517 }, - { url = "https://files.pythonhosted.org/packages/d2/97/dd179df563d9eac4e57ed2a5a7abea6bd9d15b0d840c5f94aad25f6b1ad4/mirlib-1.28.1.19-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:372c274bd86c34dedf85f11c2a4c7fc1b586cd5f91d9ce6984fbd9c65aff94df", size = 1839749 }, - { url = "https://files.pythonhosted.org/packages/be/ef/36354f39c3738f8609a10b05cd399809ee9413e35344741527c7936675ab/mirlib-1.28.1.19-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:b00dcc29c707b5381976c0047b8cb0e227c0381060b82e3b23608160dd875991", size = 1941917 }, - { url = "https://files.pythonhosted.org/packages/1f/82/f0853ddfee8af8dcbb5a4214304d1c08440cae361ff987fa90ddf52d0590/mirlib-1.28.1.19-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:710c5299f03460f44e83ab2bd173df7feb55608e3d1dc6686ba4f36310744598", size = 2443710 }, - { url = "https://files.pythonhosted.org/packages/1b/3c/994cf75e8205875109e30eb9e3b0186844201a41f148d1e439015f9976a1/mirlib-1.28.1.19-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:094164a9111a4a8332aee1db3e0aa785f1e6ae454c339e82c426ea460eef1a34", size = 2418517 }, - { url = "https://files.pythonhosted.org/packages/c9/76/ec53ebf742cd79208cf8e8f238e10e713d89cbe1966164b5ca8ca37255aa/mirlib-1.28.1.19-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:d21713c705c2619f0be63f25eef24854016a1ae254200373fe676e7d7ad1cf4b", size = 1839750 }, - { url = "https://files.pythonhosted.org/packages/5a/a1/6550f9c3a04881759356b86117dec82f37a9c53182e9140ef029eba6bae6/mirlib-1.28.1.19-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:2574171f9bc743535422361cc2deb25fa1045971b58f10cfd7f38ba87faed6f7", size = 1941920 }, - { url = "https://files.pythonhosted.org/packages/87/22/f103b10a81b4046e45e193ff51b990f33769f8f3969372739622f8577209/mirlib-1.28.1.19-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:b0f30dae074722c8db434242d70e760e914738d1e1fb30b038c9171b8ae88399", size = 2443707 }, - { url = "https://files.pythonhosted.org/packages/eb/71/cc15312e811801f3c10993e54031d97462acb49809fa3b8096c2e4a15413/mirlib-1.28.1.19-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:18f84daa2754c0c5a5f9e1dd1c387197984b3f08f4946aa768448afd17a85887", size = 2418518 }, - { url = "https://files.pythonhosted.org/packages/12/5f/5e8ce4994e7bb096cde22a016901c528594ac3eae96993a5a2741b30fe31/mirlib-1.28.1.19-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:ac8017ec5804869e52eab6c9c42ba1a2923a77c0e8693ce0ace6574f0a4d1683", size = 1839751 }, - { url = "https://files.pythonhosted.org/packages/87/57/500215c4fe724357b3178a2b4738d0c391a9d58dee96402c0d927caa61c8/mirlib-1.28.1.19-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:ec60910ecbc15dcba5cc8bce79b29e856f1ed7513b8b601d303e97306edba14c", size = 1941918 }, - { url = "https://files.pythonhosted.org/packages/20/e3/381435435440c3ad4ebcab54e15fa783e09d3c6f11fc5a10abbdf323ba5a/mirlib-1.28.1.19-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:5751e8c0eb21ed781ed6c12e2ed88bf31857a2594c865906d83d26f23ab9e0b0", size = 2443709 }, - { url = "https://files.pythonhosted.org/packages/49/f4/a96d8d2995ed1403ebc279a5fc890ab13b39409f285fba5cc74724a2792f/mirlib-1.28.1.19-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:e0f3efff8a890e3367ebb6ef2cf53ee0c6add87a0645be3c5a49086e04e113e1", size = 2418518 }, + { 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]] @@ -1138,18 +921,18 @@ dependencies = [ { name = "requests" }, { name = "tqdm" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6c/ce/a00c9b44f43c4620ca004e4acb4c1e266b1ab48d2f6ad9e402f6bdbe44d4/multiurl-0.3.7.tar.gz", hash = "sha256:4201563fc8989baca7b525fdc69d4cd5a6c0cef4f303559710b9890021aab6d9", size = 18945 } +sdist = { url = "https://files.pythonhosted.org/packages/6c/ce/a00c9b44f43c4620ca004e4acb4c1e266b1ab48d2f6ad9e402f6bdbe44d4/multiurl-0.3.7.tar.gz", hash = "sha256:4201563fc8989baca7b525fdc69d4cd5a6c0cef4f303559710b9890021aab6d9", size = 18945, upload-time = "2025-07-29T11:57:04.109Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl", hash = "sha256:054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380", size = 21524 }, + { url = "https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl", hash = "sha256:054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380", size = 21524, upload-time = "2025-07-29T11:57:03.191Z" }, ] [[package]] name = "narwhals" version = "2.22.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/62/3c/c4ef2164a71c1a63d7f1ae411c4082c5fa872405106db60a4b7114989ad7/narwhals-2.22.1.tar.gz", hash = "sha256:d62920805a0a43b7ff8b54b0c0d3142d796f8a9301836ada37e573d6a33cbcd9", size = 647493 } +sdist = { url = "https://files.pythonhosted.org/packages/62/3c/c4ef2164a71c1a63d7f1ae411c4082c5fa872405106db60a4b7114989ad7/narwhals-2.22.1.tar.gz", hash = "sha256:d62920805a0a43b7ff8b54b0c0d3142d796f8a9301836ada37e573d6a33cbcd9", size = 647493, upload-time = "2026-06-05T12:34:34.051Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl", hash = "sha256:60567d774edf77db53906f89d9fbd164e66e56d66d388e1e6990f17ac33cfb53", size = 454815 }, + { url = "https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl", hash = "sha256:60567d774edf77db53906f89d9fbd164e66e56d66d388e1e6990f17ac33cfb53", size = 454815, upload-time = "2026-06-05T12:34:32.289Z" }, ] [[package]] @@ -1161,33 +944,33 @@ dependencies = [ { name = "cftime" }, { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352 } +sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352, upload-time = "2026-01-05T02:27:38.593Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499 }, - { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667 }, - { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769 }, - { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122 }, - { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637 }, - { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377 }, - { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821 }, - { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133 }, - { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635 }, - { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725 }, - { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258 }, - { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171 }, - { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579 }, - { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032 }, - { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653 }, - { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682 }, + { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499, upload-time = "2026-01-05T02:27:06.568Z" }, + { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667, upload-time = "2026-01-05T02:27:09.421Z" }, + { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769, upload-time = "2026-01-05T21:31:19.243Z" }, + { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122, upload-time = "2026-01-05T21:31:22.773Z" }, + { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637, upload-time = "2026-01-05T02:27:11.856Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377, upload-time = "2026-01-05T02:27:13.808Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821, upload-time = "2026-01-05T02:27:15.413Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133, upload-time = "2026-01-05T02:27:17.224Z" }, + { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635, upload-time = "2026-01-05T02:27:19.655Z" }, + { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725, upload-time = "2026-01-05T02:27:22.298Z" }, + { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258, upload-time = "2026-01-05T02:27:24.837Z" }, + { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171, upload-time = "2026-01-05T02:27:27.166Z" }, + { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579, upload-time = "2026-01-05T02:27:29.382Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032, upload-time = "2026-01-05T02:27:31.744Z" }, + { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653, upload-time = "2026-01-05T02:27:34.294Z" }, + { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682, upload-time = "2026-01-05T02:27:37.062Z" }, ] [[package]] name = "networkx" version = "3.6.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025 } +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504 }, + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, ] [[package]] @@ -1197,221 +980,221 @@ 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 }, - { url = "https://files.pythonhosted.org/packages/9d/20/c473fc04a371f5e2f8c5749e04505c13e7a8ede27c09e9f099b2ad6f43d6/numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ebae0ab18c799b0e6b8c5a8d11e1fa3848eb4011271d99848b297468a39430", size = 162790 }, - { url = "https://files.pythonhosted.org/packages/45/93/b6760dd1904c2a498e5f43d1bb436f59383c3ddea3815f1461dfaa259373/numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47041f2f7b9e69498fb311af672ba914a60e6e6d804011caacb17d66f639e659", size = 152196 }, - { url = "https://files.pythonhosted.org/packages/72/94/cc921e35593b820521e464cbbeaf8212bbdb07f16dc79fe283168df38195/numexpr-2.14.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d686dfb2c1382d9e6e0ee0b7647f943c1886dba3adbf606c625479f35f1956c1", size = 452468 }, - { url = "https://files.pythonhosted.org/packages/d9/43/560e9ba23c02c904b5934496486d061bcb14cd3ebba2e3cf0e2dccb6c22b/numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee6d4fbbbc368e6cdd0772734d6249128d957b3b8ad47a100789009f4de7083", size = 443631 }, - { url = "https://files.pythonhosted.org/packages/7b/6c/78f83b6219f61c2c22d71ab6e6c2d4e5d7381334c6c29b77204e59edb039/numexpr-2.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3a2839efa25f3c8d4133252ea7342d8f81226c7c4dda81f97a57e090b9d87a48", size = 1417670 }, - { url = "https://files.pythonhosted.org/packages/0e/bb/1ccc9dcaf46281568ce769888bf16294c40e98a5158e4b16c241de31d0d3/numexpr-2.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9f9137f1351b310436662b5dc6f4082a245efa8950c3b0d9008028df92fefb9b", size = 1466212 }, - { url = "https://files.pythonhosted.org/packages/31/9f/203d82b9e39dadd91d64bca55b3c8ca432e981b822468dcef41a4418626b/numexpr-2.14.1-cp312-cp312-win32.whl", hash = "sha256:36f8d5c1bd1355df93b43d766790f9046cccfc1e32b7c6163f75bcde682cda07", size = 166996 }, - { url = "https://files.pythonhosted.org/packages/1f/67/ffe750b5452eb66de788c34e7d21ec6d886abb4d7c43ad1dc88ceb3d998f/numexpr-2.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:fdd886f4b7dbaf167633ee396478f0d0aa58ea2f9e7ccc3c6431019623e8d68f", size = 160187 }, - { url = "https://files.pythonhosted.org/packages/73/b4/9f6d637fd79df42be1be29ee7ba1f050fab63b7182cb922a0e08adc12320/numexpr-2.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:09078ba73cffe94745abfbcc2d81ab8b4b4e9d7bfbbde6cac2ee5dbf38eee222", size = 162794 }, - { url = "https://files.pythonhosted.org/packages/35/ae/d58558d8043de0c49f385ea2fa789e3cfe4d436c96be80200c5292f45f15/numexpr-2.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dce0b5a0447baa7b44bc218ec2d7dcd175b8eee6083605293349c0c1d9b82fb6", size = 152203 }, - { url = "https://files.pythonhosted.org/packages/13/65/72b065f9c75baf8f474fd5d2b768350935989d4917db1c6c75b866d4067c/numexpr-2.14.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:06855053de7a3a8425429bd996e8ae3c50b57637ad3e757e0fa0602a7874be30", size = 455860 }, - { url = "https://files.pythonhosted.org/packages/fc/f9/c9457652dfe28e2eb898372da2fe786c6db81af9540c0f853ee04a0699cc/numexpr-2.14.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f9366d23a2e991fd5a8b5e61a17558f028ba86158a4552f8f239b005cdf83c", size = 446574 }, - { url = "https://files.pythonhosted.org/packages/b6/99/8d3879c4d67d3db5560cf2de65ce1778b80b75f6fa415eb5c3e7bd37ba27/numexpr-2.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c5f1b1605695778896534dfc6e130d54a65cd52be7ed2cd0cfee3981fd676bf5", size = 1417306 }, - { url = "https://files.pythonhosted.org/packages/ea/05/6bddac9f18598ba94281e27a6943093f7d0976544b0cb5d92272c64719bd/numexpr-2.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a4ba71db47ea99c659d88ee6233fa77b6dc83392f1d324e0c90ddf617ae3f421", size = 1466145 }, - { url = "https://files.pythonhosted.org/packages/24/5d/cbeb67aca0c5a76ead13df7e8bd8dd5e0d49145f90da697ba1d9f07005b0/numexpr-2.14.1-cp313-cp313-win32.whl", hash = "sha256:638dce8320f4a1483d5ca4fda69f60a70ed7e66be6e68bc23fb9f1a6b78a9e3b", size = 166996 }, - { url = "https://files.pythonhosted.org/packages/cc/23/9281bceaeb282cead95f0aa5f7f222ffc895670ea689cc1398355f6e3001/numexpr-2.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:9fdcd4735121658a313f878fd31136d1bfc6a5b913219e7274e9fca9f8dac3bb", size = 160189 }, - { url = "https://files.pythonhosted.org/packages/f3/76/7aac965fd93a56803cbe502aee2adcad667253ae34b0badf6c5af7908b6c/numexpr-2.14.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:557887ad7f5d3c2a40fd7310e50597045a68e66b20a77b3f44d7bc7608523b4b", size = 163524 }, - { url = "https://files.pythonhosted.org/packages/58/65/79d592d5e63fbfab3b59a60c386853d9186a44a3fa3c87ba26bdc25b6195/numexpr-2.14.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:af111c8fe6fc55d15e4c7cab11920fc50740d913636d486545b080192cd0ad73", size = 152919 }, - { url = "https://files.pythonhosted.org/packages/84/78/3c8335f713d4aeb99fa758d7c62f0be1482d4947ce5b508e2052bb7aeee9/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33265294376e7e2ae4d264d75b798a915d2acf37b9dd2b9405e8b04f84d05cfc", size = 465972 }, - { url = "https://files.pythonhosted.org/packages/35/81/9ee5f69b811e8f18746c12d6f71848617684edd3161927f95eee7a305631/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83647d846d3eeeb9a9255311236135286728b398d0d41d35dedb532dca807fe9", size = 456953 }, - { url = "https://files.pythonhosted.org/packages/6d/39/9b8bc6e294d85cbb54a634e47b833e9f3276a8bdf7ce92aa808718a0212d/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6e575fd3ad41ddf3355d0c7ef6bd0168619dc1779a98fe46693cad5e95d25e6e", size = 1426199 }, - { url = "https://files.pythonhosted.org/packages/1e/ce/0d4fcd31ab49319740d934fba1734d7dad13aa485532ca754e555ca16c8b/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:67ea4771029ce818573b1998f5ca416bd255156feea017841b86176a938f7d19", size = 1474214 }, - { url = "https://files.pythonhosted.org/packages/b7/47/b2a93cbdb3ba4e009728ad1b9ef1550e2655ea2c86958ebaf03b9615f275/numexpr-2.14.1-cp313-cp313t-win32.whl", hash = "sha256:15015d47d3d1487072d58c0e7682ef2eb608321e14099c39d52e2dd689483611", size = 167676 }, - { url = "https://files.pythonhosted.org/packages/86/99/ee3accc589ed032eea68e12172515ed96a5568534c213ad109e1f4411df1/numexpr-2.14.1-cp313-cp313t-win_amd64.whl", hash = "sha256:94c711f6d8f17dfb4606842b403699603aa591ab9f6bf23038b488ea9cfb0f09", size = 161096 }, - { url = "https://files.pythonhosted.org/packages/ac/36/9db78dfbfdfa1f8bf0872993f1a334cdd8fca5a5b6567e47dcb128bcb7c2/numexpr-2.14.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ede79f7ff06629f599081de644546ce7324f1581c09b0ac174da88a470d39c21", size = 162848 }, - { url = "https://files.pythonhosted.org/packages/13/c1/a5c78ae637402c5550e2e0ba175275d2515d432ec28af0cdc23c9b476e65/numexpr-2.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2eac7a5a2f70b3768c67056445d1ceb4ecd9b853c8eda9563823b551aeaa5082", size = 152270 }, - { url = "https://files.pythonhosted.org/packages/9a/ed/aabd8678077848dd9a751c5558c2057839f5a09e2a176d8dfcd0850ee00e/numexpr-2.14.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5aedf38d4c0c19d3cecfe0334c3f4099fb496f54c146223d30fa930084bc8574", size = 455918 }, - { url = "https://files.pythonhosted.org/packages/88/e1/3db65117f02cdefb0e5e4c440daf1c30beb45051b7f47aded25b7f4f2f34/numexpr-2.14.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439ec4d57b853792ebe5456e3160312281c3a7071ecac5532ded3278ede614de", size = 446512 }, - { url = "https://files.pythonhosted.org/packages/9a/fb/7ceb9ee55b5f67e4a3e4d73d5af4c7e37e3c9f37f54bee90361b64b17e3f/numexpr-2.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e23b87f744e04e302d82ac5e2189ae20a533566aec76a46885376e20b0645bf8", size = 1417845 }, - { url = "https://files.pythonhosted.org/packages/45/2d/9b5764d0eafbbb2889288f80de773791358acf6fad1a55767538d8b79599/numexpr-2.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:44f84e0e5af219dbb62a081606156420815890e041b87252fbcea5df55214c4c", size = 1466211 }, - { url = "https://files.pythonhosted.org/packages/5d/21/204db708eccd71aa8bc55bcad55bc0fc6c5a4e01ad78e14ee5714a749386/numexpr-2.14.1-cp314-cp314-win32.whl", hash = "sha256:1f1a5e817c534539351aa75d26088e9e1e0ef1b3a6ab484047618a652ccc4fc3", size = 168835 }, - { url = "https://files.pythonhosted.org/packages/4f/3e/d83e9401a1c3449a124f7d4b3fb44084798e0d30f7c11e60712d9b94cf11/numexpr-2.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:587c41509bc373dfb1fe6086ba55a73147297247bedb6d588cda69169fc412f2", size = 162608 }, - { url = "https://files.pythonhosted.org/packages/7f/d6/ec947806bb57836d6379a8c8a253c2aeaa602b12fef2336bfd2462bb4ed5/numexpr-2.14.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ec368819502b64f190c3f71be14a304780b5935c42aae5bf22c27cc2cbba70b5", size = 163525 }, - { url = "https://files.pythonhosted.org/packages/0d/77/048f30dcf661a3d52963a88c29b52b6d5ce996d38e9313a56a922451c1e0/numexpr-2.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7e87f6d203ac57239de32261c941e9748f9309cbc0da6295eabd0c438b920d3a", size = 152917 }, - { url = "https://files.pythonhosted.org/packages/9e/d3/956a13e628d722d649fbf2fded615134a308c082e122a48bad0e90a99ce9/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd72d8c2a165fe45ea7650b16eb8cc1792a94a722022006bb97c86fe51fd2091", size = 466242 }, - { url = "https://files.pythonhosted.org/packages/d6/dd/abe848678d82486940892f2cacf39e82eec790e8930d4d713d3f9191063b/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70d80fcb418a54ca208e9a38e58ddc425c07f66485176b261d9a67c7f2864f73", size = 457149 }, - { url = "https://files.pythonhosted.org/packages/fd/bb/797b583b5fb9da5700a5708ca6eb4f889c94d81abb28de4d642c0f4b3258/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:edea2f20c2040df8b54ee8ca8ebda63de9545b2112872466118e9df4d0ae99f3", size = 1426493 }, - { url = "https://files.pythonhosted.org/packages/77/c4/0519ab028fdc35e3e7ee700def7f2b4631b175cd9e1202bd7966c1695c33/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:790447be6879a6c51b9545f79612d24c9ea0a41d537a84e15e6a8ddef0b6268e", size = 1474413 }, - { url = "https://files.pythonhosted.org/packages/d4/4a/33044878c8f4a75213cfe9c11d4c02058bb710a7a063fe14f362e8de1077/numexpr-2.14.1-cp314-cp314t-win32.whl", hash = "sha256:538961096c2300ea44240209181e31fae82759d26b51713b589332b9f2a4117e", size = 169502 }, - { url = "https://files.pythonhosted.org/packages/41/a2/5a1a2c72528b429337f49911b18c302ecd36eeab00f409147e1aa4ae4519/numexpr-2.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:a40b350cd45b4446076fa11843fa32bbe07024747aeddf6d467290bf9011b392", size = 163589 }, +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, 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" }, + { url = "https://files.pythonhosted.org/packages/9d/20/c473fc04a371f5e2f8c5749e04505c13e7a8ede27c09e9f099b2ad6f43d6/numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ebae0ab18c799b0e6b8c5a8d11e1fa3848eb4011271d99848b297468a39430", size = 162790, upload-time = "2025-10-13T16:16:34.903Z" }, + { url = "https://files.pythonhosted.org/packages/45/93/b6760dd1904c2a498e5f43d1bb436f59383c3ddea3815f1461dfaa259373/numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47041f2f7b9e69498fb311af672ba914a60e6e6d804011caacb17d66f639e659", size = 152196, upload-time = "2025-10-13T16:16:36.593Z" }, + { url = "https://files.pythonhosted.org/packages/72/94/cc921e35593b820521e464cbbeaf8212bbdb07f16dc79fe283168df38195/numexpr-2.14.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d686dfb2c1382d9e6e0ee0b7647f943c1886dba3adbf606c625479f35f1956c1", size = 452468, upload-time = "2025-10-13T16:13:29.531Z" }, + { url = "https://files.pythonhosted.org/packages/d9/43/560e9ba23c02c904b5934496486d061bcb14cd3ebba2e3cf0e2dccb6c22b/numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee6d4fbbbc368e6cdd0772734d6249128d957b3b8ad47a100789009f4de7083", size = 443631, upload-time = "2025-10-13T16:15:02.473Z" }, + { url = "https://files.pythonhosted.org/packages/7b/6c/78f83b6219f61c2c22d71ab6e6c2d4e5d7381334c6c29b77204e59edb039/numexpr-2.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3a2839efa25f3c8d4133252ea7342d8f81226c7c4dda81f97a57e090b9d87a48", size = 1417670, upload-time = "2025-10-13T16:13:33.464Z" }, + { url = "https://files.pythonhosted.org/packages/0e/bb/1ccc9dcaf46281568ce769888bf16294c40e98a5158e4b16c241de31d0d3/numexpr-2.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9f9137f1351b310436662b5dc6f4082a245efa8950c3b0d9008028df92fefb9b", size = 1466212, upload-time = "2025-10-13T16:15:12.828Z" }, + { url = "https://files.pythonhosted.org/packages/31/9f/203d82b9e39dadd91d64bca55b3c8ca432e981b822468dcef41a4418626b/numexpr-2.14.1-cp312-cp312-win32.whl", hash = "sha256:36f8d5c1bd1355df93b43d766790f9046cccfc1e32b7c6163f75bcde682cda07", size = 166996, upload-time = "2025-10-13T16:17:10.369Z" }, + { url = "https://files.pythonhosted.org/packages/1f/67/ffe750b5452eb66de788c34e7d21ec6d886abb4d7c43ad1dc88ceb3d998f/numexpr-2.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:fdd886f4b7dbaf167633ee396478f0d0aa58ea2f9e7ccc3c6431019623e8d68f", size = 160187, upload-time = "2025-10-13T16:17:11.974Z" }, + { url = "https://files.pythonhosted.org/packages/73/b4/9f6d637fd79df42be1be29ee7ba1f050fab63b7182cb922a0e08adc12320/numexpr-2.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:09078ba73cffe94745abfbcc2d81ab8b4b4e9d7bfbbde6cac2ee5dbf38eee222", size = 162794, upload-time = "2025-10-13T16:16:38.291Z" }, + { url = "https://files.pythonhosted.org/packages/35/ae/d58558d8043de0c49f385ea2fa789e3cfe4d436c96be80200c5292f45f15/numexpr-2.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dce0b5a0447baa7b44bc218ec2d7dcd175b8eee6083605293349c0c1d9b82fb6", size = 152203, upload-time = "2025-10-13T16:16:39.907Z" }, + { url = "https://files.pythonhosted.org/packages/13/65/72b065f9c75baf8f474fd5d2b768350935989d4917db1c6c75b866d4067c/numexpr-2.14.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:06855053de7a3a8425429bd996e8ae3c50b57637ad3e757e0fa0602a7874be30", size = 455860, upload-time = "2025-10-13T16:13:35.811Z" }, + { url = "https://files.pythonhosted.org/packages/fc/f9/c9457652dfe28e2eb898372da2fe786c6db81af9540c0f853ee04a0699cc/numexpr-2.14.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f9366d23a2e991fd5a8b5e61a17558f028ba86158a4552f8f239b005cdf83c", size = 446574, upload-time = "2025-10-13T16:15:17.367Z" }, + { url = "https://files.pythonhosted.org/packages/b6/99/8d3879c4d67d3db5560cf2de65ce1778b80b75f6fa415eb5c3e7bd37ba27/numexpr-2.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c5f1b1605695778896534dfc6e130d54a65cd52be7ed2cd0cfee3981fd676bf5", size = 1417306, upload-time = "2025-10-13T16:13:42.813Z" }, + { url = "https://files.pythonhosted.org/packages/ea/05/6bddac9f18598ba94281e27a6943093f7d0976544b0cb5d92272c64719bd/numexpr-2.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a4ba71db47ea99c659d88ee6233fa77b6dc83392f1d324e0c90ddf617ae3f421", size = 1466145, upload-time = "2025-10-13T16:15:27.464Z" }, + { url = "https://files.pythonhosted.org/packages/24/5d/cbeb67aca0c5a76ead13df7e8bd8dd5e0d49145f90da697ba1d9f07005b0/numexpr-2.14.1-cp313-cp313-win32.whl", hash = "sha256:638dce8320f4a1483d5ca4fda69f60a70ed7e66be6e68bc23fb9f1a6b78a9e3b", size = 166996, upload-time = "2025-10-13T16:17:13.803Z" }, + { url = "https://files.pythonhosted.org/packages/cc/23/9281bceaeb282cead95f0aa5f7f222ffc895670ea689cc1398355f6e3001/numexpr-2.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:9fdcd4735121658a313f878fd31136d1bfc6a5b913219e7274e9fca9f8dac3bb", size = 160189, upload-time = "2025-10-13T16:17:15.417Z" }, + { url = "https://files.pythonhosted.org/packages/f3/76/7aac965fd93a56803cbe502aee2adcad667253ae34b0badf6c5af7908b6c/numexpr-2.14.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:557887ad7f5d3c2a40fd7310e50597045a68e66b20a77b3f44d7bc7608523b4b", size = 163524, upload-time = "2025-10-13T16:16:42.213Z" }, + { url = "https://files.pythonhosted.org/packages/58/65/79d592d5e63fbfab3b59a60c386853d9186a44a3fa3c87ba26bdc25b6195/numexpr-2.14.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:af111c8fe6fc55d15e4c7cab11920fc50740d913636d486545b080192cd0ad73", size = 152919, upload-time = "2025-10-13T16:16:44.229Z" }, + { url = "https://files.pythonhosted.org/packages/84/78/3c8335f713d4aeb99fa758d7c62f0be1482d4947ce5b508e2052bb7aeee9/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33265294376e7e2ae4d264d75b798a915d2acf37b9dd2b9405e8b04f84d05cfc", size = 465972, upload-time = "2025-10-13T16:13:45.061Z" }, + { url = "https://files.pythonhosted.org/packages/35/81/9ee5f69b811e8f18746c12d6f71848617684edd3161927f95eee7a305631/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83647d846d3eeeb9a9255311236135286728b398d0d41d35dedb532dca807fe9", size = 456953, upload-time = "2025-10-13T16:15:31.186Z" }, + { url = "https://files.pythonhosted.org/packages/6d/39/9b8bc6e294d85cbb54a634e47b833e9f3276a8bdf7ce92aa808718a0212d/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6e575fd3ad41ddf3355d0c7ef6bd0168619dc1779a98fe46693cad5e95d25e6e", size = 1426199, upload-time = "2025-10-13T16:13:48.231Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ce/0d4fcd31ab49319740d934fba1734d7dad13aa485532ca754e555ca16c8b/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:67ea4771029ce818573b1998f5ca416bd255156feea017841b86176a938f7d19", size = 1474214, upload-time = "2025-10-13T16:15:38.893Z" }, + { url = "https://files.pythonhosted.org/packages/b7/47/b2a93cbdb3ba4e009728ad1b9ef1550e2655ea2c86958ebaf03b9615f275/numexpr-2.14.1-cp313-cp313t-win32.whl", hash = "sha256:15015d47d3d1487072d58c0e7682ef2eb608321e14099c39d52e2dd689483611", size = 167676, upload-time = "2025-10-13T16:17:17.351Z" }, + { url = "https://files.pythonhosted.org/packages/86/99/ee3accc589ed032eea68e12172515ed96a5568534c213ad109e1f4411df1/numexpr-2.14.1-cp313-cp313t-win_amd64.whl", hash = "sha256:94c711f6d8f17dfb4606842b403699603aa591ab9f6bf23038b488ea9cfb0f09", size = 161096, upload-time = "2025-10-13T16:17:19.174Z" }, + { url = "https://files.pythonhosted.org/packages/ac/36/9db78dfbfdfa1f8bf0872993f1a334cdd8fca5a5b6567e47dcb128bcb7c2/numexpr-2.14.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ede79f7ff06629f599081de644546ce7324f1581c09b0ac174da88a470d39c21", size = 162848, upload-time = "2025-10-13T16:16:46.216Z" }, + { url = "https://files.pythonhosted.org/packages/13/c1/a5c78ae637402c5550e2e0ba175275d2515d432ec28af0cdc23c9b476e65/numexpr-2.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2eac7a5a2f70b3768c67056445d1ceb4ecd9b853c8eda9563823b551aeaa5082", size = 152270, upload-time = "2025-10-13T16:16:47.92Z" }, + { url = "https://files.pythonhosted.org/packages/9a/ed/aabd8678077848dd9a751c5558c2057839f5a09e2a176d8dfcd0850ee00e/numexpr-2.14.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5aedf38d4c0c19d3cecfe0334c3f4099fb496f54c146223d30fa930084bc8574", size = 455918, upload-time = "2025-10-13T16:13:50.338Z" }, + { url = "https://files.pythonhosted.org/packages/88/e1/3db65117f02cdefb0e5e4c440daf1c30beb45051b7f47aded25b7f4f2f34/numexpr-2.14.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439ec4d57b853792ebe5456e3160312281c3a7071ecac5532ded3278ede614de", size = 446512, upload-time = "2025-10-13T16:15:42.313Z" }, + { url = "https://files.pythonhosted.org/packages/9a/fb/7ceb9ee55b5f67e4a3e4d73d5af4c7e37e3c9f37f54bee90361b64b17e3f/numexpr-2.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e23b87f744e04e302d82ac5e2189ae20a533566aec76a46885376e20b0645bf8", size = 1417845, upload-time = "2025-10-13T16:13:53.836Z" }, + { url = "https://files.pythonhosted.org/packages/45/2d/9b5764d0eafbbb2889288f80de773791358acf6fad1a55767538d8b79599/numexpr-2.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:44f84e0e5af219dbb62a081606156420815890e041b87252fbcea5df55214c4c", size = 1466211, upload-time = "2025-10-13T16:15:48.985Z" }, + { url = "https://files.pythonhosted.org/packages/5d/21/204db708eccd71aa8bc55bcad55bc0fc6c5a4e01ad78e14ee5714a749386/numexpr-2.14.1-cp314-cp314-win32.whl", hash = "sha256:1f1a5e817c534539351aa75d26088e9e1e0ef1b3a6ab484047618a652ccc4fc3", size = 168835, upload-time = "2025-10-13T16:17:20.82Z" }, + { url = "https://files.pythonhosted.org/packages/4f/3e/d83e9401a1c3449a124f7d4b3fb44084798e0d30f7c11e60712d9b94cf11/numexpr-2.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:587c41509bc373dfb1fe6086ba55a73147297247bedb6d588cda69169fc412f2", size = 162608, upload-time = "2025-10-13T16:17:22.228Z" }, + { url = "https://files.pythonhosted.org/packages/7f/d6/ec947806bb57836d6379a8c8a253c2aeaa602b12fef2336bfd2462bb4ed5/numexpr-2.14.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ec368819502b64f190c3f71be14a304780b5935c42aae5bf22c27cc2cbba70b5", size = 163525, upload-time = "2025-10-13T16:16:50.133Z" }, + { url = "https://files.pythonhosted.org/packages/0d/77/048f30dcf661a3d52963a88c29b52b6d5ce996d38e9313a56a922451c1e0/numexpr-2.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7e87f6d203ac57239de32261c941e9748f9309cbc0da6295eabd0c438b920d3a", size = 152917, upload-time = "2025-10-13T16:16:52.055Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d3/956a13e628d722d649fbf2fded615134a308c082e122a48bad0e90a99ce9/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd72d8c2a165fe45ea7650b16eb8cc1792a94a722022006bb97c86fe51fd2091", size = 466242, upload-time = "2025-10-13T16:13:55.795Z" }, + { url = "https://files.pythonhosted.org/packages/d6/dd/abe848678d82486940892f2cacf39e82eec790e8930d4d713d3f9191063b/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70d80fcb418a54ca208e9a38e58ddc425c07f66485176b261d9a67c7f2864f73", size = 457149, upload-time = "2025-10-13T16:15:52.036Z" }, + { url = "https://files.pythonhosted.org/packages/fd/bb/797b583b5fb9da5700a5708ca6eb4f889c94d81abb28de4d642c0f4b3258/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:edea2f20c2040df8b54ee8ca8ebda63de9545b2112872466118e9df4d0ae99f3", size = 1426493, upload-time = "2025-10-13T16:13:59.244Z" }, + { url = "https://files.pythonhosted.org/packages/77/c4/0519ab028fdc35e3e7ee700def7f2b4631b175cd9e1202bd7966c1695c33/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:790447be6879a6c51b9545f79612d24c9ea0a41d537a84e15e6a8ddef0b6268e", size = 1474413, upload-time = "2025-10-13T16:15:59.211Z" }, + { url = "https://files.pythonhosted.org/packages/d4/4a/33044878c8f4a75213cfe9c11d4c02058bb710a7a063fe14f362e8de1077/numexpr-2.14.1-cp314-cp314t-win32.whl", hash = "sha256:538961096c2300ea44240209181e31fae82759d26b51713b589332b9f2a4117e", size = 169502, upload-time = "2025-10-13T16:17:23.829Z" }, + { url = "https://files.pythonhosted.org/packages/41/a2/5a1a2c72528b429337f49911b18c302ecd36eeab00f409147e1aa4ae4519/numexpr-2.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:a40b350cd45b4446076fa11843fa32bbe07024747aeddf6d467290bf9011b392", size = 163589, upload-time = "2025-10-13T16:17:25.696Z" }, ] [[package]] name = "numpy" version = "2.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194 }, - { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111 }, - { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159 }, - { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936 }, - { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692 }, - { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164 }, - { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877 }, - { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487 }, - { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945 }, - { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406 }, - { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528 }, - { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119 }, - { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246 }, - { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410 }, - { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240 }, - { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012 }, - { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538 }, - { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706 }, - { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541 }, - { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825 }, - { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687 }, - { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482 }, - { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648 }, - { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902 }, - { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992 }, - { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944 }, - { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392 }, - { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220 }, - { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800 }, - { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600 }, - { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134 }, - { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598 }, - { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272 }, - { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197 }, - { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287 }, - { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763 }, - { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070 }, - { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752 }, - { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024 }, - { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398 }, - { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971 }, - { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532 }, - { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881 }, - { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458 }, - { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559 }, - { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716 }, - { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947 }, - { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197 }, - { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245 }, - { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587 }, - { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226 }, - { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196 }, - { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334 }, - { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678 }, - { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672 }, - { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731 }, - { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805 }, - { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496 }, - { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616 }, - { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145 }, - { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813 }, - { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982 }, - { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908 }, - { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867 }, - { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511 }, - { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064 }, - { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157 }, - { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728 }, - { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374 }, - { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286 }, - { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263 }, +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, ] [[package]] name = "objsize" version = "0.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9d/42/2de8994fbea1112d076d71aefaebad888ff01e5b52616895d510b73c3b96/objsize-0.8.0.tar.gz", hash = "sha256:df17998cf6ef4b24d52abee5020484491230e3f4af71a8ff0098c7455ad4d91c", size = 16593 } +sdist = { url = "https://files.pythonhosted.org/packages/9d/42/2de8994fbea1112d076d71aefaebad888ff01e5b52616895d510b73c3b96/objsize-0.8.0.tar.gz", hash = "sha256:df17998cf6ef4b24d52abee5020484491230e3f4af71a8ff0098c7455ad4d91c", size = 16593, upload-time = "2026-01-18T12:55:14.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/53/157f8f4df3f43fdfdc627a56fa46135e4dcf806eb5bc6088811d968f8a21/objsize-0.8.0-py3-none-any.whl", hash = "sha256:afea5e61ba1e3e40c23b546028cdc1df88c5b097d2b0d6c6b8a4bf44fa7a3e1b", size = 11599 }, + { url = "https://files.pythonhosted.org/packages/14/53/157f8f4df3f43fdfdc627a56fa46135e4dcf806eb5bc6088811d968f8a21/objsize-0.8.0-py3-none-any.whl", hash = "sha256:afea5e61ba1e3e40c23b546028cdc1df88c5b097d2b0d6c6b8a4bf44fa7a3e1b", size = 11599, upload-time = "2026-01-18T12:55:12.626Z" }, ] [[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 } -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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { 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 }, - { url = "https://files.pythonhosted.org/packages/0d/bd/70b6ab193594d7abb875320c0a7c8335e846f28968c432c31042409c3c8d/orjson-3.11.9-cp311-cp311-win32.whl", hash = "sha256:14ed654580c1ed2bc217352ec82f91b047aef82951aa71c7f64e0dcb03c0e180", size = 131533 }, - { url = "https://files.pythonhosted.org/packages/3f/17/1a1a228183d62d1b77e2c30d210f47dd4768b310ebe1607c63e3c0e3a71e/orjson-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:57ea77fb70a448ce87d18fca050193202a3da5e54598f6501ca5476fb66cfe02", size = 127106 }, - { url = "https://files.pythonhosted.org/packages/b8/95/285de5fa296d09681ee9c546cd4a8aeb773b701cf343dc125994f4d52953/orjson-3.11.9-cp311-cp311-win_arm64.whl", hash = "sha256:19b72ed11572a2ee51a67a903afbe5af504f84ed6f529c0fe44b0ab3fb5cc697", size = 126848 }, - { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515 }, - { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409 }, - { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106 }, - { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864 }, - { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213 }, - { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994 }, - { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744 }, - { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014 }, - { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509 }, - { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127 }, - { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025 }, - { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943 }, - { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606 }, - { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101 }, - { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736 }, - { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458 }, - { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368 }, - { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070 }, - { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892 }, - { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217 }, - { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980 }, - { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738 }, - { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033 }, - { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492 }, - { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087 }, - { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031 }, - { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915 }, - { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613 }, - { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086 }, - { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696 }, - { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465 }, - { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364 }, - { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063 }, - { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356 }, - { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592 }, - { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491 }, - { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309 }, - { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030 }, - { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482 }, - { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178 }, - { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089 }, - { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921 }, - { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638 }, - { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078 }, - { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687 }, +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" }, + { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" }, + { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106, upload-time = "2026-05-06T15:10:00.798Z" }, + { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864, upload-time = "2026-05-06T15:10:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213, upload-time = "2026-05-06T15:10:03.515Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994, upload-time = "2026-05-06T15:10:05.083Z" }, + { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744, upload-time = "2026-05-06T15:10:06.853Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014, upload-time = "2026-05-06T15:10:08.213Z" }, + { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509, upload-time = "2026-05-06T15:10:09.595Z" }, + { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127, upload-time = "2026-05-06T15:10:11.049Z" }, + { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025, upload-time = "2026-05-06T15:10:12.842Z" }, + { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943, upload-time = "2026-05-06T15:10:14.405Z" }, + { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606, upload-time = "2026-05-06T15:10:15.791Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101, upload-time = "2026-05-06T15:10:17.129Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736, upload-time = "2026-05-06T15:10:18.645Z" }, + { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458, upload-time = "2026-05-06T15:10:20.079Z" }, + { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368, upload-time = "2026-05-06T15:10:21.549Z" }, + { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070, upload-time = "2026-05-06T15:10:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892, upload-time = "2026-05-06T15:10:24.714Z" }, + { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217, upload-time = "2026-05-06T15:10:26.084Z" }, + { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980, upload-time = "2026-05-06T15:10:28.062Z" }, + { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738, upload-time = "2026-05-06T15:10:29.727Z" }, + { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033, upload-time = "2026-05-06T15:10:31.152Z" }, + { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492, upload-time = "2026-05-06T15:10:32.641Z" }, + { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087, upload-time = "2026-05-06T15:10:34.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031, upload-time = "2026-05-06T15:10:36.358Z" }, + { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915, upload-time = "2026-05-06T15:10:38.013Z" }, + { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613, upload-time = "2026-05-06T15:10:39.569Z" }, + { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086, upload-time = "2026-05-06T15:10:41.262Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696, upload-time = "2026-05-06T15:10:42.651Z" }, + { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465, upload-time = "2026-05-06T15:10:44.097Z" }, + { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364, upload-time = "2026-05-06T15:10:45.839Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063, upload-time = "2026-05-06T15:10:47.267Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356, upload-time = "2026-05-06T15:10:48.765Z" }, + { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592, upload-time = "2026-05-06T15:10:50.13Z" }, + { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491, upload-time = "2026-05-06T15:10:51.582Z" }, + { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309, upload-time = "2026-05-06T15:10:53.329Z" }, + { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030, upload-time = "2026-05-06T15:10:54.988Z" }, + { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482, upload-time = "2026-05-06T15:10:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178, upload-time = "2026-05-06T15:10:58.446Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089, upload-time = "2026-05-06T15:11:00.441Z" }, + { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921, upload-time = "2026-05-06T15:11:02.176Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638, upload-time = "2026-05-06T15:11:03.696Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078, upload-time = "2026-05-06T15:11:05.123Z" }, + { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687, upload-time = "2026-05-06T15:11:06.602Z" }, ] [[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]] @@ -1423,64 +1206,64 @@ dependencies = [ { name = "python-dateutil" }, { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495 }, - { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250 }, - { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558 }, - { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611 }, - { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670 }, - { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708 }, - { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609 }, - { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596 }, - { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846 }, - { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550 }, - { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965 }, - { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600 }, - { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824 }, - { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889 }, - { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463 }, - { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158 }, - { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071 }, - { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690 }, - { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634 }, - { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243 }, - { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659 }, - { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880 }, - { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091 }, - { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282 }, - { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016 }, - { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210 }, - { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126 }, - { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051 }, - { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796 }, - { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741 }, - { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958 }, - { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065 }, - { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101 }, - { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553 }, - { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065 }, - { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188 }, - { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966 }, - { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755 }, - { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658 }, - { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242 }, - { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369 }, - { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306 }, - { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394 }, - { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717 }, - { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897 }, - { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855 }, - { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464 }, +sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" }, + { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" }, + { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" }, + { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" }, + { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" }, + { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" }, + { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" }, + { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" }, + { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" }, + { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" }, + { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" }, + { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" }, + { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" }, + { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" }, + { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" }, + { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" }, + { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" }, + { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" }, + { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" }, + { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, + { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, + { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, + { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" }, + { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" }, + { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" }, + { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" }, + { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" }, + { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" }, + { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" }, + { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" }, + { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" }, + { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" }, + { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" }, + { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" }, + { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" }, + { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" }, ] [[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]] @@ -1491,9 +1274,9 @@ dependencies = [ { name = "locket" }, { name = "toolz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029 } +sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029, upload-time = "2024-05-06T19:51:41.945Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905 }, + { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905, upload-time = "2024-05-06T19:51:39.271Z" }, ] [[package]] @@ -1506,9 +1289,9 @@ dependencies = [ { name = "pandas" }, { name = "pint" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763 } +sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763, upload-time = "2026-02-26T17:03:46.376Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633 }, + { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633, upload-time = "2026-02-26T17:03:45.16Z" }, ] [[package]] @@ -1518,9 +1301,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] -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]] @@ -1533,27 +1316,27 @@ dependencies = [ { name = "platformdirs" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106 } +sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106, upload-time = "2026-03-19T21:57:08.72Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488 }, + { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488, upload-time = "2026-03-19T21:57:07.022Z" }, ] [[package]] name = "platformdirs" version = "4.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743 }, + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, ] [[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 }, + { 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]] @@ -1566,7 +1349,6 @@ dependencies = [ { name = "filelock" }, { name = "numexpr" }, { name = "pproc-core" }, - { name = "pproc-runtime" }, { name = "psutil" }, { name = "scikit-learn" }, { name = "scipy" }, @@ -1575,7 +1357,6 @@ dependencies = [ [package.optional-dependencies] tcycl = [ - { name = "pyinfero" }, { name = "wget" }, ] @@ -1593,14 +1374,13 @@ requires-dist = [ { name = "filelock", specifier = ">=3.12" }, { name = "numexpr" }, { name = "pproc-core", editable = "../pproc-core" }, - { name = "pproc-runtime", editable = "../pproc-runtime" }, { name = "psutil" }, - { name = "pyinfero", marker = "extra == 'tcycl'", git = "ssh://git@github.com/ecmwf/infero.git?subdirectory=src%2Finfero%2Fapi%2Fpyinfero&rev=0.3.1" }, { name = "scikit-learn" }, { name = "scipy", specifier = ">=1.8" }, { name = "wget", marker = "extra == 'tcycl'" }, { name = "xarray" }, ] +provides-extras = ["tcycl"] [package.metadata.requires-dev] dev = [ @@ -1619,6 +1399,7 @@ dependencies = [ { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, + { name = "qubed" }, ] [package.dev-dependencies] @@ -1637,6 +1418,7 @@ requires-dist = [ { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, + { name = "qubed", specifier = "<=0.3.1" }, ] [package.metadata.requires-dev] @@ -1646,70 +1428,28 @@ dev = [ { name = "ty", specifier = ">=0.0.43" }, ] -[[package]] -name = "pproc-runtime" -source = { editable = "../pproc-runtime" } -dependencies = [ - { name = "array-api-compat" }, - { name = "code-meters" }, - { name = "earthkit-data", extra = ["fdb", "mars"] }, - { name = "earthkit-meteo" }, - { name = "eccodes" }, - { name = "fdb5lib" }, - { name = "mir-python" }, - { name = "numpy" }, - { name = "thermofeel" }, -] - -[package.dev-dependencies] -dev = [ - { name = "prek" }, - { name = "pytest" }, - { name = "ty" }, -] - -[package.metadata] -requires-dist = [ - { name = "array-api-compat" }, - { name = "code-meters" }, - { name = "earthkit-data", extras = ["fdb", "mars"] }, - { name = "earthkit-meteo" }, - { name = "eccodes" }, - { name = "fdb5lib" }, - { name = "mir-python" }, - { name = "numpy" }, - { name = "thermofeel" }, -] - -[package.metadata.requires-dev] -dev = [ - { name = "prek", specifier = ">=0.4.4" }, - { name = "pytest", specifier = ">=9.0.3" }, - { name = "ty", specifier = ">=0.0.44" }, -] - [[package]] name = "prek" version = "0.4.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/13/3d71b3adbf385f7dc7fb6e16d6e25421fd8398b45d8f8410a328bf22bd3f/prek-0.4.4.tar.gz", hash = "sha256:4ec5771153d158a0e4473933b7fd9b51e1b1f57f2df50aeb7560ea6812226dc5", size = 470641 } +sdist = { url = "https://files.pythonhosted.org/packages/f6/13/3d71b3adbf385f7dc7fb6e16d6e25421fd8398b45d8f8410a328bf22bd3f/prek-0.4.4.tar.gz", hash = "sha256:4ec5771153d158a0e4473933b7fd9b51e1b1f57f2df50aeb7560ea6812226dc5", size = 470641, upload-time = "2026-06-04T07:26:07.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/9f/68a577888edf7f2647a652b02899508ccd84e57ce1f79c51a44edfd308d7/prek-0.4.4-py3-none-linux_armv6l.whl", hash = "sha256:23cfd96a25de1c93e3c43c746643b80489e3b2fa49ca9c0ffd6022e51535c900", size = 5550271 }, - { url = "https://files.pythonhosted.org/packages/35/b8/5427a0023116343a8d787b446536a7fddfa5db7eec7713dd05618da2bdfe/prek-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a427b792c4436f49732b1f6ebccf221fdcc6390c148474280da9c2c6eaabc9c4", size = 5910136 }, - { url = "https://files.pythonhosted.org/packages/9d/4f/d751e90b7e768e472e054cd41cbe502589436ca9c1a13bfe4fa9513f9cde/prek-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b998038fc92c990e03147eb5b95b0f2c394517f8857ab911aac8e092f1b9b3ab", size = 5470124 }, - { url = "https://files.pythonhosted.org/packages/c6/fe/e73241c5777b6f9b6b95132febbd27f9be9e89912e9e93c0982680593af2/prek-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:9cebca8c15da4f1d6e3a25e6ae0611425c8596e926222050f2588c390e42df8a", size = 5732725 }, - { url = "https://files.pythonhosted.org/packages/ca/a3/329bd910e7e5d9d0eb5e571f3ba48023213744e78411afb81f5ef8356cab/prek-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8742ac26363e74c855df6215a709d5db183204d00ac0f1a722b13aed4da3cd0", size = 5457953 }, - { url = "https://files.pythonhosted.org/packages/3d/f8/d642990513d9707398506bad45d39173d84266231f7d919899f694aefe2c/prek-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2b7c8710546a1e894afa7ab022030cd4e21f1ee7ffb301b4360773d22f1f00f", size = 5860556 }, - { url = "https://files.pythonhosted.org/packages/8d/17/a2e29cb278503a8c18612d8a62a15020648dc768e2e94bc4b4d4c9411e07/prek-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e02bd4d5e05c500e4d9f70f024e30d13aa361dc490724b7f476d2e35542c239f", size = 6652492 }, - { url = "https://files.pythonhosted.org/packages/ab/10/ad3270b18135ee5d1af6f6cf4b0c8601b1cc2cb38d16e835081da820833a/prek-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a25041733de987a47e5a7bace47182a6f0e2ae5f960cb54c1d4630afd2591", size = 6113837 }, - { url = "https://files.pythonhosted.org/packages/59/d9/e8c201b9b41c4561673cea01c630ab604df89d13e952f87dbcb807d32588/prek-0.4.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:0b04a0f36d07474f2a9fc5b1ba1197a1b326b2b211f39cd74cf0d4613545f7f4", size = 5729155 }, - { url = "https://files.pythonhosted.org/packages/e8/cd/227b0494fcbc91e8fe15c2a4db9e6dfff95314ef38db3e40e6ea96db249d/prek-0.4.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f032ccbe2d6edc345f81a6d772c18cc169d63c27b5a8292bfe416b352bdfee57", size = 5590775 }, - { url = "https://files.pythonhosted.org/packages/cc/e0/9d750b9cf21ece884afdc15668d0f005a36588fe1b0bb5ff4a8112ab51cb/prek-0.4.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:bad3586fcea3e913f0edf2e8f132f97889e03976b7ee3d120fd294ad4e89a5eb", size = 5437864 }, - { url = "https://files.pythonhosted.org/packages/3a/48/e2e5c0299590ad18a253c0ac09508b615baa1b382010c511186572f711d3/prek-0.4.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4058638532c6dcbf0076d23b9264cbdd9f0f0e320762e237a6b9e4e4b854a766", size = 5718579 }, - { url = "https://files.pythonhosted.org/packages/54/48/7fb3d4e7f664d1ce8ae35ec553872ffddf9fab4c5081735fdaae610b1e7c/prek-0.4.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:619bab14071670249777deea0cc0b29d904c4a514cf33b20e583900a544f0399", size = 6231622 }, - { url = "https://files.pythonhosted.org/packages/46/c0/a4ddbf38034afe67cfa97c4bd81c86429ada098e7c323218d9f9fd061566/prek-0.4.4-py3-none-win32.whl", hash = "sha256:143154b329c05b2f9fa3230e604d02d9c4297dd43f96135a8ba166772e8ecd60", size = 5240317 }, - { url = "https://files.pythonhosted.org/packages/bc/8c/fe97b5b095187bb2f93bbe406bccf108c879e5e4c83f165809b0d16ce0fb/prek-0.4.4-py3-none-win_amd64.whl", hash = "sha256:c38c5140ae2ea55ebb02e6ca590a416664ea1af287cdd21f54daeec53a81015a", size = 5626104 }, - { url = "https://files.pythonhosted.org/packages/25/63/3586226d536796e65f8e725b531d6104e55caaa18659bdcb512661629586/prek-0.4.4-py3-none-win_arm64.whl", hash = "sha256:3efa28fb37b9ddbafb7759da8d497f0d36cf02a05816e15d6541f5669d5d2114", size = 5470399 }, + { url = "https://files.pythonhosted.org/packages/06/9f/68a577888edf7f2647a652b02899508ccd84e57ce1f79c51a44edfd308d7/prek-0.4.4-py3-none-linux_armv6l.whl", hash = "sha256:23cfd96a25de1c93e3c43c746643b80489e3b2fa49ca9c0ffd6022e51535c900", size = 5550271, upload-time = "2026-06-04T07:26:17.834Z" }, + { url = "https://files.pythonhosted.org/packages/35/b8/5427a0023116343a8d787b446536a7fddfa5db7eec7713dd05618da2bdfe/prek-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a427b792c4436f49732b1f6ebccf221fdcc6390c148474280da9c2c6eaabc9c4", size = 5910136, upload-time = "2026-06-04T07:26:20.616Z" }, + { url = "https://files.pythonhosted.org/packages/9d/4f/d751e90b7e768e472e054cd41cbe502589436ca9c1a13bfe4fa9513f9cde/prek-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b998038fc92c990e03147eb5b95b0f2c394517f8857ab911aac8e092f1b9b3ab", size = 5470124, upload-time = "2026-06-04T07:26:29.23Z" }, + { url = "https://files.pythonhosted.org/packages/c6/fe/e73241c5777b6f9b6b95132febbd27f9be9e89912e9e93c0982680593af2/prek-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:9cebca8c15da4f1d6e3a25e6ae0611425c8596e926222050f2588c390e42df8a", size = 5732725, upload-time = "2026-06-04T07:26:19.133Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a3/329bd910e7e5d9d0eb5e571f3ba48023213744e78411afb81f5ef8356cab/prek-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8742ac26363e74c855df6215a709d5db183204d00ac0f1a722b13aed4da3cd0", size = 5457953, upload-time = "2026-06-04T07:26:23.41Z" }, + { url = "https://files.pythonhosted.org/packages/3d/f8/d642990513d9707398506bad45d39173d84266231f7d919899f694aefe2c/prek-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2b7c8710546a1e894afa7ab022030cd4e21f1ee7ffb301b4360773d22f1f00f", size = 5860556, upload-time = "2026-06-04T07:26:11.692Z" }, + { url = "https://files.pythonhosted.org/packages/8d/17/a2e29cb278503a8c18612d8a62a15020648dc768e2e94bc4b4d4c9411e07/prek-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e02bd4d5e05c500e4d9f70f024e30d13aa361dc490724b7f476d2e35542c239f", size = 6652492, upload-time = "2026-06-04T07:26:09.962Z" }, + { url = "https://files.pythonhosted.org/packages/ab/10/ad3270b18135ee5d1af6f6cf4b0c8601b1cc2cb38d16e835081da820833a/prek-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a25041733de987a47e5a7bace47182a6f0e2ae5f960cb54c1d4630afd2591", size = 6113837, upload-time = "2026-06-04T07:26:24.873Z" }, + { url = "https://files.pythonhosted.org/packages/59/d9/e8c201b9b41c4561673cea01c630ab604df89d13e952f87dbcb807d32588/prek-0.4.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:0b04a0f36d07474f2a9fc5b1ba1197a1b326b2b211f39cd74cf0d4613545f7f4", size = 5729155, upload-time = "2026-06-04T07:26:26.194Z" }, + { url = "https://files.pythonhosted.org/packages/e8/cd/227b0494fcbc91e8fe15c2a4db9e6dfff95314ef38db3e40e6ea96db249d/prek-0.4.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f032ccbe2d6edc345f81a6d772c18cc169d63c27b5a8292bfe416b352bdfee57", size = 5590775, upload-time = "2026-06-04T07:26:22.038Z" }, + { url = "https://files.pythonhosted.org/packages/cc/e0/9d750b9cf21ece884afdc15668d0f005a36588fe1b0bb5ff4a8112ab51cb/prek-0.4.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:bad3586fcea3e913f0edf2e8f132f97889e03976b7ee3d120fd294ad4e89a5eb", size = 5437864, upload-time = "2026-06-04T07:26:30.673Z" }, + { url = "https://files.pythonhosted.org/packages/3a/48/e2e5c0299590ad18a253c0ac09508b615baa1b382010c511186572f711d3/prek-0.4.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4058638532c6dcbf0076d23b9264cbdd9f0f0e320762e237a6b9e4e4b854a766", size = 5718579, upload-time = "2026-06-04T07:26:27.786Z" }, + { url = "https://files.pythonhosted.org/packages/54/48/7fb3d4e7f664d1ce8ae35ec553872ffddf9fab4c5081735fdaae610b1e7c/prek-0.4.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:619bab14071670249777deea0cc0b29d904c4a514cf33b20e583900a544f0399", size = 6231622, upload-time = "2026-06-04T07:26:16.309Z" }, + { url = "https://files.pythonhosted.org/packages/46/c0/a4ddbf38034afe67cfa97c4bd81c86429ada098e7c323218d9f9fd061566/prek-0.4.4-py3-none-win32.whl", hash = "sha256:143154b329c05b2f9fa3230e604d02d9c4297dd43f96135a8ba166772e8ecd60", size = 5240317, upload-time = "2026-06-04T07:26:08.726Z" }, + { url = "https://files.pythonhosted.org/packages/bc/8c/fe97b5b095187bb2f93bbe406bccf108c879e5e4c83f165809b0d16ce0fb/prek-0.4.4-py3-none-win_amd64.whl", hash = "sha256:c38c5140ae2ea55ebb02e6ca590a416664ea1af287cdd21f54daeec53a81015a", size = 5626104, upload-time = "2026-06-04T07:26:14.81Z" }, + { url = "https://files.pythonhosted.org/packages/25/63/3586226d536796e65f8e725b531d6104e55caaa18659bdcb512661629586/prek-0.4.4-py3-none-win_arm64.whl", hash = "sha256:3efa28fb37b9ddbafb7759da8d497f0d36cf02a05816e15d6541f5669d5d2114", size = 5470399, upload-time = "2026-06-04T07:26:13.231Z" }, ] [[package]] @@ -1719,79 +1459,79 @@ 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 }, + { 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 = "protobuf" version = "7.35.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/60/fd/5b1491d9e4b586d621c54f4c36b888714164b6875f8d6afa3f9072906a51/protobuf-7.35.0.tar.gz", hash = "sha256:a2efd84605f41e559f1881b0912b44099d0a2ac9bf46b3474823f10fb393b0e6", size = 458677 } +sdist = { url = "https://files.pythonhosted.org/packages/60/fd/5b1491d9e4b586d621c54f4c36b888714164b6875f8d6afa3f9072906a51/protobuf-7.35.0.tar.gz", hash = "sha256:a2efd84605f41e559f1881b0912b44099d0a2ac9bf46b3474823f10fb393b0e6", size = 458677, upload-time = "2026-05-19T23:02:29.197Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/ee/93d06e358a4aa32280b00e722d3ea0a1f25fc3cc5778d80581c9cca2c10e/protobuf-7.35.0-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:66be6c513931c794fa92c080ffee41671390da3d79da219cf9c0c0907f035dda", size = 433225 }, - { url = "https://files.pythonhosted.org/packages/8b/39/1c76c2da93f3c507e958e0aecee2391cc44d4625de6c728bbc555195b5a8/protobuf-7.35.0-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:fcbe42a4ac09d3ec9c987ddfcd956afd0b15f1ff613bd8371bde9405ffd5c8e5", size = 328847 }, - { url = "https://files.pythonhosted.org/packages/91/1a/39f7ce90a238c1a987a4d81ec26379e02ca0aff367de68e4a1fa474215b9/protobuf-7.35.0-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:4cbf5cc286130e06a6c9bbefac442431173906dfcc979712183d4adcc01b37ee", size = 344030 }, - { url = "https://files.pythonhosted.org/packages/70/5b/6baf9008817964454055ff3fe65f1de0b5f1e26c80c82f7fb108b7cd4ea3/protobuf-7.35.0-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:6c0f98f10c8a05ea30f8993dfef2de093d27b490fdae78bb60c8343795d55011", size = 327130 }, - { url = "https://files.pythonhosted.org/packages/8e/e5/e46adb0badc388bfb84877a5f9f026aff63f60e611016cf64dbe77e05446/protobuf-7.35.0-cp310-abi3-win32.whl", hash = "sha256:4c4617b83ade0e279d1d2bfe04025a1adb87f9ed657de038620dc0ff959357f6", size = 428946 }, - { url = "https://files.pythonhosted.org/packages/a7/ab/547fbd9e16d879dd13c167478f8ae0a83a428008ca07a5e06acdc23ad473/protobuf-7.35.0-cp310-abi3-win_amd64.whl", hash = "sha256:f05bcadf9a2a6b8dda047007075135fb7d08c73d9177aabc067e1be46881a201", size = 439996 }, - { url = "https://files.pythonhosted.org/packages/b8/ef/50433d346c56657a70d27f156c7b349ac59a068b01de4eb796e747eecc43/protobuf-7.35.0-py3-none-any.whl", hash = "sha256:c13f325cf242bad135c350629eeb5d54b24228eb472fb3e2e9ebbd4c5dc20ca0", size = 171659 }, + { url = "https://files.pythonhosted.org/packages/83/ee/93d06e358a4aa32280b00e722d3ea0a1f25fc3cc5778d80581c9cca2c10e/protobuf-7.35.0-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:66be6c513931c794fa92c080ffee41671390da3d79da219cf9c0c0907f035dda", size = 433225, upload-time = "2026-05-19T23:02:19.884Z" }, + { url = "https://files.pythonhosted.org/packages/8b/39/1c76c2da93f3c507e958e0aecee2391cc44d4625de6c728bbc555195b5a8/protobuf-7.35.0-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:fcbe42a4ac09d3ec9c987ddfcd956afd0b15f1ff613bd8371bde9405ffd5c8e5", size = 328847, upload-time = "2026-05-19T23:02:22.3Z" }, + { url = "https://files.pythonhosted.org/packages/91/1a/39f7ce90a238c1a987a4d81ec26379e02ca0aff367de68e4a1fa474215b9/protobuf-7.35.0-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:4cbf5cc286130e06a6c9bbefac442431173906dfcc979712183d4adcc01b37ee", size = 344030, upload-time = "2026-05-19T23:02:23.591Z" }, + { url = "https://files.pythonhosted.org/packages/70/5b/6baf9008817964454055ff3fe65f1de0b5f1e26c80c82f7fb108b7cd4ea3/protobuf-7.35.0-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:6c0f98f10c8a05ea30f8993dfef2de093d27b490fdae78bb60c8343795d55011", size = 327130, upload-time = "2026-05-19T23:02:24.637Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e5/e46adb0badc388bfb84877a5f9f026aff63f60e611016cf64dbe77e05446/protobuf-7.35.0-cp310-abi3-win32.whl", hash = "sha256:4c4617b83ade0e279d1d2bfe04025a1adb87f9ed657de038620dc0ff959357f6", size = 428946, upload-time = "2026-05-19T23:02:25.741Z" }, + { url = "https://files.pythonhosted.org/packages/a7/ab/547fbd9e16d879dd13c167478f8ae0a83a428008ca07a5e06acdc23ad473/protobuf-7.35.0-cp310-abi3-win_amd64.whl", hash = "sha256:f05bcadf9a2a6b8dda047007075135fb7d08c73d9177aabc067e1be46881a201", size = 439996, upload-time = "2026-05-19T23:02:26.808Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ef/50433d346c56657a70d27f156c7b349ac59a068b01de4eb796e747eecc43/protobuf-7.35.0-py3-none-any.whl", hash = "sha256:c13f325cf242bad135c350629eeb5d54b24228eb472fb3e2e9ebbd4c5dc20ca0", size = 171659, upload-time = "2026-05-19T23:02:27.842Z" }, ] [[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/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595 }, - { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082 }, - { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476 }, - { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062 }, - { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893 }, - { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589 }, - { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664 }, - { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087 }, - { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383 }, - { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210 }, - { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228 }, - { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284 }, - { 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 }, +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/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { 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 = "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 = "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]] @@ -1804,9 +1544,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775 } +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262 }, + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, ] [[package]] @@ -1816,145 +1556,129 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872 }, - { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255 }, - { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827 }, - { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051 }, - { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314 }, - { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146 }, - { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685 }, - { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420 }, - { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122 }, - { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573 }, - { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139 }, - { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433 }, - { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513 }, - { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114 }, - { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298 }, - { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158 }, - { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724 }, - { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742 }, - { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418 }, - { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274 }, - { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940 }, - { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516 }, - { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854 }, - { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306 }, - { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044 }, - { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133 }, - { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464 }, - { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823 }, - { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919 }, - { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604 }, - { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306 }, - { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906 }, - { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802 }, - { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446 }, - { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757 }, - { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275 }, - { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467 }, - { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417 }, - { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782 }, - { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782 }, - { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334 }, - { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986 }, - { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693 }, - { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819 }, - { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411 }, - { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079 }, - { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179 }, - { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926 }, - { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785 }, - { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733 }, - { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534 }, - { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732 }, - { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627 }, - { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141 }, - { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325 }, - { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990 }, - { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978 }, - { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354 }, - { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238 }, - { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251 }, - { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593 }, - { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226 }, - { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605 }, - { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777 }, - { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641 }, - { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404 }, - { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219 }, - { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594 }, - { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542 }, - { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146 }, - { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309 }, - { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736 }, - { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575 }, - { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624 }, - { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325 }, - { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782 }, - { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146 }, - { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492 }, - { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604 }, - { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828 }, - { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000 }, - { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286 }, - { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071 }, -] - -[[package]] -name = "pyfdb" -version = "0.1.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi" }, - { name = "eccodes" }, - { name = "findlibs" }, - { name = "packaging" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/b8/ee087c4bf0e8328eab5ddf738e1d9ee347a3463e6bbe3bf9d0c1b8b31379/pyfdb-0.1.3.tar.gz", hash = "sha256:b070f5dde8de850e82729d03c1e97a2f76281572624826383ac0049b3587352e", size = 17502 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/a8/b37e3e3398c54a33b994607e2808ef0de97809cbad3f0d784191862429eb/pyfdb-0.1.3-py3-none-any.whl", hash = "sha256:a9d3b69e19fbeb57bb0c6ccbe69d32fe3551e8b1eda4635c36ff6f88eacc2d66", size = 17202 }, +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, ] [[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 }, -] - -[[package]] -name = "pyinfero" -version = "0.1.1" -source = { git = "ssh://git@github.com/ecmwf/infero.git?subdirectory=src%2Finfero%2Fapi%2Fpyinfero&rev=0.3.1#63046295c28729d3eb0410a56ddfc4b68273e930" } -dependencies = [ - { name = "cffi" }, - { name = "numpy" }, + { 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 = "pyrsistent" version = "0.20.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ce/3a/5031723c09068e9c8c2f0bc25c3a9245f2b1d1aea8396c787a408f2b95ca/pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", size = 103642 } +sdist = { url = "https://files.pythonhosted.org/packages/ce/3a/5031723c09068e9c8c2f0bc25c3a9245f2b1d1aea8396c787a408f2b95ca/pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", size = 103642, upload-time = "2023-10-25T21:06:56.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/63/7544dc7d0953294882a5c587fb1b10a26e0c23d9b92281a14c2514bac1f7/pyrsistent-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", size = 83481 }, - { url = "https://files.pythonhosted.org/packages/ae/a0/49249bc14d71b1bf2ffe89703acfa86f2017c25cfdabcaea532b8c8a5810/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", size = 120222 }, - { url = "https://files.pythonhosted.org/packages/a1/94/9808e8c9271424120289b9028a657da336ad7e43da0647f62e4f6011d19b/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", size = 120002 }, - { url = "https://files.pythonhosted.org/packages/3f/f6/9ecfb78b2fc8e2540546db0fe19df1fae0f56664a5958c21ff8861b0f8da/pyrsistent-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6288b3fa6622ad8a91e6eb759cfc48ff3089e7c17fb1d4c59a919769314af224", size = 116850 }, - { url = "https://files.pythonhosted.org/packages/83/c8/e6d28bc27a0719f8eaae660357df9757d6e9ca9be2691595721de9e8adfc/pyrsistent-0.20.0-cp311-cp311-win32.whl", hash = "sha256:7d29c23bdf6e5438c755b941cef867ec2a4a172ceb9f50553b6ed70d50dfd656", size = 60775 }, - { url = "https://files.pythonhosted.org/packages/98/87/c6ef52ff30388f357922d08de012abdd3dc61e09311d88967bdae23ab657/pyrsistent-0.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:59a89bccd615551391f3237e00006a26bcf98a4d18623a19909a2c48b8e986ee", size = 63306 }, - { url = "https://files.pythonhosted.org/packages/15/ee/ff2ed52032ac1ce2e7ba19e79bd5b05d152ebfb77956cf08fcd6e8d760ea/pyrsistent-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e", size = 83537 }, - { url = "https://files.pythonhosted.org/packages/80/f1/338d0050b24c3132bcfc79b68c3a5f54bce3d213ecef74d37e988b971d8a/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a14798c3005ec892bbada26485c2eea3b54109cb2533713e355c806891f63c5e", size = 122615 }, - { url = "https://files.pythonhosted.org/packages/07/3a/e56d6431b713518094fae6ff833a04a6f49ad0fbe25fb7c0dc7408e19d20/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b14decb628fac50db5e02ee5a35a9c0772d20277824cfe845c8a8b717c15daa3", size = 122335 }, - { url = "https://files.pythonhosted.org/packages/4a/bb/5f40a4d5e985a43b43f607250e766cdec28904682c3505eb0bd343a4b7db/pyrsistent-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e2c116cc804d9b09ce9814d17df5edf1df0c624aba3b43bc1ad90411487036d", size = 118510 }, - { url = "https://files.pythonhosted.org/packages/1c/13/e6a22f40f5800af116c02c28e29f15c06aa41cb2036f6a64ab124647f28b/pyrsistent-0.20.0-cp312-cp312-win32.whl", hash = "sha256:e78d0c7c1e99a4a45c99143900ea0546025e41bb59ebc10182e947cf1ece9174", size = 60865 }, - { url = "https://files.pythonhosted.org/packages/75/ef/2fa3b55023ec07c22682c957808f9a41836da4cd006b5f55ec76bf0fbfa6/pyrsistent-0.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:4021a7f963d88ccd15b523787d18ed5e5269ce57aa4037146a2377ff607ae87d", size = 63239 }, - { url = "https://files.pythonhosted.org/packages/23/88/0acd180010aaed4987c85700b7cc17f9505f3edb4e5873e4dc67f613e338/pyrsistent-0.20.0-py3-none-any.whl", hash = "sha256:c55acc4733aad6560a7f5f818466631f07efc001fd023f34a6c203f8b6df0f0b", size = 58106 }, + { url = "https://files.pythonhosted.org/packages/df/63/7544dc7d0953294882a5c587fb1b10a26e0c23d9b92281a14c2514bac1f7/pyrsistent-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", size = 83481, upload-time = "2023-10-25T21:06:15.238Z" }, + { url = "https://files.pythonhosted.org/packages/ae/a0/49249bc14d71b1bf2ffe89703acfa86f2017c25cfdabcaea532b8c8a5810/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", size = 120222, upload-time = "2023-10-25T21:06:17.144Z" }, + { url = "https://files.pythonhosted.org/packages/a1/94/9808e8c9271424120289b9028a657da336ad7e43da0647f62e4f6011d19b/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", size = 120002, upload-time = "2023-10-25T21:06:18.727Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f6/9ecfb78b2fc8e2540546db0fe19df1fae0f56664a5958c21ff8861b0f8da/pyrsistent-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6288b3fa6622ad8a91e6eb759cfc48ff3089e7c17fb1d4c59a919769314af224", size = 116850, upload-time = "2023-10-25T21:06:20.424Z" }, + { url = "https://files.pythonhosted.org/packages/83/c8/e6d28bc27a0719f8eaae660357df9757d6e9ca9be2691595721de9e8adfc/pyrsistent-0.20.0-cp311-cp311-win32.whl", hash = "sha256:7d29c23bdf6e5438c755b941cef867ec2a4a172ceb9f50553b6ed70d50dfd656", size = 60775, upload-time = "2023-10-25T21:06:21.815Z" }, + { url = "https://files.pythonhosted.org/packages/98/87/c6ef52ff30388f357922d08de012abdd3dc61e09311d88967bdae23ab657/pyrsistent-0.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:59a89bccd615551391f3237e00006a26bcf98a4d18623a19909a2c48b8e986ee", size = 63306, upload-time = "2023-10-25T21:06:22.874Z" }, + { url = "https://files.pythonhosted.org/packages/15/ee/ff2ed52032ac1ce2e7ba19e79bd5b05d152ebfb77956cf08fcd6e8d760ea/pyrsistent-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e", size = 83537, upload-time = "2023-10-25T21:06:24.17Z" }, + { url = "https://files.pythonhosted.org/packages/80/f1/338d0050b24c3132bcfc79b68c3a5f54bce3d213ecef74d37e988b971d8a/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a14798c3005ec892bbada26485c2eea3b54109cb2533713e355c806891f63c5e", size = 122615, upload-time = "2023-10-25T21:06:25.815Z" }, + { url = "https://files.pythonhosted.org/packages/07/3a/e56d6431b713518094fae6ff833a04a6f49ad0fbe25fb7c0dc7408e19d20/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b14decb628fac50db5e02ee5a35a9c0772d20277824cfe845c8a8b717c15daa3", size = 122335, upload-time = "2023-10-25T21:06:28.631Z" }, + { url = "https://files.pythonhosted.org/packages/4a/bb/5f40a4d5e985a43b43f607250e766cdec28904682c3505eb0bd343a4b7db/pyrsistent-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e2c116cc804d9b09ce9814d17df5edf1df0c624aba3b43bc1ad90411487036d", size = 118510, upload-time = "2023-10-25T21:06:30.718Z" }, + { url = "https://files.pythonhosted.org/packages/1c/13/e6a22f40f5800af116c02c28e29f15c06aa41cb2036f6a64ab124647f28b/pyrsistent-0.20.0-cp312-cp312-win32.whl", hash = "sha256:e78d0c7c1e99a4a45c99143900ea0546025e41bb59ebc10182e947cf1ece9174", size = 60865, upload-time = "2023-10-25T21:06:32.742Z" }, + { url = "https://files.pythonhosted.org/packages/75/ef/2fa3b55023ec07c22682c957808f9a41836da4cd006b5f55ec76bf0fbfa6/pyrsistent-0.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:4021a7f963d88ccd15b523787d18ed5e5269ce57aa4037146a2377ff607ae87d", size = 63239, upload-time = "2023-10-25T21:06:34.035Z" }, + { url = "https://files.pythonhosted.org/packages/23/88/0acd180010aaed4987c85700b7cc17f9505f3edb4e5873e4dc67f613e338/pyrsistent-0.20.0-py3-none-any.whl", hash = "sha256:c55acc4733aad6560a7f5f818466631f07efc001fd023f34a6c203f8b6df0f0b", size = 58106, upload-time = "2023-10-25T21:06:54.387Z" }, ] [[package]] @@ -1968,9 +1692,9 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165 } +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249 }, + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, ] [[package]] @@ -1980,18 +1704,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 = "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]] @@ -2005,62 +1729,62 @@ dependencies = [ { name = "networkx" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/4b/e37e4e5d5ee1179694917b445768bdbfb084f5a59ecd38089d3413d4c70f/pyvis-0.3.2-py3-none-any.whl", hash = "sha256:5720c4ca8161dc5d9ab352015723abb7a8bb8fb443edeb07f7a322db34a97555", size = 756038 }, + { url = "https://files.pythonhosted.org/packages/ab/4b/e37e4e5d5ee1179694917b445768bdbfb084f5a59ecd38089d3413d4c70f/pyvis-0.3.2-py3-none-any.whl", hash = "sha256:5720c4ca8161dc5d9ab352015723abb7a8bb8fb443edeb07f7a322db34a97555", size = 756038, upload-time = "2023-02-24T20:29:46.758Z" }, ] [[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 }, - { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063 }, - { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973 }, - { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116 }, - { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011 }, - { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870 }, - { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089 }, - { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181 }, - { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, - { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, - { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, - { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 }, - { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 }, - { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 }, - { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159 }, - { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626 }, - { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613 }, - { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115 }, - { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427 }, - { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090 }, - { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246 }, - { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814 }, - { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809 }, - { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454 }, - { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355 }, - { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175 }, - { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228 }, - { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194 }, - { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429 }, - { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912 }, - { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108 }, - { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641 }, - { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901 }, - { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132 }, - { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261 }, - { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272 }, - { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923 }, - { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062 }, - { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341 }, +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, 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" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] [[package]] @@ -2070,55 +1794,55 @@ 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/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436 }, - { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301 }, - { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197 }, - { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275 }, - { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469 }, - { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961 }, - { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282 }, - { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468 }, - { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394 }, - { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964 }, - { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029 }, - { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541 }, - { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197 }, - { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175 }, - { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427 }, - { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929 }, - { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193 }, - { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388 }, - { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316 }, - { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472 }, - { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401 }, - { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170 }, - { 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/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, + { 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]] @@ -2134,87 +1858,87 @@ dependencies = [ { name = "protobuf" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/12/a2/d4cd7fbc41fef2b308f10ed3f9c5bb1cf40f338ff3a0e37692325ba28b77/qubed-0.3.1.tar.gz", hash = "sha256:fadcf4be1668f0cfc58fcf430a15613e0f53f0df4e07fd05694c9caba39e8258", size = 15152020 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/53/ae/8817f6db21335200da65434aaf1adb7ab86c38f7ac88cfbaaab9a50df335/qubed-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8a5ba2af717c5225b733ec6695bc848a6507e5590ea47310c36a204b03604da8", size = 392905 }, - { url = "https://files.pythonhosted.org/packages/3c/b2/253ddba74f5703677d5ee2232b1925578266e4023f7a3aaec6a17e5fd6b4/qubed-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2f0ac5b238de53baac98ea66e1e2a21fa729baf69789fb657b578e7d1dbda5d", size = 379845 }, - { url = "https://files.pythonhosted.org/packages/95/53/06c4c8f59b587b5ce087c796d362ecd57fea6a67fb73f380c7f8f4b5403e/qubed-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6de0a6783af5f6342f7f124c5a159fc0b84c78d95d2866801d9a280cba447a46", size = 417330 }, - { url = "https://files.pythonhosted.org/packages/a1/43/33caa7eefa46c21c6b9b3d3dd96f56772a46530a27577c63a273699b0bb1/qubed-0.3.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e2f16a2c6fbf52049cde9931d2cb6777e7b63c9a2e68b949a7bd06f6bbd6e66", size = 425131 }, - { url = "https://files.pythonhosted.org/packages/e9/01/7165694535259dfacff7d78377eb66b6e4187b69decbc81558a7170a8aa4/qubed-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2202d3f948231254d6c0ad19d10577ed663983c08b92a9ca8da00989465b013", size = 544973 }, - { url = "https://files.pythonhosted.org/packages/f3/85/9a7914ccfea96d24f15df68a93dbb99ff14b4e75f1dd326df58286b38a20/qubed-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a783825a8b5415ac4ba15d3495a8330a4d78882715b90869f66ae1ee147826a4", size = 453565 }, - { url = "https://files.pythonhosted.org/packages/b9/32/9c7cf964bea589da50bb572ee3bcd07641bf7e75961a14558dbee4b1a85c/qubed-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2edde67d3710ce780b85b18eab0749ebe1c77f92251e3d0c6efbd88ae7d661", size = 428033 }, - { url = "https://files.pythonhosted.org/packages/c4/2d/458d060268a5a38635994b854507e01038186a4d96cc5b5112680d70ca3c/qubed-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c576d6bf4fd6e6b6e44c5ef67b107fb3a0bf75bac89f25eeffdb7cd846e081cb", size = 451273 }, - { url = "https://files.pythonhosted.org/packages/be/2a/abfbeaa8590c39af25e71ff6c84fc3dbd77a18629046b2ae5dc05f1b5e9f/qubed-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ae99b8d994a26452b308ecc2e7f40b3209bdcc827a9966c9451dc6e124aab0a1", size = 592940 }, - { url = "https://files.pythonhosted.org/packages/59/33/84d0b4d21a5153131b4e8a321bb959ab0309a220a875001bcb3901393564/qubed-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b0819d34638e5a31891576feaa6889f4b16aa0f159876c83694281c86b628363", size = 694999 }, - { url = "https://files.pythonhosted.org/packages/6f/87/8d1dea898d0e70a46a9c788fee66c07fdfed08ab46b99849962458a1945e/qubed-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c9a047da1cd4ee8b6c8e84e8d26cae383c46033ae7af4c8b8641a36f5b1d9c43", size = 662808 }, - { url = "https://files.pythonhosted.org/packages/35/61/ac065cd10f6109e27b57b498d539be67ac1e594e7ede519124696d5175be/qubed-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1db61763554caf12adf40095fc6fb951bd115665ac692655ceed3c3dc9aaeeeb", size = 633806 }, - { url = "https://files.pythonhosted.org/packages/72/55/3761a4acd6169fed3cbe5cf809efada6ef14aa9c6cdb7007033a5f8f300b/qubed-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8a3734e6ee8954da87ebbf319402a0ab0e16e0d64a10b5b1a1e6ee13d0eec244", size = 274537 }, - { url = "https://files.pythonhosted.org/packages/f5/e1/ade8497e74afd3e6dae8ea1d79fec46ea0c284ae25e6f96ccb1b5c687496/qubed-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2f7ad49d36086114a9c48c5bbd774ec2fe9e4fbe7064e5af70eeeed1a1696444", size = 388382 }, - { url = "https://files.pythonhosted.org/packages/48/96/00629bd9796c7438b613dbeca97ae4349694ce45a9f1998ff45d3f3f7aab/qubed-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6832cc6010c2f0fffbca3751c0204876da03e5feae294d2896acaea9482f3e6", size = 376862 }, - { url = "https://files.pythonhosted.org/packages/f5/ae/b94eee7a2de48c1fe5fcff2abeb1f0b66f0e2959d8f8319b358814be896d/qubed-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f9273475076dafcb45bb8a510dc7a3a44c81d486edaf8fda88a3da414a318cb", size = 416993 }, - { url = "https://files.pythonhosted.org/packages/ea/cc/832aa8537960349d4bb043762d57171e1256611ebda815381cabb7f92ce1/qubed-0.3.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8825a2d7e0ddaf3b841f3a746669ca8a195a86e4a0a04a5a0ce26987f4b976b1", size = 424594 }, - { url = "https://files.pythonhosted.org/packages/d8/cd/21bc5fed290401da7774fc05b32cf045dae07b208b3169924ecbb59069fb/qubed-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0758cd417772386f7ba3972c6b4a23258569e654ef5cc77f15d0d19c1db8d7d8", size = 544629 }, - { url = "https://files.pythonhosted.org/packages/8b/f1/0c291803b21b811c1398d8d1133dc3fabc2d6a8aab1804c2b8788af5eaee/qubed-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5f3999551b6d888320002a7c7c978c75efbce8f2ad449a2ddafbf3df89f4cfd", size = 453413 }, - { url = "https://files.pythonhosted.org/packages/ac/84/8ce812bae0fc382715eaf831bc3d6fbdd10683e1c9d47e0b7f0b62df60b7/qubed-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71e33a38e02b632efb454ae2ca90e818201e6f6706485f2ac1d45e69f977f1c", size = 427902 }, - { url = "https://files.pythonhosted.org/packages/69/40/40845475c5153521783adbf80f2455fbb33ff625c29b6ba8e57555970afc/qubed-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9de33e0a06bde6068ef1f2dc1df354826c9a1e63e8263cba4be55db3e24dd7a", size = 450608 }, - { url = "https://files.pythonhosted.org/packages/6b/c0/100edf7a233d917f2979fbbe3a18e20d515df4f7564847452e71cc8e914b/qubed-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4ed3902eaf6ffaf248cdd680f52cc48ca7a9c6a259738c013c382d6d9ae9a0bf", size = 592941 }, - { url = "https://files.pythonhosted.org/packages/ec/50/18bd283574ad125576b267e37cb906399abb80a3b30eda70cf629ea0d65b/qubed-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fb8344fd7942086f1878c355f5fa3bfd7241022b3264384d72af9dc21083da9e", size = 694756 }, - { url = "https://files.pythonhosted.org/packages/c7/44/c8154bb943855c3def9537b9643a901e4be827581b1240a69846ff6811a5/qubed-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a3c85eebed4bc4b229793fb27a2cad19caddd36df4115cbe62e3f2762ac94a6", size = 662092 }, - { url = "https://files.pythonhosted.org/packages/19/69/017821dda7e5fe9b69cf5ae962668c632c83448f47c4be1a1256ac7c7fae/qubed-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2e2ad894d86d07181d7345c7555835c3fbbf16655a3adbc15368b44b407c570", size = 634032 }, - { url = "https://files.pythonhosted.org/packages/7b/be/3e853dd96781110b82e2d5ba51a14884ef7518a85578f19db1fdfee5f74e/qubed-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:71541f0d98df10e22e40c11f54867df3272436f87758e1c10c49d074571b821d", size = 274558 }, - { url = "https://files.pythonhosted.org/packages/f6/78/00920a7dab93468c6abd4364900372adf5a6e02373874fee8a048b173e2f/qubed-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0982545641cb7877c25ceefc788e2e0c5918b8d942419b1b3ebecf8ef64aa6c1", size = 388026 }, - { url = "https://files.pythonhosted.org/packages/17/32/763131474decd86745ba83d5c7c77dcb95fc6144e44d61ac26c4970c8bc3/qubed-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:26432bf22b7aeab036c763639c1874471eea8f58b69bcc789c746fcf6a0135e0", size = 376678 }, - { url = "https://files.pythonhosted.org/packages/ec/33/859744b54e692514c18d7d1c356b0dd49e01308990962b3d05edacf421f0/qubed-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5144c5f0e9929ef0219b5a06d43d58c5c111c165a21313f98892200d23a46e40", size = 417055 }, - { url = "https://files.pythonhosted.org/packages/7b/52/d3fcd58088922485566dac0c613ce54b5afb411a47ac1c0fc30f394e4d56/qubed-0.3.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7be7875347f1fab4342e503f69f2cf7ec77e23134c17ee119489a26c6abf81dc", size = 424312 }, - { url = "https://files.pythonhosted.org/packages/6b/46/0159a2f0f3a9ac907454cf5e7e9de53409470535feeab1f005a57cff9869/qubed-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6b44d86229cd4b43b524eab440ae8b3e4a1e7706815d9393c56bf02c09f25f4", size = 544218 }, - { url = "https://files.pythonhosted.org/packages/aa/06/b890c192d4d05a9ceeaacfec2c9ef1bc7f4ed5a9a88613442cd409a7103c/qubed-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0426c2cc15f126584a64df6e27ee0162d44d413493689218544b444972d67b2", size = 453095 }, - { url = "https://files.pythonhosted.org/packages/01/88/31e64cd98f079243157ced5d0a6ca3c0637e3e93982269bff5d6accd36fa/qubed-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04ed84be17ecff54a813b159b0ade5b6fe1daf9d0d3e8cce58160a71898de084", size = 427903 }, - { url = "https://files.pythonhosted.org/packages/a4/c3/6fcdde26e45c18dfaf67cad426580d9efd8b44b839db29755cc10dde7e52/qubed-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ee277521885d362a2f4282874aadaa7b5b021473cf18b62ccbab49d02490738", size = 450209 }, - { url = "https://files.pythonhosted.org/packages/87/63/8eb2f83b994ed59c6526f09b72fa8898188a0023ad0348d14bbcfdfc715c/qubed-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5e716bd15a5e614da853a0b835ad16a9c57a13f9243194abd4d7a4aabbf82dd0", size = 592620 }, - { url = "https://files.pythonhosted.org/packages/4a/be/4fe1e7634101016eef06843805633c9ec6b8e69bc40ef50190de4284271d/qubed-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:71f18b847fa9bc205368dcd176cc27e1c5c0cd4cfd74d3e2770ba422b3b14ff0", size = 694654 }, - { url = "https://files.pythonhosted.org/packages/7c/17/84cf9d4615ea0e29d8709346ffd5bed5bcfdb29baf8101949181c5239cc8/qubed-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:eeeb96bf930b2bd944c0b3145c18dda22673dcbe98af1b4fca0429c96eeefae3", size = 661802 }, - { url = "https://files.pythonhosted.org/packages/7c/27/4826d44a5a47ed4d3ba3d64f519d6ce65511239dbd613081a2b5b03a425e/qubed-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c2a3519538aae695c2a129006010d1291bf387e86b2477587dd421d07d0d111", size = 634066 }, - { url = "https://files.pythonhosted.org/packages/c9/cf/97f4ea7ca129eea1d97139e56c3af415f082f6b063a0d3da537c4cf77984/qubed-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:677f12a55d20a43beade986c45508668d93762072a7f8710dc768263832305f2", size = 274355 }, - { url = "https://files.pythonhosted.org/packages/1c/25/2d77b2aa954c7581dfe614e4edc9e213e0bc537a791567955cc89c908ea3/qubed-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bce5c3ca22b4125f7b2337072892562949c66b22060f1458f0ffc8914dea664", size = 415858 }, - { url = "https://files.pythonhosted.org/packages/cd/38/145f404396aedeb65ea110d14a74f02ab5f2c64fcf0441f196a8b509394c/qubed-0.3.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c7eeb24e4d156df188000388b8b93b8659b8ff56a3a0204eb868a63d43c9fb5d", size = 423639 }, - { url = "https://files.pythonhosted.org/packages/52/54/04beadee9ce2fb42d9cd9dead26aebfd614f01d9c57287b07406abfbc567/qubed-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57bb442de810879c2e0801b6b9e32e9ec30d37dbd02b464809523ea5294fe655", size = 543014 }, - { url = "https://files.pythonhosted.org/packages/e6/f6/37e2e0efb56b29f16d533b0bfa56fdbff94289e527e0a529e9a6547ef8b7/qubed-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:738ab71e1a714f3a3e3110e3eaac2778a5684f21515196b6b3c83843f9c5243b", size = 452627 }, - { url = "https://files.pythonhosted.org/packages/e9/aa/699a433b495665b99c4bb2dd37f4c8a15147dc955174d4a4eec3a2105fc7/qubed-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:af5e093933172f0820860b2fb4d909a6bb8b17043bf40c143088bf1529da0d26", size = 591409 }, - { url = "https://files.pythonhosted.org/packages/b2/fe/0d701edc6db7c16f50c3d41387791eae38c475d3f63677823ec5549a9b1d/qubed-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f0a5caf87d9fc853adde336759ef88e174be84b74bc29d582788fe70735dbba4", size = 694115 }, - { url = "https://files.pythonhosted.org/packages/dd/5b/3a91f3ee0de53bcdb4a6c80590243952acb891c088ddcaf066d4a209d0df/qubed-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8144ab517ef48f43c49b97d07c05d230015222f8c091bb1daac00ef62bfc74d9", size = 661144 }, - { url = "https://files.pythonhosted.org/packages/34/3e/28ab2031409540bc38f3f6e2db1d546b9d7c242755b6bf5c1ad4b7cab85a/qubed-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e164e030591f2ed0eb5525efe785ff04fc7080f0ef4ccfe8d83e25091006d709", size = 633167 }, - { url = "https://files.pythonhosted.org/packages/a3/90/8651f479d7a726bc5f25cb90f99f33420fec6355b71248eb9b266753bce9/qubed-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:49b0eec981057347991bc80b3886501ca45ee0e426843c0450a8b0710d444659", size = 387842 }, - { url = "https://files.pythonhosted.org/packages/1d/69/679e544a4fe1505b9f78f047ce1c81cf6db84b382c58d4a6ca46cfa48327/qubed-0.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97f9c034ae3ad1d7123e269c7fba225c20dbbaeebdd80803c77a69f3b010f8ff", size = 376202 }, - { url = "https://files.pythonhosted.org/packages/0b/1d/d4a5fa3a40e697f1ec8337e152cc241ec6aeff84f7514a6cfbee6b6536f5/qubed-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d154b12afffb5891beb06157b5bfc31e33d579d6a8682d866eb848bb18cc55f", size = 416737 }, - { url = "https://files.pythonhosted.org/packages/6e/66/efc34b57ee3d21334d6127b187e51a249a37484b707cbed393d464419d09/qubed-0.3.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac14223782c4f346167a23511408347cf2a5c109c07f4319a9eb8f08bb4cdd53", size = 424440 }, - { url = "https://files.pythonhosted.org/packages/c2/11/27f13777d9a4f2f0425c32cdc4f6fb528393e238768c185124abe15ff024/qubed-0.3.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e80a636152fa172ac298cb87bdae96412fa5f9e9a2149d1cb94bb4068508c941", size = 540728 }, - { url = "https://files.pythonhosted.org/packages/9a/9c/8ed6325f5c9c8ff96a41adef53f111bcf5dec51d2687afd2fac8504f19fc/qubed-0.3.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cb088a6846416ca092be5793c5191df97a94a3c3e5c43468be42b811ef14020", size = 453464 }, - { url = "https://files.pythonhosted.org/packages/b1/d6/c0dac0a00e3730130f897389d263042c26b2dd182cbffb2960b93c64007d/qubed-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a5e0cae1aba8bd95d020bc127bc404211c96a0ff66502f2bd5ff04a8fa06643", size = 427694 }, - { url = "https://files.pythonhosted.org/packages/de/e6/51e368c70bc5d3ee557b92e059fe1280330ed70d537cf8739ba71f316319/qubed-0.3.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:409c6475c99f28e372e48c9fc13284a48fffadfb6f54e531aad59d608457de41", size = 451222 }, - { url = "https://files.pythonhosted.org/packages/3a/74/5deba084e718c14509af8a4bb676785d91dc6516ac633e1b72dbf0598216/qubed-0.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:246332f045e37f6e88c773d4c8684441d0ec2a40c8ede7bae896c8ac6d513471", size = 592438 }, - { url = "https://files.pythonhosted.org/packages/28/c6/f41468881fde149c23df5bf568bac54bce9409374c76043ba19f159185c2/qubed-0.3.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2caf36b5cba258fb2f6301f879d4a16ad1a74648a0593d9f057c6b6aff603fd5", size = 694800 }, - { url = "https://files.pythonhosted.org/packages/f2/76/409605ac8bf26382d51d0e9df55344fa3cede74feaaebaf75a9fc07b221e/qubed-0.3.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4c5ce4d40840f45d2c359649a49a4fb271ec1650a162d20d5fea1c7106cb375d", size = 661966 }, - { url = "https://files.pythonhosted.org/packages/83/56/6efbbf4df4d483390c679456f87daed5e80c8f663d4d5065689ae6e8fc27/qubed-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5aa6c0d749a3186f1d4fb38e5ece4ba3513ee9cf24d182156e35fc7d637ce08", size = 634051 }, - { url = "https://files.pythonhosted.org/packages/d3/8b/65aef7336037d71978ea2e33da4a6c43262f2e31b84ee74c32e85f2aff4e/qubed-0.3.1-cp314-cp314-win32.whl", hash = "sha256:f4b7f53c722d0550a6be0e1ac148a79228f0cda2f3c32e9297b86bdd61c228d9", size = 257945 }, - { url = "https://files.pythonhosted.org/packages/9b/89/0249375839f15086a08f213d25c0aa3828e16808cf68bdb088eb01125520/qubed-0.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:c861104640c86883a5e0c8ae8682eb5eb417f4506282d36adfa9329bad26a3a7", size = 274944 }, - { url = "https://files.pythonhosted.org/packages/9a/3a/4694ed8a3a70b5ea484d8e82cb1988ddc5b19aebf9433ea5ced28263b64f/qubed-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1ba620950ed169f9d9652597181b03fe37b7febef65c18956c5032006d06886", size = 416016 }, - { url = "https://files.pythonhosted.org/packages/43/2c/56fcd7992f12856ffb6b01aa3f17b0e799ddeec6cae97eb5e632413750c3/qubed-0.3.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f76e96ae183a5f72a03f36681e995db7b9b6ecd2bce6b880135ef5f0dba51ad5", size = 423689 }, - { url = "https://files.pythonhosted.org/packages/8e/40/0a3d024e77ec6223e7256dcb92013a1ba139e569cba5dcd1470679171f1a/qubed-0.3.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d256f1db00336ce347e1d646d2e1065bdfe1d8de9b06cc60ab1e81aa5a135363", size = 544069 }, - { url = "https://files.pythonhosted.org/packages/51/de/c32a46fbe272b436681bdda6d3073308598e98af4a74f6c26e1d07c0ddf4/qubed-0.3.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c38414c20f17128d0c62de60515e54d280fb35c13a576aa0d4bbf8e8b6b7ff7", size = 452810 }, - { url = "https://files.pythonhosted.org/packages/f5/e9/3059877538ad438428d12200141e155a5e3521fbeacb361a7d95c187fb2d/qubed-0.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6dba1d9c479c79605c1d0ddb841f93b5fac94f80085a9cbdca3319b1111baadd", size = 591547 }, - { url = "https://files.pythonhosted.org/packages/2d/0d/10ac0b1f602b6f54bc57b49bb9e672b9dacb70fff960206bcd52aff0de3b/qubed-0.3.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ee0f20cd860ca67136765ef12cdcb04fafc15c0eab33ed9d733603d237d5e328", size = 693845 }, - { url = "https://files.pythonhosted.org/packages/5f/47/3ed547c0fce3f7d5e794f739783ee758f72061b792053f68d99db89d852f/qubed-0.3.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9923d183c0c71a8c2a1b3e95a40df128141cedd7cd21f73c9d9a2aa34ad58f5a", size = 661304 }, - { url = "https://files.pythonhosted.org/packages/b7/cc/fb5e887dfe9561a96bcd9969f8412736aaf8b40ea7fc76edb7f6791b7787/qubed-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5fcee6ee49265f43fb986860f105b7a2c735e8f7c80feeb02f618f1354ab1", size = 633291 }, - { url = "https://files.pythonhosted.org/packages/8a/a4/61c0893c62b70b3ae7096b51071134939ce3a7a8dc6d3be3485a14c704ef/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0525ea3e7286a2e1306c2d53cde122d596fe32c97c4b77ffb791647b6d06df40", size = 417314 }, - { url = "https://files.pythonhosted.org/packages/97/88/75d5cea6fa9af6b25e93a6fb6775199601020193c813eba624d626265b6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97b8e5a1ceabf68032b8c38a1a0fa2b425e2f137e1ae0b29d27a9b2c640d2923", size = 424549 }, - { url = "https://files.pythonhosted.org/packages/0a/79/c14068df38c8bcadb81c204e06eb4f33388c40061792346b46c55864ec6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:536e9479355758596d552314b29185f8e9606ee1fa7551b9ad71d575fe41bfa0", size = 543966 }, - { url = "https://files.pythonhosted.org/packages/34/6d/ead34b0f6aa8049b29db20bdc38c3378a1a71e6a4b3ef4d4b2b658b54774/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:288446a11cb22d194322858ebed1882d48cde40e65c40a5b2bee4d1eb204a7e0", size = 453255 }, - { url = "https://files.pythonhosted.org/packages/6c/69/e0616ec49e8bbf7b2f365b93336b63ade3e10c377a0f7921f4f78da1cc5b/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:164eed7d512094c9f6bedcbf62dcc15d78cfcf42133fb594fc68494dac0dde9b", size = 427645 }, - { url = "https://files.pythonhosted.org/packages/ed/34/3455baea73fd18b29884c9e30806b20fffaccff1b57d533091e6cf849b4a/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48790481e503e6e65d0acd2afdc085bef6cc9f876d9d6ff791c1f6ece99b1e9f", size = 450995 }, - { url = "https://files.pythonhosted.org/packages/97/d2/57842a201a430afa1f6eec433f51cfcd08601486daaf074b42a1a4047314/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c7583848ea8e79d7b78427979fe7100fd0c271cf14efadfa5cd25e9878c67850", size = 593098 }, - { url = "https://files.pythonhosted.org/packages/09/b3/dacad16f12ce515f8ad3c61ed7b6d1749f90b9c36b1a0947ef5bace5ed0c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:ab4475288640f2e380f3704fb7b44f4e6d8a8987041f6fb3cc76ecdc02e333cd", size = 694846 }, - { url = "https://files.pythonhosted.org/packages/84/e6/78473835a64ba33c2e6963c120eeff496182f81006f955c19ca7ea17e25f/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:25d8d3603b16e3202b53145150bcb8ebedce14fc42fd076d17feaf3a0de897a2", size = 662539 }, - { url = "https://files.pythonhosted.org/packages/60/7f/ab8d6582ba660b03da7617bab310f1db095a3ce622fdfcc5c2e50778208c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:cd90899b3182ecf6bfac689664be37726a1f28d06200a8b15b22fdc3b79cd72b", size = 633528 }, +sdist = { url = "https://files.pythonhosted.org/packages/12/a2/d4cd7fbc41fef2b308f10ed3f9c5bb1cf40f338ff3a0e37692325ba28b77/qubed-0.3.1.tar.gz", hash = "sha256:fadcf4be1668f0cfc58fcf430a15613e0f53f0df4e07fd05694c9caba39e8258", size = 15152020, upload-time = "2026-02-04T13:27:38.081Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/ae/8817f6db21335200da65434aaf1adb7ab86c38f7ac88cfbaaab9a50df335/qubed-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8a5ba2af717c5225b733ec6695bc848a6507e5590ea47310c36a204b03604da8", size = 392905, upload-time = "2026-02-04T13:26:57.846Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/253ddba74f5703677d5ee2232b1925578266e4023f7a3aaec6a17e5fd6b4/qubed-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2f0ac5b238de53baac98ea66e1e2a21fa729baf69789fb657b578e7d1dbda5d", size = 379845, upload-time = "2026-02-04T13:26:53.467Z" }, + { url = "https://files.pythonhosted.org/packages/95/53/06c4c8f59b587b5ce087c796d362ecd57fea6a67fb73f380c7f8f4b5403e/qubed-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6de0a6783af5f6342f7f124c5a159fc0b84c78d95d2866801d9a280cba447a46", size = 417330, upload-time = "2026-02-04T13:26:01.262Z" }, + { url = "https://files.pythonhosted.org/packages/a1/43/33caa7eefa46c21c6b9b3d3dd96f56772a46530a27577c63a273699b0bb1/qubed-0.3.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e2f16a2c6fbf52049cde9931d2cb6777e7b63c9a2e68b949a7bd06f6bbd6e66", size = 425131, upload-time = "2026-02-04T13:26:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/e9/01/7165694535259dfacff7d78377eb66b6e4187b69decbc81558a7170a8aa4/qubed-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2202d3f948231254d6c0ad19d10577ed663983c08b92a9ca8da00989465b013", size = 544973, upload-time = "2026-02-04T13:26:22.725Z" }, + { url = "https://files.pythonhosted.org/packages/f3/85/9a7914ccfea96d24f15df68a93dbb99ff14b4e75f1dd326df58286b38a20/qubed-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a783825a8b5415ac4ba15d3495a8330a4d78882715b90869f66ae1ee147826a4", size = 453565, upload-time = "2026-02-04T13:26:34.094Z" }, + { url = "https://files.pythonhosted.org/packages/b9/32/9c7cf964bea589da50bb572ee3bcd07641bf7e75961a14558dbee4b1a85c/qubed-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2edde67d3710ce780b85b18eab0749ebe1c77f92251e3d0c6efbd88ae7d661", size = 428033, upload-time = "2026-02-04T13:26:48.038Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2d/458d060268a5a38635994b854507e01038186a4d96cc5b5112680d70ca3c/qubed-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c576d6bf4fd6e6b6e44c5ef67b107fb3a0bf75bac89f25eeffdb7cd846e081cb", size = 451273, upload-time = "2026-02-04T13:26:41.923Z" }, + { url = "https://files.pythonhosted.org/packages/be/2a/abfbeaa8590c39af25e71ff6c84fc3dbd77a18629046b2ae5dc05f1b5e9f/qubed-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ae99b8d994a26452b308ecc2e7f40b3209bdcc827a9966c9451dc6e124aab0a1", size = 592940, upload-time = "2026-02-04T13:27:02.719Z" }, + { url = "https://files.pythonhosted.org/packages/59/33/84d0b4d21a5153131b4e8a321bb959ab0309a220a875001bcb3901393564/qubed-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b0819d34638e5a31891576feaa6889f4b16aa0f159876c83694281c86b628363", size = 694999, upload-time = "2026-02-04T13:27:10.953Z" }, + { url = "https://files.pythonhosted.org/packages/6f/87/8d1dea898d0e70a46a9c788fee66c07fdfed08ab46b99849962458a1945e/qubed-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c9a047da1cd4ee8b6c8e84e8d26cae383c46033ae7af4c8b8641a36f5b1d9c43", size = 662808, upload-time = "2026-02-04T13:27:20.788Z" }, + { url = "https://files.pythonhosted.org/packages/35/61/ac065cd10f6109e27b57b498d539be67ac1e594e7ede519124696d5175be/qubed-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1db61763554caf12adf40095fc6fb951bd115665ac692655ceed3c3dc9aaeeeb", size = 633806, upload-time = "2026-02-04T13:27:29.057Z" }, + { url = "https://files.pythonhosted.org/packages/72/55/3761a4acd6169fed3cbe5cf809efada6ef14aa9c6cdb7007033a5f8f300b/qubed-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8a3734e6ee8954da87ebbf319402a0ab0e16e0d64a10b5b1a1e6ee13d0eec244", size = 274537, upload-time = "2026-02-04T13:27:40.483Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e1/ade8497e74afd3e6dae8ea1d79fec46ea0c284ae25e6f96ccb1b5c687496/qubed-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2f7ad49d36086114a9c48c5bbd774ec2fe9e4fbe7064e5af70eeeed1a1696444", size = 388382, upload-time = "2026-02-04T13:26:58.926Z" }, + { url = "https://files.pythonhosted.org/packages/48/96/00629bd9796c7438b613dbeca97ae4349694ce45a9f1998ff45d3f3f7aab/qubed-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6832cc6010c2f0fffbca3751c0204876da03e5feae294d2896acaea9482f3e6", size = 376862, upload-time = "2026-02-04T13:26:54.841Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ae/b94eee7a2de48c1fe5fcff2abeb1f0b66f0e2959d8f8319b358814be896d/qubed-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f9273475076dafcb45bb8a510dc7a3a44c81d486edaf8fda88a3da414a318cb", size = 416993, upload-time = "2026-02-04T13:26:02.472Z" }, + { url = "https://files.pythonhosted.org/packages/ea/cc/832aa8537960349d4bb043762d57171e1256611ebda815381cabb7f92ce1/qubed-0.3.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8825a2d7e0ddaf3b841f3a746669ca8a195a86e4a0a04a5a0ce26987f4b976b1", size = 424594, upload-time = "2026-02-04T13:26:12.328Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cd/21bc5fed290401da7774fc05b32cf045dae07b208b3169924ecbb59069fb/qubed-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0758cd417772386f7ba3972c6b4a23258569e654ef5cc77f15d0d19c1db8d7d8", size = 544629, upload-time = "2026-02-04T13:26:23.789Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f1/0c291803b21b811c1398d8d1133dc3fabc2d6a8aab1804c2b8788af5eaee/qubed-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5f3999551b6d888320002a7c7c978c75efbce8f2ad449a2ddafbf3df89f4cfd", size = 453413, upload-time = "2026-02-04T13:26:35.125Z" }, + { url = "https://files.pythonhosted.org/packages/ac/84/8ce812bae0fc382715eaf831bc3d6fbdd10683e1c9d47e0b7f0b62df60b7/qubed-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71e33a38e02b632efb454ae2ca90e818201e6f6706485f2ac1d45e69f977f1c", size = 427902, upload-time = "2026-02-04T13:26:49.156Z" }, + { url = "https://files.pythonhosted.org/packages/69/40/40845475c5153521783adbf80f2455fbb33ff625c29b6ba8e57555970afc/qubed-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9de33e0a06bde6068ef1f2dc1df354826c9a1e63e8263cba4be55db3e24dd7a", size = 450608, upload-time = "2026-02-04T13:26:42.944Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c0/100edf7a233d917f2979fbbe3a18e20d515df4f7564847452e71cc8e914b/qubed-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4ed3902eaf6ffaf248cdd680f52cc48ca7a9c6a259738c013c382d6d9ae9a0bf", size = 592941, upload-time = "2026-02-04T13:27:03.839Z" }, + { url = "https://files.pythonhosted.org/packages/ec/50/18bd283574ad125576b267e37cb906399abb80a3b30eda70cf629ea0d65b/qubed-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fb8344fd7942086f1878c355f5fa3bfd7241022b3264384d72af9dc21083da9e", size = 694756, upload-time = "2026-02-04T13:27:12.072Z" }, + { url = "https://files.pythonhosted.org/packages/c7/44/c8154bb943855c3def9537b9643a901e4be827581b1240a69846ff6811a5/qubed-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a3c85eebed4bc4b229793fb27a2cad19caddd36df4115cbe62e3f2762ac94a6", size = 662092, upload-time = "2026-02-04T13:27:21.837Z" }, + { url = "https://files.pythonhosted.org/packages/19/69/017821dda7e5fe9b69cf5ae962668c632c83448f47c4be1a1256ac7c7fae/qubed-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2e2ad894d86d07181d7345c7555835c3fbbf16655a3adbc15368b44b407c570", size = 634032, upload-time = "2026-02-04T13:27:30.397Z" }, + { url = "https://files.pythonhosted.org/packages/7b/be/3e853dd96781110b82e2d5ba51a14884ef7518a85578f19db1fdfee5f74e/qubed-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:71541f0d98df10e22e40c11f54867df3272436f87758e1c10c49d074571b821d", size = 274558, upload-time = "2026-02-04T13:27:41.563Z" }, + { url = "https://files.pythonhosted.org/packages/f6/78/00920a7dab93468c6abd4364900372adf5a6e02373874fee8a048b173e2f/qubed-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0982545641cb7877c25ceefc788e2e0c5918b8d942419b1b3ebecf8ef64aa6c1", size = 388026, upload-time = "2026-02-04T13:26:59.877Z" }, + { url = "https://files.pythonhosted.org/packages/17/32/763131474decd86745ba83d5c7c77dcb95fc6144e44d61ac26c4970c8bc3/qubed-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:26432bf22b7aeab036c763639c1874471eea8f58b69bcc789c746fcf6a0135e0", size = 376678, upload-time = "2026-02-04T13:26:55.884Z" }, + { url = "https://files.pythonhosted.org/packages/ec/33/859744b54e692514c18d7d1c356b0dd49e01308990962b3d05edacf421f0/qubed-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5144c5f0e9929ef0219b5a06d43d58c5c111c165a21313f98892200d23a46e40", size = 417055, upload-time = "2026-02-04T13:26:03.989Z" }, + { url = "https://files.pythonhosted.org/packages/7b/52/d3fcd58088922485566dac0c613ce54b5afb411a47ac1c0fc30f394e4d56/qubed-0.3.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7be7875347f1fab4342e503f69f2cf7ec77e23134c17ee119489a26c6abf81dc", size = 424312, upload-time = "2026-02-04T13:26:13.767Z" }, + { url = "https://files.pythonhosted.org/packages/6b/46/0159a2f0f3a9ac907454cf5e7e9de53409470535feeab1f005a57cff9869/qubed-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6b44d86229cd4b43b524eab440ae8b3e4a1e7706815d9393c56bf02c09f25f4", size = 544218, upload-time = "2026-02-04T13:26:25.249Z" }, + { url = "https://files.pythonhosted.org/packages/aa/06/b890c192d4d05a9ceeaacfec2c9ef1bc7f4ed5a9a88613442cd409a7103c/qubed-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0426c2cc15f126584a64df6e27ee0162d44d413493689218544b444972d67b2", size = 453095, upload-time = "2026-02-04T13:26:36.147Z" }, + { url = "https://files.pythonhosted.org/packages/01/88/31e64cd98f079243157ced5d0a6ca3c0637e3e93982269bff5d6accd36fa/qubed-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04ed84be17ecff54a813b159b0ade5b6fe1daf9d0d3e8cce58160a71898de084", size = 427903, upload-time = "2026-02-04T13:26:50.046Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c3/6fcdde26e45c18dfaf67cad426580d9efd8b44b839db29755cc10dde7e52/qubed-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ee277521885d362a2f4282874aadaa7b5b021473cf18b62ccbab49d02490738", size = 450209, upload-time = "2026-02-04T13:26:44.927Z" }, + { url = "https://files.pythonhosted.org/packages/87/63/8eb2f83b994ed59c6526f09b72fa8898188a0023ad0348d14bbcfdfc715c/qubed-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5e716bd15a5e614da853a0b835ad16a9c57a13f9243194abd4d7a4aabbf82dd0", size = 592620, upload-time = "2026-02-04T13:27:04.995Z" }, + { url = "https://files.pythonhosted.org/packages/4a/be/4fe1e7634101016eef06843805633c9ec6b8e69bc40ef50190de4284271d/qubed-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:71f18b847fa9bc205368dcd176cc27e1c5c0cd4cfd74d3e2770ba422b3b14ff0", size = 694654, upload-time = "2026-02-04T13:27:13.7Z" }, + { url = "https://files.pythonhosted.org/packages/7c/17/84cf9d4615ea0e29d8709346ffd5bed5bcfdb29baf8101949181c5239cc8/qubed-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:eeeb96bf930b2bd944c0b3145c18dda22673dcbe98af1b4fca0429c96eeefae3", size = 661802, upload-time = "2026-02-04T13:27:22.87Z" }, + { url = "https://files.pythonhosted.org/packages/7c/27/4826d44a5a47ed4d3ba3d64f519d6ce65511239dbd613081a2b5b03a425e/qubed-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c2a3519538aae695c2a129006010d1291bf387e86b2477587dd421d07d0d111", size = 634066, upload-time = "2026-02-04T13:27:31.613Z" }, + { url = "https://files.pythonhosted.org/packages/c9/cf/97f4ea7ca129eea1d97139e56c3af415f082f6b063a0d3da537c4cf77984/qubed-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:677f12a55d20a43beade986c45508668d93762072a7f8710dc768263832305f2", size = 274355, upload-time = "2026-02-04T13:27:42.559Z" }, + { url = "https://files.pythonhosted.org/packages/1c/25/2d77b2aa954c7581dfe614e4edc9e213e0bc537a791567955cc89c908ea3/qubed-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bce5c3ca22b4125f7b2337072892562949c66b22060f1458f0ffc8914dea664", size = 415858, upload-time = "2026-02-04T13:26:05.072Z" }, + { url = "https://files.pythonhosted.org/packages/cd/38/145f404396aedeb65ea110d14a74f02ab5f2c64fcf0441f196a8b509394c/qubed-0.3.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c7eeb24e4d156df188000388b8b93b8659b8ff56a3a0204eb868a63d43c9fb5d", size = 423639, upload-time = "2026-02-04T13:26:15.08Z" }, + { url = "https://files.pythonhosted.org/packages/52/54/04beadee9ce2fb42d9cd9dead26aebfd614f01d9c57287b07406abfbc567/qubed-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57bb442de810879c2e0801b6b9e32e9ec30d37dbd02b464809523ea5294fe655", size = 543014, upload-time = "2026-02-04T13:26:27.385Z" }, + { url = "https://files.pythonhosted.org/packages/e6/f6/37e2e0efb56b29f16d533b0bfa56fdbff94289e527e0a529e9a6547ef8b7/qubed-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:738ab71e1a714f3a3e3110e3eaac2778a5684f21515196b6b3c83843f9c5243b", size = 452627, upload-time = "2026-02-04T13:26:37.269Z" }, + { url = "https://files.pythonhosted.org/packages/e9/aa/699a433b495665b99c4bb2dd37f4c8a15147dc955174d4a4eec3a2105fc7/qubed-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:af5e093933172f0820860b2fb4d909a6bb8b17043bf40c143088bf1529da0d26", size = 591409, upload-time = "2026-02-04T13:27:06.111Z" }, + { url = "https://files.pythonhosted.org/packages/b2/fe/0d701edc6db7c16f50c3d41387791eae38c475d3f63677823ec5549a9b1d/qubed-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f0a5caf87d9fc853adde336759ef88e174be84b74bc29d582788fe70735dbba4", size = 694115, upload-time = "2026-02-04T13:27:14.784Z" }, + { url = "https://files.pythonhosted.org/packages/dd/5b/3a91f3ee0de53bcdb4a6c80590243952acb891c088ddcaf066d4a209d0df/qubed-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8144ab517ef48f43c49b97d07c05d230015222f8c091bb1daac00ef62bfc74d9", size = 661144, upload-time = "2026-02-04T13:27:24.061Z" }, + { url = "https://files.pythonhosted.org/packages/34/3e/28ab2031409540bc38f3f6e2db1d546b9d7c242755b6bf5c1ad4b7cab85a/qubed-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e164e030591f2ed0eb5525efe785ff04fc7080f0ef4ccfe8d83e25091006d709", size = 633167, upload-time = "2026-02-04T13:27:33.18Z" }, + { url = "https://files.pythonhosted.org/packages/a3/90/8651f479d7a726bc5f25cb90f99f33420fec6355b71248eb9b266753bce9/qubed-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:49b0eec981057347991bc80b3886501ca45ee0e426843c0450a8b0710d444659", size = 387842, upload-time = "2026-02-04T13:27:00.858Z" }, + { url = "https://files.pythonhosted.org/packages/1d/69/679e544a4fe1505b9f78f047ce1c81cf6db84b382c58d4a6ca46cfa48327/qubed-0.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97f9c034ae3ad1d7123e269c7fba225c20dbbaeebdd80803c77a69f3b010f8ff", size = 376202, upload-time = "2026-02-04T13:26:56.852Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1d/d4a5fa3a40e697f1ec8337e152cc241ec6aeff84f7514a6cfbee6b6536f5/qubed-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d154b12afffb5891beb06157b5bfc31e33d579d6a8682d866eb848bb18cc55f", size = 416737, upload-time = "2026-02-04T13:26:06.481Z" }, + { url = "https://files.pythonhosted.org/packages/6e/66/efc34b57ee3d21334d6127b187e51a249a37484b707cbed393d464419d09/qubed-0.3.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac14223782c4f346167a23511408347cf2a5c109c07f4319a9eb8f08bb4cdd53", size = 424440, upload-time = "2026-02-04T13:26:16.861Z" }, + { url = "https://files.pythonhosted.org/packages/c2/11/27f13777d9a4f2f0425c32cdc4f6fb528393e238768c185124abe15ff024/qubed-0.3.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e80a636152fa172ac298cb87bdae96412fa5f9e9a2149d1cb94bb4068508c941", size = 540728, upload-time = "2026-02-04T13:26:28.82Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9c/8ed6325f5c9c8ff96a41adef53f111bcf5dec51d2687afd2fac8504f19fc/qubed-0.3.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cb088a6846416ca092be5793c5191df97a94a3c3e5c43468be42b811ef14020", size = 453464, upload-time = "2026-02-04T13:26:38.885Z" }, + { url = "https://files.pythonhosted.org/packages/b1/d6/c0dac0a00e3730130f897389d263042c26b2dd182cbffb2960b93c64007d/qubed-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a5e0cae1aba8bd95d020bc127bc404211c96a0ff66502f2bd5ff04a8fa06643", size = 427694, upload-time = "2026-02-04T13:26:51.557Z" }, + { url = "https://files.pythonhosted.org/packages/de/e6/51e368c70bc5d3ee557b92e059fe1280330ed70d537cf8739ba71f316319/qubed-0.3.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:409c6475c99f28e372e48c9fc13284a48fffadfb6f54e531aad59d608457de41", size = 451222, upload-time = "2026-02-04T13:26:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/3a/74/5deba084e718c14509af8a4bb676785d91dc6516ac633e1b72dbf0598216/qubed-0.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:246332f045e37f6e88c773d4c8684441d0ec2a40c8ede7bae896c8ac6d513471", size = 592438, upload-time = "2026-02-04T13:27:07.033Z" }, + { url = "https://files.pythonhosted.org/packages/28/c6/f41468881fde149c23df5bf568bac54bce9409374c76043ba19f159185c2/qubed-0.3.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2caf36b5cba258fb2f6301f879d4a16ad1a74648a0593d9f057c6b6aff603fd5", size = 694800, upload-time = "2026-02-04T13:27:16.309Z" }, + { url = "https://files.pythonhosted.org/packages/f2/76/409605ac8bf26382d51d0e9df55344fa3cede74feaaebaf75a9fc07b221e/qubed-0.3.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4c5ce4d40840f45d2c359649a49a4fb271ec1650a162d20d5fea1c7106cb375d", size = 661966, upload-time = "2026-02-04T13:27:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/83/56/6efbbf4df4d483390c679456f87daed5e80c8f663d4d5065689ae6e8fc27/qubed-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5aa6c0d749a3186f1d4fb38e5ece4ba3513ee9cf24d182156e35fc7d637ce08", size = 634051, upload-time = "2026-02-04T13:27:34.241Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8b/65aef7336037d71978ea2e33da4a6c43262f2e31b84ee74c32e85f2aff4e/qubed-0.3.1-cp314-cp314-win32.whl", hash = "sha256:f4b7f53c722d0550a6be0e1ac148a79228f0cda2f3c32e9297b86bdd61c228d9", size = 257945, upload-time = "2026-02-04T13:27:44.705Z" }, + { url = "https://files.pythonhosted.org/packages/9b/89/0249375839f15086a08f213d25c0aa3828e16808cf68bdb088eb01125520/qubed-0.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:c861104640c86883a5e0c8ae8682eb5eb417f4506282d36adfa9329bad26a3a7", size = 274944, upload-time = "2026-02-04T13:27:43.771Z" }, + { url = "https://files.pythonhosted.org/packages/9a/3a/4694ed8a3a70b5ea484d8e82cb1988ddc5b19aebf9433ea5ced28263b64f/qubed-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1ba620950ed169f9d9652597181b03fe37b7febef65c18956c5032006d06886", size = 416016, upload-time = "2026-02-04T13:26:07.498Z" }, + { url = "https://files.pythonhosted.org/packages/43/2c/56fcd7992f12856ffb6b01aa3f17b0e799ddeec6cae97eb5e632413750c3/qubed-0.3.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f76e96ae183a5f72a03f36681e995db7b9b6ecd2bce6b880135ef5f0dba51ad5", size = 423689, upload-time = "2026-02-04T13:26:18.458Z" }, + { url = "https://files.pythonhosted.org/packages/8e/40/0a3d024e77ec6223e7256dcb92013a1ba139e569cba5dcd1470679171f1a/qubed-0.3.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d256f1db00336ce347e1d646d2e1065bdfe1d8de9b06cc60ab1e81aa5a135363", size = 544069, upload-time = "2026-02-04T13:26:30.318Z" }, + { url = "https://files.pythonhosted.org/packages/51/de/c32a46fbe272b436681bdda6d3073308598e98af4a74f6c26e1d07c0ddf4/qubed-0.3.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c38414c20f17128d0c62de60515e54d280fb35c13a576aa0d4bbf8e8b6b7ff7", size = 452810, upload-time = "2026-02-04T13:26:39.827Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e9/3059877538ad438428d12200141e155a5e3521fbeacb361a7d95c187fb2d/qubed-0.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6dba1d9c479c79605c1d0ddb841f93b5fac94f80085a9cbdca3319b1111baadd", size = 591547, upload-time = "2026-02-04T13:27:08.312Z" }, + { url = "https://files.pythonhosted.org/packages/2d/0d/10ac0b1f602b6f54bc57b49bb9e672b9dacb70fff960206bcd52aff0de3b/qubed-0.3.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ee0f20cd860ca67136765ef12cdcb04fafc15c0eab33ed9d733603d237d5e328", size = 693845, upload-time = "2026-02-04T13:27:17.444Z" }, + { url = "https://files.pythonhosted.org/packages/5f/47/3ed547c0fce3f7d5e794f739783ee758f72061b792053f68d99db89d852f/qubed-0.3.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9923d183c0c71a8c2a1b3e95a40df128141cedd7cd21f73c9d9a2aa34ad58f5a", size = 661304, upload-time = "2026-02-04T13:27:26.375Z" }, + { url = "https://files.pythonhosted.org/packages/b7/cc/fb5e887dfe9561a96bcd9969f8412736aaf8b40ea7fc76edb7f6791b7787/qubed-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5fcee6ee49265f43fb986860f105b7a2c735e8f7c80feeb02f618f1354ab1", size = 633291, upload-time = "2026-02-04T13:27:35.261Z" }, + { url = "https://files.pythonhosted.org/packages/8a/a4/61c0893c62b70b3ae7096b51071134939ce3a7a8dc6d3be3485a14c704ef/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0525ea3e7286a2e1306c2d53cde122d596fe32c97c4b77ffb791647b6d06df40", size = 417314, upload-time = "2026-02-04T13:26:10.193Z" }, + { url = "https://files.pythonhosted.org/packages/97/88/75d5cea6fa9af6b25e93a6fb6775199601020193c813eba624d626265b6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97b8e5a1ceabf68032b8c38a1a0fa2b425e2f137e1ae0b29d27a9b2c640d2923", size = 424549, upload-time = "2026-02-04T13:26:21.319Z" }, + { url = "https://files.pythonhosted.org/packages/0a/79/c14068df38c8bcadb81c204e06eb4f33388c40061792346b46c55864ec6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:536e9479355758596d552314b29185f8e9606ee1fa7551b9ad71d575fe41bfa0", size = 543966, upload-time = "2026-02-04T13:26:32.643Z" }, + { url = "https://files.pythonhosted.org/packages/34/6d/ead34b0f6aa8049b29db20bdc38c3378a1a71e6a4b3ef4d4b2b658b54774/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:288446a11cb22d194322858ebed1882d48cde40e65c40a5b2bee4d1eb204a7e0", size = 453255, upload-time = "2026-02-04T13:26:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/6c/69/e0616ec49e8bbf7b2f365b93336b63ade3e10c377a0f7921f4f78da1cc5b/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:164eed7d512094c9f6bedcbf62dcc15d78cfcf42133fb594fc68494dac0dde9b", size = 427645, upload-time = "2026-02-04T13:26:52.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/34/3455baea73fd18b29884c9e30806b20fffaccff1b57d533091e6cf849b4a/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48790481e503e6e65d0acd2afdc085bef6cc9f876d9d6ff791c1f6ece99b1e9f", size = 450995, upload-time = "2026-02-04T13:26:47.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/d2/57842a201a430afa1f6eec433f51cfcd08601486daaf074b42a1a4047314/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c7583848ea8e79d7b78427979fe7100fd0c271cf14efadfa5cd25e9878c67850", size = 593098, upload-time = "2026-02-04T13:27:09.828Z" }, + { url = "https://files.pythonhosted.org/packages/09/b3/dacad16f12ce515f8ad3c61ed7b6d1749f90b9c36b1a0947ef5bace5ed0c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:ab4475288640f2e380f3704fb7b44f4e6d8a8987041f6fb3cc76ecdc02e333cd", size = 694846, upload-time = "2026-02-04T13:27:18.574Z" }, + { url = "https://files.pythonhosted.org/packages/84/e6/78473835a64ba33c2e6963c120eeff496182f81006f955c19ca7ea17e25f/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:25d8d3603b16e3202b53145150bcb8ebedce14fc42fd076d17feaf3a0de897a2", size = 662539, upload-time = "2026-02-04T13:27:27.404Z" }, + { url = "https://files.pythonhosted.org/packages/60/7f/ab8d6582ba660b03da7617bab310f1db095a3ce622fdfcc5c2e50778208c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:cd90899b3182ecf6bfac689664be37726a1f28d06200a8b15b22fdc3b79cd72b", size = 633528, upload-time = "2026-02-04T13:27:36.452Z" }, ] [[package]] @@ -2226,9 +1950,9 @@ dependencies = [ { name = "rpds-py" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -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]] @@ -2241,9 +1965,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856 } +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075 }, + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, ] [[package]] @@ -2254,9 +1978,9 @@ dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680 } +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654 }, + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, ] [[package]] @@ -2266,146 +1990,146 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "rich" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6a/e5/1064c43203a357d668cd42435f7a15fe6af51512d85b2104fecb937aa861/rich_argparse-1.8.0.tar.gz", hash = "sha256:679df3d832fa94ad6e4bdb07ded088cd7ea2dddc58ae9b2b46346a40b06cbc0c", size = 38940 } +sdist = { url = "https://files.pythonhosted.org/packages/6a/e5/1064c43203a357d668cd42435f7a15fe6af51512d85b2104fecb937aa861/rich_argparse-1.8.0.tar.gz", hash = "sha256:679df3d832fa94ad6e4bdb07ded088cd7ea2dddc58ae9b2b46346a40b06cbc0c", size = 38940, upload-time = "2026-05-01T15:18:43.604Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl", hash = "sha256:d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142", size = 25616 }, + { url = "https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl", hash = "sha256:d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142", size = 25616, upload-time = "2026-05-01T15:18:42.395Z" }, ] [[package]] name = "rpds-py" version = "2026.5.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609 }, - { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460 }, - { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031 }, - { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121 }, - { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026 }, - { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865 }, - { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012 }, - { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111 }, - { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225 }, - { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487 }, - { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798 }, - { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053 }, - { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390 }, - { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097 }, - { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361 }, - { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040 }, - { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775 }, - { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329 }, - { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539 }, - { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674 }, - { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268 }, - { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280 }, - { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233 }, - { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009 }, - { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113 }, - { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838 }, - { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436 }, - { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734 }, - { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045 }, - { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967 }, - { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787 }, - { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179 }, - { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173 }, - { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162 }, - { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093 }, - { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829 }, - { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786 }, - { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920 }, - { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059 }, - { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030 }, - { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975 }, - { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178 }, - { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481 }, - { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519 }, - { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446 }, - { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287 }, - { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033 }, - { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891 }, - { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646 }, - { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830 }, - { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830 }, - { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613 }, - { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183 }, - { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578 }, - { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573 }, - { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861 }, - { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633 }, - { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074 }, - { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635 }, - { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756 }, - { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831 }, - { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127 }, - { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034 }, - { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823 }, - { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144 }, - { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959 }, - { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558 }, - { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789 }, - { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405 }, - { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975 }, - { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701 }, - { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806 }, - { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985 }, - { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219 }, - { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148 }, - { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196 }, - { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981 }, - { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961 }, - { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965 }, - { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526 }, - { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190 }, - { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921 }, - { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766 }, - { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343 }, - { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502 }, - { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916 }, - { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855 }, - { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422 }, - { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576 }, - { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640 }, - { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322 }, - { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066 }, - { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586 }, - { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415 }, - { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427 }, - { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615 }, - { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786 }, - { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583 }, - { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941 }, - { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349 }, - { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922 }, - { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003 }, - { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245 }, - { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015 }, - { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016 }, - { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775 }, - { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270 }, - { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285 }, - { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581 }, - { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041 }, - { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946 }, - { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526 }, - { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165 }, - { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778 }, - { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839 }, - { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866 }, - { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441 }, - { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151 }, - { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195 }, - { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850 }, - { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899 }, - { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618 }, - { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003 }, - { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778 }, - { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359 }, - { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820 }, - { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243 }, - { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541 }, - { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326 }, +sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609, upload-time = "2026-05-28T11:58:50.78Z" }, + { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460, upload-time = "2026-05-28T11:58:52.374Z" }, + { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031, upload-time = "2026-05-28T11:58:53.775Z" }, + { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" }, + { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" }, + { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" }, + { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, + { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" }, + { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225, upload-time = "2026-05-28T11:59:02.433Z" }, + { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487, upload-time = "2026-05-28T11:59:04.012Z" }, + { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798, upload-time = "2026-05-28T11:59:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, + { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390, upload-time = "2026-05-28T11:59:08.402Z" }, + { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097, upload-time = "2026-05-28T11:59:09.786Z" }, + { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361, upload-time = "2026-05-28T11:59:11.079Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040, upload-time = "2026-05-28T11:59:12.531Z" }, + { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775, upload-time = "2026-05-28T11:59:13.827Z" }, + { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329, upload-time = "2026-05-28T11:59:15.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539, upload-time = "2026-05-28T11:59:16.665Z" }, + { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674, upload-time = "2026-05-28T11:59:17.991Z" }, + { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268, upload-time = "2026-05-28T11:59:19.434Z" }, + { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280, upload-time = "2026-05-28T11:59:21Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233, upload-time = "2026-05-28T11:59:22.454Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009, upload-time = "2026-05-28T11:59:23.845Z" }, + { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113, upload-time = "2026-05-28T11:59:25.184Z" }, + { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838, upload-time = "2026-05-28T11:59:26.749Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436, upload-time = "2026-05-28T11:59:28.11Z" }, + { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734, upload-time = "2026-05-28T11:59:29.689Z" }, + { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045, upload-time = "2026-05-28T11:59:31.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967, upload-time = "2026-05-28T11:59:32.318Z" }, + { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787, upload-time = "2026-05-28T11:59:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179, upload-time = "2026-05-28T11:59:35Z" }, + { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173, upload-time = "2026-05-28T11:59:36.43Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162, upload-time = "2026-05-28T11:59:37.995Z" }, + { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093, upload-time = "2026-05-28T11:59:39.453Z" }, + { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829, upload-time = "2026-05-28T11:59:40.896Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786, upload-time = "2026-05-28T11:59:42.626Z" }, + { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920, upload-time = "2026-05-28T11:59:44.124Z" }, + { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059, upload-time = "2026-05-28T11:59:47.177Z" }, + { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030, upload-time = "2026-05-28T11:59:48.603Z" }, + { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975, upload-time = "2026-05-28T11:59:50.314Z" }, + { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178, upload-time = "2026-05-28T11:59:51.673Z" }, + { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481, upload-time = "2026-05-28T11:59:53.148Z" }, + { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519, upload-time = "2026-05-28T11:59:54.505Z" }, + { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446, upload-time = "2026-05-28T11:59:56.081Z" }, + { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287, upload-time = "2026-05-28T11:59:57.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033, upload-time = "2026-05-28T11:59:58.881Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891, upload-time = "2026-05-28T12:00:00.516Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646, upload-time = "2026-05-28T12:00:02.394Z" }, + { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830, upload-time = "2026-05-28T12:00:04.189Z" }, + { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830, upload-time = "2026-05-28T12:00:05.797Z" }, + { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613, upload-time = "2026-05-28T12:00:07.433Z" }, + { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183, upload-time = "2026-05-28T12:00:09.227Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578, upload-time = "2026-05-28T12:00:10.779Z" }, + { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573, upload-time = "2026-05-28T12:00:12.443Z" }, + { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861, upload-time = "2026-05-28T12:00:14.09Z" }, + { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633, upload-time = "2026-05-28T12:00:15.66Z" }, + { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074, upload-time = "2026-05-28T12:00:17.291Z" }, + { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635, upload-time = "2026-05-28T12:00:18.73Z" }, + { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756, upload-time = "2026-05-28T12:00:20.217Z" }, + { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831, upload-time = "2026-05-28T12:00:21.711Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127, upload-time = "2026-05-28T12:00:23.326Z" }, + { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034, upload-time = "2026-05-28T12:00:24.89Z" }, + { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823, upload-time = "2026-05-28T12:00:26.676Z" }, + { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144, upload-time = "2026-05-28T12:00:28.577Z" }, + { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959, upload-time = "2026-05-28T12:00:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558, upload-time = "2026-05-28T12:00:31.764Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789, upload-time = "2026-05-28T12:00:33.247Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405, upload-time = "2026-05-28T12:00:34.819Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975, upload-time = "2026-05-28T12:00:36.268Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701, upload-time = "2026-05-28T12:00:37.82Z" }, + { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806, upload-time = "2026-05-28T12:00:39.492Z" }, + { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985, upload-time = "2026-05-28T12:00:40.94Z" }, + { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219, upload-time = "2026-05-28T12:00:43.15Z" }, + { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148, upload-time = "2026-05-28T12:00:44.638Z" }, + { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196, upload-time = "2026-05-28T12:00:46.14Z" }, + { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981, upload-time = "2026-05-28T12:00:47.531Z" }, + { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961, upload-time = "2026-05-28T12:00:49.216Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965, upload-time = "2026-05-28T12:00:51.111Z" }, + { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526, upload-time = "2026-05-28T12:00:52.77Z" }, + { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190, upload-time = "2026-05-28T12:00:54.215Z" }, + { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921, upload-time = "2026-05-28T12:00:55.673Z" }, + { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766, upload-time = "2026-05-28T12:00:57.518Z" }, + { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343, upload-time = "2026-05-28T12:00:58.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502, upload-time = "2026-05-28T12:01:00.656Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916, upload-time = "2026-05-28T12:01:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855, upload-time = "2026-05-28T12:01:03.821Z" }, + { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422, upload-time = "2026-05-28T12:01:05.194Z" }, + { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576, upload-time = "2026-05-28T12:01:06.722Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640, upload-time = "2026-05-28T12:01:08.441Z" }, + { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322, upload-time = "2026-05-28T12:01:09.934Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066, upload-time = "2026-05-28T12:01:11.48Z" }, + { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586, upload-time = "2026-05-28T12:01:13.051Z" }, + { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415, upload-time = "2026-05-28T12:01:14.631Z" }, + { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427, upload-time = "2026-05-28T12:01:16.153Z" }, + { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615, upload-time = "2026-05-28T12:01:17.809Z" }, + { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786, upload-time = "2026-05-28T12:01:19.419Z" }, + { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583, upload-time = "2026-05-28T12:01:21.013Z" }, + { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941, upload-time = "2026-05-28T12:01:22.548Z" }, + { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349, upload-time = "2026-05-28T12:01:24.118Z" }, + { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922, upload-time = "2026-05-28T12:01:25.522Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003, upload-time = "2026-05-28T12:01:27.062Z" }, + { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245, upload-time = "2026-05-28T12:01:28.51Z" }, + { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015, upload-time = "2026-05-28T12:01:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016, upload-time = "2026-05-28T12:01:31.656Z" }, + { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775, upload-time = "2026-05-28T12:01:33.136Z" }, + { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270, upload-time = "2026-05-28T12:01:34.574Z" }, + { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285, upload-time = "2026-05-28T12:01:36.127Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581, upload-time = "2026-05-28T12:01:37.635Z" }, + { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041, upload-time = "2026-05-28T12:01:39.307Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946, upload-time = "2026-05-28T12:01:41.043Z" }, + { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526, upload-time = "2026-05-28T12:01:43.032Z" }, + { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165, upload-time = "2026-05-28T12:01:44.648Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778, upload-time = "2026-05-28T12:01:46.337Z" }, + { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839, upload-time = "2026-05-28T12:01:48.109Z" }, + { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866, upload-time = "2026-05-28T12:01:49.648Z" }, + { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441, upload-time = "2026-05-28T12:01:51.408Z" }, + { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151, upload-time = "2026-05-28T12:01:53.43Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195, upload-time = "2026-05-28T12:01:54.901Z" }, + { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850, upload-time = "2026-05-28T12:01:56.601Z" }, + { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" }, + { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, + { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" }, + { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820, upload-time = "2026-05-28T12:02:06.401Z" }, + { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243, upload-time = "2026-05-28T12:02:08.013Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541, upload-time = "2026-05-28T12:02:09.661Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, ] [[package]] @@ -2419,38 +2143,38 @@ dependencies = [ { name = "scipy" }, { name = "threadpoolctl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/be/e844fd9586e66540a15b71924d17a6cbc1bb749e81ddd0a796bcdba4c055/scikit_learn-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9db6f4d34e68c8899e4cab27fdf8eafe6ed21f2ba52ceb25ea250cd237f8e47b", size = 8789686 }, - { url = "https://files.pythonhosted.org/packages/42/e2/ff880f62677a17d035817d543cb0fc8727d01eccbee81c5f7fc733a9d856/scikit_learn-1.9.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f401448645a3e7bc115aa3c094097865155b34bff1cba8101857d9104e99074c", size = 8256782 }, - { url = "https://files.pythonhosted.org/packages/25/64/eb40435e1a508ab1b4e284ce43ae80f6a162e5be5e38ed5a6fab467a9ea4/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd3a8ef0c758555a3b23c03adaa858af32f7736785ded50ad5991f59c4ed03fa", size = 8992419 }, - { url = "https://files.pythonhosted.org/packages/8d/da/4810a28e473185429e45a57eebcc91fc991b33d889cc0676063e671db03d/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7e254636164090da847715a27f8e5478feb98c40a9e0ee90cbd277de9e5ceb8", size = 9281411 }, - { url = "https://files.pythonhosted.org/packages/3b/67/be3d369f40d8178ba3bd86635d132e08cb5329b023e4669d9426d84bc007/scikit_learn-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:5dc1818c77575d149e25fce9ef82dd7b7263ae372f03494158668ad632a69759", size = 8272736 }, - { url = "https://files.pythonhosted.org/packages/37/79/a733f02dc2118da7e77a134b34f39f40201a353311b011d20859d2db3556/scikit_learn-1.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:366652351f092b219c248f1e72821e841960a63d8f358f1dcfd54dc1cbdbbc28", size = 7919564 }, - { url = "https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2bd41b0d201bc81575531b96b713d3eb5e5f50fb0b82101ff0f92294fdc236ac", size = 8741122 }, - { url = "https://files.pythonhosted.org/packages/cc/d5/2b5148f2279196775e1db2aeb85d14b70ac80e7e32b3b28e7ebeafb0901d/scikit_learn-1.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5be45aa4a42a68a533913a6ed736cf309de2226411c79ef8d609a5456f1939b1", size = 8261512 }, - { url = "https://files.pythonhosted.org/packages/a0/ee/5adbc77656b71f9456a2f5a7a9fdb4bcf9207a6b962889f1c2f9323afa4e/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e50ed4da51974e86e940690e9a3d82e729b62b5a49f7c9bac534d515d39d86f", size = 8837603 }, - { url = "https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8", size = 9132097 }, - { url = "https://files.pythonhosted.org/packages/83/a4/c8e67227c680e2259c8864ae72ff48b06e16a6f51253a22167aa02a8aa4e/scikit_learn-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:4306775fad04cc4b472a1b15af1ae9cede1540fbfcc17fbce3767cd8dc7ae283", size = 8211173 }, - { url = "https://files.pythonhosted.org/packages/cf/fd/3c0863792e98e67e9184aa4029288a175935eb65443afcd30d4f143450cf/scikit_learn-1.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:26e22435f63bcdcf396b574273f29f13dd531f5ea035801f5be10ba1540a4e60", size = 7867451 }, - { url = "https://files.pythonhosted.org/packages/3c/01/cf3310626b6d48d3e9be69a1223f9180360b5e6edb045f50fade723ce494/scikit_learn-1.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:80746d63bd4b6eaca54d36fe5feaf4d28bb38dc6f9470f81c7cad7c40155f119", size = 8705188 }, - { url = "https://files.pythonhosted.org/packages/3e/04/5acd7ae280c5f93b6ac5ef6cdec14eef4c8d1cd91d85b3292989c94d96b1/scikit_learn-1.9.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5b934c45c252844a91d69fda3a34cff5e7307e1db10d77cb10a3980312c74713", size = 8228299 }, - { url = "https://files.pythonhosted.org/packages/0c/39/ffe829a5b8ecb40a518724a997794657fdc354ada5e8fe8e64d998c0bac9/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:38c3dcb9a1ffb85505ec53d54c7b4aea0cff70050425a7760c2af661ac85df05", size = 8789690 }, - { url = "https://files.pythonhosted.org/packages/1f/88/8dab5de10c638c083772a6be83a3d8106ced492f74a928c8693638e5bb50/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da76d09304a4706db7cc1e3ebaa3b6b98a67365cc11d2996c4f1e58ba47df714", size = 9087723 }, - { url = "https://files.pythonhosted.org/packages/20/3f/7917ca72464038f6240ec70c29f94862d08a34a74291ae4d4ec5eb8186a0/scikit_learn-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5808d98f15c6bf6d9d96d2348c1997392a5888ce7097e664105f930c4bca1277", size = 8184330 }, - { url = "https://files.pythonhosted.org/packages/78/c7/15739eb2f61fda3c54639e9942414e5a19ad8a8d1f5a3266afad7cb7df80/scikit_learn-1.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:d77f54c017633791bc0225a43e2f8d03745fdcfe4880268fcc4df15f505dec2e", size = 7840653 }, - { url = "https://files.pythonhosted.org/packages/f4/7d/c9a35cf59b20a86fec24d306f1547b78dec194b08d367ce2a3e4854169d9/scikit_learn-1.9.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9656acd4e93f74e0b66c8a36c88830a99252dfa900044d36bc2212ae89a47162", size = 8713289 }, - { url = "https://files.pythonhosted.org/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:24360002ae845e7866522b0a5bbf690802e7bc388cac8663502e78aa98598aa2", size = 8245141 }, - { url = "https://files.pythonhosted.org/packages/7d/79/f4a0c4fe9711154cddabf913471153af79056382ddc612cfe5ee0ff4b72e/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5162ad10a418c8a282dde04c9aa06965de3e9a65f33c1440c0ae69bb1a09d913", size = 8847671 }, - { url = "https://files.pythonhosted.org/packages/f0/af/4d72d9e475ac83719160c662619e4bf7b95c19507cd582e7d0167a3c3dae/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fea2cc5677ab49d6f5bade978c866da44957b712d92e9635e8b4f723013c3cb", size = 9118104 }, - { url = "https://files.pythonhosted.org/packages/a2/d5/6a58eea2cb9abbb9b3f2bb8b2cfb3243d1152d69f442d256c7af71304769/scikit_learn-1.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:64fa347efc1c839c487433e40c5144d38c336e8a2b59c81aa8660373945c2673", size = 8290674 }, - { url = "https://files.pythonhosted.org/packages/65/5b/d4c879cf358f1187141cf90ced473f087183489090244f50c124a2ee478b/scikit_learn-1.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:1b944b6db288f6b926e3650026ddafb988929de95d11fc2cc5fa117773c9ba42", size = 7978807 }, - { url = "https://files.pythonhosted.org/packages/8a/43/bfae3121ec67ae09150d453c442c7c1cc166e9aefe056e6ab3b7728a5cfc/scikit_learn-1.9.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4ccacf04ca5f4b492158a5f28afe0ace43f81b2571e4b9a66d34848b46128949", size = 9031941 }, - { url = "https://files.pythonhosted.org/packages/75/b0/20a4546eb17f3b25d3c66df15810411c14ed5065bcfab50b53c96fb627b2/scikit_learn-1.9.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:ee1a8db2c18c08e34c7412d4b10be1cac214cd4ea7dc9715a6a327eb49a37c96", size = 8613528 }, - { url = "https://files.pythonhosted.org/packages/18/3c/e440e039bb82cd19004edaaad00acbde0fb9b461083c3ecf37941c557312/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:147e9329ef0e39f75d4cffa02b2aa48d827832684926cd5210d9a2cb5c57246b", size = 8855050 }, - { url = "https://files.pythonhosted.org/packages/43/26/b341b8dab5998da6270a3a42c2152c578501354d36f944b5856757035ef8/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bad8f8b9950321b54c965fdcbac6c6c55e79e16646b49977bcf3668d3870a1a", size = 9097190 }, - { url = "https://files.pythonhosted.org/packages/fb/de/b650b4d69b84468cfa2e28a3ff7b8103743029e6446ce1a97fe060ef688c/scikit_learn-1.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:78fc56eafd4edb9575d2d8950d1dd152061abb573341a1cb7e099fc40f6c6666", size = 8963204 }, - { url = "https://files.pythonhosted.org/packages/ee/f3/ff83d76d7418112e5a61326443cdda87be3545dd8d6599c95b2481a4419e/scikit_learn-1.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa", size = 8222661 }, +sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767, upload-time = "2026-06-02T11:54:32.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/be/e844fd9586e66540a15b71924d17a6cbc1bb749e81ddd0a796bcdba4c055/scikit_learn-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9db6f4d34e68c8899e4cab27fdf8eafe6ed21f2ba52ceb25ea250cd237f8e47b", size = 8789686, upload-time = "2026-06-02T11:53:05.439Z" }, + { url = "https://files.pythonhosted.org/packages/42/e2/ff880f62677a17d035817d543cb0fc8727d01eccbee81c5f7fc733a9d856/scikit_learn-1.9.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f401448645a3e7bc115aa3c094097865155b34bff1cba8101857d9104e99074c", size = 8256782, upload-time = "2026-06-02T11:53:08.904Z" }, + { url = "https://files.pythonhosted.org/packages/25/64/eb40435e1a508ab1b4e284ce43ae80f6a162e5be5e38ed5a6fab467a9ea4/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd3a8ef0c758555a3b23c03adaa858af32f7736785ded50ad5991f59c4ed03fa", size = 8992419, upload-time = "2026-06-02T11:53:11.551Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/4810a28e473185429e45a57eebcc91fc991b33d889cc0676063e671db03d/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7e254636164090da847715a27f8e5478feb98c40a9e0ee90cbd277de9e5ceb8", size = 9281411, upload-time = "2026-06-02T11:53:15.063Z" }, + { url = "https://files.pythonhosted.org/packages/3b/67/be3d369f40d8178ba3bd86635d132e08cb5329b023e4669d9426d84bc007/scikit_learn-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:5dc1818c77575d149e25fce9ef82dd7b7263ae372f03494158668ad632a69759", size = 8272736, upload-time = "2026-06-02T11:53:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/37/79/a733f02dc2118da7e77a134b34f39f40201a353311b011d20859d2db3556/scikit_learn-1.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:366652351f092b219c248f1e72821e841960a63d8f358f1dcfd54dc1cbdbbc28", size = 7919564, upload-time = "2026-06-02T11:53:21.2Z" }, + { url = "https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2bd41b0d201bc81575531b96b713d3eb5e5f50fb0b82101ff0f92294fdc236ac", size = 8741122, upload-time = "2026-06-02T11:53:24.08Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d5/2b5148f2279196775e1db2aeb85d14b70ac80e7e32b3b28e7ebeafb0901d/scikit_learn-1.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5be45aa4a42a68a533913a6ed736cf309de2226411c79ef8d609a5456f1939b1", size = 8261512, upload-time = "2026-06-02T11:53:27.183Z" }, + { url = "https://files.pythonhosted.org/packages/a0/ee/5adbc77656b71f9456a2f5a7a9fdb4bcf9207a6b962889f1c2f9323afa4e/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e50ed4da51974e86e940690e9a3d82e729b62b5a49f7c9bac534d515d39d86f", size = 8837603, upload-time = "2026-06-02T11:53:30.328Z" }, + { url = "https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8", size = 9132097, upload-time = "2026-06-02T11:53:33.456Z" }, + { url = "https://files.pythonhosted.org/packages/83/a4/c8e67227c680e2259c8864ae72ff48b06e16a6f51253a22167aa02a8aa4e/scikit_learn-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:4306775fad04cc4b472a1b15af1ae9cede1540fbfcc17fbce3767cd8dc7ae283", size = 8211173, upload-time = "2026-06-02T11:53:36.602Z" }, + { url = "https://files.pythonhosted.org/packages/cf/fd/3c0863792e98e67e9184aa4029288a175935eb65443afcd30d4f143450cf/scikit_learn-1.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:26e22435f63bcdcf396b574273f29f13dd531f5ea035801f5be10ba1540a4e60", size = 7867451, upload-time = "2026-06-02T11:53:39.075Z" }, + { url = "https://files.pythonhosted.org/packages/3c/01/cf3310626b6d48d3e9be69a1223f9180360b5e6edb045f50fade723ce494/scikit_learn-1.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:80746d63bd4b6eaca54d36fe5feaf4d28bb38dc6f9470f81c7cad7c40155f119", size = 8705188, upload-time = "2026-06-02T11:53:41.964Z" }, + { url = "https://files.pythonhosted.org/packages/3e/04/5acd7ae280c5f93b6ac5ef6cdec14eef4c8d1cd91d85b3292989c94d96b1/scikit_learn-1.9.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5b934c45c252844a91d69fda3a34cff5e7307e1db10d77cb10a3980312c74713", size = 8228299, upload-time = "2026-06-02T11:53:44.817Z" }, + { url = "https://files.pythonhosted.org/packages/0c/39/ffe829a5b8ecb40a518724a997794657fdc354ada5e8fe8e64d998c0bac9/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:38c3dcb9a1ffb85505ec53d54c7b4aea0cff70050425a7760c2af661ac85df05", size = 8789690, upload-time = "2026-06-02T11:53:47.461Z" }, + { url = "https://files.pythonhosted.org/packages/1f/88/8dab5de10c638c083772a6be83a3d8106ced492f74a928c8693638e5bb50/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da76d09304a4706db7cc1e3ebaa3b6b98a67365cc11d2996c4f1e58ba47df714", size = 9087723, upload-time = "2026-06-02T11:53:50.702Z" }, + { url = "https://files.pythonhosted.org/packages/20/3f/7917ca72464038f6240ec70c29f94862d08a34a74291ae4d4ec5eb8186a0/scikit_learn-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5808d98f15c6bf6d9d96d2348c1997392a5888ce7097e664105f930c4bca1277", size = 8184330, upload-time = "2026-06-02T11:53:53.396Z" }, + { url = "https://files.pythonhosted.org/packages/78/c7/15739eb2f61fda3c54639e9942414e5a19ad8a8d1f5a3266afad7cb7df80/scikit_learn-1.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:d77f54c017633791bc0225a43e2f8d03745fdcfe4880268fcc4df15f505dec2e", size = 7840653, upload-time = "2026-06-02T11:53:56.035Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7d/c9a35cf59b20a86fec24d306f1547b78dec194b08d367ce2a3e4854169d9/scikit_learn-1.9.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9656acd4e93f74e0b66c8a36c88830a99252dfa900044d36bc2212ae89a47162", size = 8713289, upload-time = "2026-06-02T11:53:58.788Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:24360002ae845e7866522b0a5bbf690802e7bc388cac8663502e78aa98598aa2", size = 8245141, upload-time = "2026-06-02T11:54:01.694Z" }, + { url = "https://files.pythonhosted.org/packages/7d/79/f4a0c4fe9711154cddabf913471153af79056382ddc612cfe5ee0ff4b72e/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5162ad10a418c8a282dde04c9aa06965de3e9a65f33c1440c0ae69bb1a09d913", size = 8847671, upload-time = "2026-06-02T11:54:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/f0/af/4d72d9e475ac83719160c662619e4bf7b95c19507cd582e7d0167a3c3dae/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fea2cc5677ab49d6f5bade978c866da44957b712d92e9635e8b4f723013c3cb", size = 9118104, upload-time = "2026-06-02T11:54:07.205Z" }, + { url = "https://files.pythonhosted.org/packages/a2/d5/6a58eea2cb9abbb9b3f2bb8b2cfb3243d1152d69f442d256c7af71304769/scikit_learn-1.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:64fa347efc1c839c487433e40c5144d38c336e8a2b59c81aa8660373945c2673", size = 8290674, upload-time = "2026-06-02T11:54:10.087Z" }, + { url = "https://files.pythonhosted.org/packages/65/5b/d4c879cf358f1187141cf90ced473f087183489090244f50c124a2ee478b/scikit_learn-1.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:1b944b6db288f6b926e3650026ddafb988929de95d11fc2cc5fa117773c9ba42", size = 7978807, upload-time = "2026-06-02T11:54:12.769Z" }, + { url = "https://files.pythonhosted.org/packages/8a/43/bfae3121ec67ae09150d453c442c7c1cc166e9aefe056e6ab3b7728a5cfc/scikit_learn-1.9.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4ccacf04ca5f4b492158a5f28afe0ace43f81b2571e4b9a66d34848b46128949", size = 9031941, upload-time = "2026-06-02T11:54:15.436Z" }, + { url = "https://files.pythonhosted.org/packages/75/b0/20a4546eb17f3b25d3c66df15810411c14ed5065bcfab50b53c96fb627b2/scikit_learn-1.9.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:ee1a8db2c18c08e34c7412d4b10be1cac214cd4ea7dc9715a6a327eb49a37c96", size = 8613528, upload-time = "2026-06-02T11:54:18.842Z" }, + { url = "https://files.pythonhosted.org/packages/18/3c/e440e039bb82cd19004edaaad00acbde0fb9b461083c3ecf37941c557312/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:147e9329ef0e39f75d4cffa02b2aa48d827832684926cd5210d9a2cb5c57246b", size = 8855050, upload-time = "2026-06-02T11:54:21.699Z" }, + { url = "https://files.pythonhosted.org/packages/43/26/b341b8dab5998da6270a3a42c2152c578501354d36f944b5856757035ef8/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bad8f8b9950321b54c965fdcbac6c6c55e79e16646b49977bcf3668d3870a1a", size = 9097190, upload-time = "2026-06-02T11:54:24.454Z" }, + { url = "https://files.pythonhosted.org/packages/fb/de/b650b4d69b84468cfa2e28a3ff7b8103743029e6446ce1a97fe060ef688c/scikit_learn-1.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:78fc56eafd4edb9575d2d8950d1dd152061abb573341a1cb7e099fc40f6c6666", size = 8963204, upload-time = "2026-06-02T11:54:27.428Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f3/ff83d76d7418112e5a61326443cdda87be3545dd8d6599c95b2481a4419e/scikit_learn-1.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa", size = 8222661, upload-time = "2026-06-02T11:54:30.192Z" }, ] [[package]] @@ -2460,86 +2184,86 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675 }, - { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057 }, - { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032 }, - { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533 }, - { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057 }, - { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300 }, - { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333 }, - { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314 }, - { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512 }, - { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248 }, - { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954 }, - { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662 }, - { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366 }, - { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017 }, - { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842 }, - { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890 }, - { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557 }, - { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856 }, - { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682 }, - { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340 }, - { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199 }, - { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001 }, - { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719 }, - { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595 }, - { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429 }, - { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952 }, - { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063 }, - { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449 }, - { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943 }, - { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621 }, - { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708 }, - { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135 }, - { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977 }, - { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601 }, - { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667 }, - { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159 }, - { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771 }, - { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910 }, - { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980 }, - { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543 }, - { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510 }, - { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131 }, - { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032 }, - { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766 }, - { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007 }, - { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333 }, - { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066 }, - { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763 }, - { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984 }, - { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877 }, - { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750 }, - { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858 }, - { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723 }, - { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098 }, - { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397 }, - { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163 }, - { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291 }, - { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317 }, - { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327 }, - { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165 }, +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057, upload-time = "2026-02-23T00:16:36.931Z" }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300, upload-time = "2026-02-23T00:16:49.108Z" }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333, upload-time = "2026-02-23T00:17:01.293Z" }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314, upload-time = "2026-02-23T00:17:12.576Z" }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512, upload-time = "2026-02-23T00:17:23.424Z" }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248, upload-time = "2026-02-23T00:17:34.561Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, + { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, + { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, + { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, + { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, + { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, + { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, + { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, + { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, + { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, + { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, + { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, + { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, + { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, + { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, + { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510, upload-time = "2026-02-23T00:21:01.015Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131, upload-time = "2026-02-23T00:21:05.888Z" }, + { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032, upload-time = "2026-02-23T00:21:09.904Z" }, + { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766, upload-time = "2026-02-23T00:21:14.313Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007, upload-time = "2026-02-23T00:21:19.663Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333, upload-time = "2026-02-23T00:21:25.278Z" }, + { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066, upload-time = "2026-02-23T00:21:31.358Z" }, + { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763, upload-time = "2026-02-23T00:21:37.247Z" }, + { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984, upload-time = "2026-02-23T00:22:35.023Z" }, + { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877, upload-time = "2026-02-23T00:22:39.798Z" }, + { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750, upload-time = "2026-02-23T00:21:42.289Z" }, + { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858, upload-time = "2026-02-23T00:21:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723, upload-time = "2026-02-23T00:21:52.039Z" }, + { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098, upload-time = "2026-02-23T00:21:56.185Z" }, + { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397, upload-time = "2026-02-23T00:22:01.404Z" }, + { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163, upload-time = "2026-02-23T00:22:07.024Z" }, + { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291, upload-time = "2026-02-23T00:22:12.585Z" }, + { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317, upload-time = "2026-02-23T00:22:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327, upload-time = "2026-02-23T00:22:24.442Z" }, + { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, ] [[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 = "sortedcontainers" version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594 } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575 }, + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, ] [[package]] @@ -2551,48 +2275,36 @@ 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]] name = "termcolor" version = "3.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/46/79/cf31d7a93a8fdc6aa0fbb665be84426a8c5a557d9240b6239e9e11e35fc5/termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5", size = 14434 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/d1/8bb87d21e9aeb323cc03034f5eaf2c8f69841e40e4853c2627edf8111ed3/termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5", size = 7734 }, -] - -[[package]] -name = "thermofeel" -version = "2.1.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8a/9b/467dc4de053aa5ba379ecc9ac000c62551520fc4bcc1a079ddbdbaebfa11/thermofeel-2.1.7.tar.gz", hash = "sha256:f034ffa8d8d096416cd94cc234a67db8afc2ae72ca872144c59e9fc104b09073", size = 38251 } +sdist = { url = "https://files.pythonhosted.org/packages/46/79/cf31d7a93a8fdc6aa0fbb665be84426a8c5a557d9240b6239e9e11e35fc5/termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5", size = 14434, upload-time = "2025-12-29T12:55:21.882Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/4b/90bb6dfe1828aae53d99c7fdbf5232f2a0037d9d30b2ac946c50366da319/thermofeel-2.1.7-py3-none-any.whl", hash = "sha256:ede7e3c4cb818803173468cb9a6b9ca9c91fc310fa93978eba24505bf9baa9e0", size = 42533 }, + { url = "https://files.pythonhosted.org/packages/33/d1/8bb87d21e9aeb323cc03034f5eaf2c8f69841e40e4853c2627edf8111ed3/termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5", size = 7734, upload-time = "2025-12-29T12:55:20.718Z" }, ] [[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]] name = "toolz" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613 } +sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613, upload-time = "2025-10-17T04:03:21.661Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093 }, + { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093, upload-time = "2025-10-17T04:03:20.435Z" }, ] [[package]] @@ -2602,52 +2314,52 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/b3/36c8ecf72e8925200671613332db156d84b99b3aee742a41c1938ebb0808/tqdm-4.68.1.tar.gz", hash = "sha256:fc163d96b287bd031e1aa24421ce4411b25559bd0a1be4fe649bdaa4d2c02bf5", size = 171236 } +sdist = { url = "https://files.pythonhosted.org/packages/06/b3/36c8ecf72e8925200671613332db156d84b99b3aee742a41c1938ebb0808/tqdm-4.68.1.tar.gz", hash = "sha256:fc163d96b287bd031e1aa24421ce4411b25559bd0a1be4fe649bdaa4d2c02bf5", size = 171236, upload-time = "2026-06-05T17:23:15.267Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/aa/218a0eb34de1f753c83e4d0d1c8e7c4cef27f20dcb8342e024f63a80dc86/tqdm-4.68.1-py3-none-any.whl", hash = "sha256:fea4a90e4023f764914569f7802a297277c5ab1a66be5144143e142e1a4031d8", size = 78354 }, + { url = "https://files.pythonhosted.org/packages/47/aa/218a0eb34de1f753c83e4d0d1c8e7c4cef27f20dcb8342e024f63a80dc86/tqdm-4.68.1-py3-none-any.whl", hash = "sha256:fea4a90e4023f764914569f7802a297277c5ab1a66be5144143e142e1a4031d8", size = 78354, upload-time = "2026-06-05T17:23:13.654Z" }, ] [[package]] name = "traitlets" version = "5.15.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344 } +sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344, upload-time = "2026-06-03T12:26:06.181Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858 }, + { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858, upload-time = "2026-06-03T12:26:04.395Z" }, ] [[package]] name = "ty" version = "0.0.44" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/f4/fbb120226e4f239652525a664bad976a23fea58c646d1323f2296fee8a61/ty-0.0.44.tar.gz", hash = "sha256:5886229830ab77022842a1c55d2ef57405621a91fc465969fa6d538661898173", size = 5803665 } +sdist = { url = "https://files.pythonhosted.org/packages/13/f4/fbb120226e4f239652525a664bad976a23fea58c646d1323f2296fee8a61/ty-0.0.44.tar.gz", hash = "sha256:5886229830ab77022842a1c55d2ef57405621a91fc465969fa6d538661898173", size = 5803665, upload-time = "2026-06-05T03:33:48.612Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/c6/b5b8c4762efb4d85401652658786506867553ecfc2beac3bcf361a15937f/ty-0.0.44-py3-none-linux_armv6l.whl", hash = "sha256:272d31e7ad49b1dc5e8465a9fe700354e14c755b40d9c75f08f031d786903df3", size = 11607267 }, - { url = "https://files.pythonhosted.org/packages/1c/5c/f4b405570737f44ab0fc4214117fe43353f8f0825a1823d9e99e9c8e57be/ty-0.0.44-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b92c4ddd7a3daf2049715edec9dc70cf6fd31a5a318ee647258f90dd75495eed", size = 11382826 }, - { url = "https://files.pythonhosted.org/packages/9d/aa/fb9835aa492b148d7754cb4c3db07f31a7e2e09f0d8e0e8e297f01125dd2/ty-0.0.44-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4d42cfd84a690f6654b2a4f0515027c21b692cf2512d32e6433f754893a95609", size = 10809741 }, - { url = "https://files.pythonhosted.org/packages/47/f5/0b20ba6b66837a5a37bab7f74ac0732c66e766b5f0b2d55b30816b15f348/ty-0.0.44-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc47ae87e4cb7db2a9166bb23b78a905c3626e523296ec5bccf36b5e89bda6b", size = 11318153 }, - { url = "https://files.pythonhosted.org/packages/ca/bb/b82ea730774a4f950f06d355fbc120d51eac7da23b57fc79ef6ff7c79cbb/ty-0.0.44-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46d867e80f16f421ac72c9a85240dbf050d62d9b3fbd10a8b5b082fb21679e0b", size = 11403108 }, - { url = "https://files.pythonhosted.org/packages/8b/41/e2c83856165291049c702eda4e2ef3d3ebd875e8a0a77b8cc4ef3156aa1c/ty-0.0.44-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:411f5de0f96a4e4e5cccc3e0d55954c41f6a99ee6ca1fe5a7226cbc68406e053", size = 11944815 }, - { url = "https://files.pythonhosted.org/packages/66/95/1fa6a101eb9d5bec042b87e5ca9c8fc349b75961beca6306f95af5cd5539/ty-0.0.44-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b15f01ecb4e2b46c05a1769293f9d32c3d4a1e4e7dfccf37c604d705dc3e3f4", size = 12476121 }, - { url = "https://files.pythonhosted.org/packages/72/6a/da4b45b1229d39207c6140681c2aaf4f5691bcb1dc830b84450ca25c8f57/ty-0.0.44-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:edd32b7467af509c99c0244c2226a4e4c03400699003ec33373282ab931654d9", size = 12091340 }, - { url = "https://files.pythonhosted.org/packages/16/c7/e1c9260ea5188195962ff1214ace418b5d69187e8fa7c0a1ec4994b8071b/ty-0.0.44-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503a585f4007387c3afc58bae23a7ca1b9f236cbdb1a881dc36110655ceb1937", size = 11986201 }, - { url = "https://files.pythonhosted.org/packages/92/f9/312bb112da9b1a7da295bb0426be85e72ad48da4e4266c36d77256b4058d/ty-0.0.44-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d28bcfa83243d77c2316944e8cf197f73597bf17d1ddc047d0b10a762531252", size = 12168475 }, - { url = "https://files.pythonhosted.org/packages/02/de/64978d603f6c3e5dd7cb97eca2214567d8ad0c85fa4a7435b7852ae4b779/ty-0.0.44-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:56fd2dd0192def189715b25f5338f6222fb827884dc34111e50aa1c4e061cee5", size = 11292937 }, - { url = "https://files.pythonhosted.org/packages/64/63/a625d8a3c71dcaa01988d330f849c465fe72ead4b0bbab44fe4bd6e672b5/ty-0.0.44-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7f8d990489032de1984e73c159f3e760d754cf83a602b874827d943821f63595", size = 11421560 }, - { url = "https://files.pythonhosted.org/packages/99/96/61aeba0e629b0c91bd316ff94d00e38817ec493ae4316f39508988daa287/ty-0.0.44-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f61ffe72996a755432922fe90b28db593f572eb5cbf48e3ef4e67b282533d1b0", size = 11580282 }, - { url = "https://files.pythonhosted.org/packages/fa/f7/256e1538ce21cab67b381201444c42454de69d310059c4929d92a0ee9c48/ty-0.0.44-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2b237a143bac4f30cec9257d45f01e72da97030a80a09a2b69cfef065f09c37f", size = 12085723 }, - { url = "https://files.pythonhosted.org/packages/d3/76/ec3957c10872643a98db7a7895101ad89c5b7cba4bc6c4aebbbfc91756cc/ty-0.0.44-py3-none-win32.whl", hash = "sha256:6a24586c65419223ac5bab4822d49ab493a5d19ea2a897514284c232b9d6166a", size = 10892978 }, - { url = "https://files.pythonhosted.org/packages/a5/7d/ba24050432196e7d7f03945e5c379951593c48e04e5c5d5275cfc4624791/ty-0.0.44-py3-none-win_amd64.whl", hash = "sha256:8cccb27e348c89a9733fbad1b2efadfbad79b107c7e52adb52dfd8a70156a38d", size = 11987058 }, - { url = "https://files.pythonhosted.org/packages/71/34/16ec3f1fec75292d9c56a8b5fef037ceaba85a5c30562206c1a245a00a67/ty-0.0.44-py3-none-win_arm64.whl", hash = "sha256:58049504e7a12bf1957f24a5384a332c94d5590127083a80db5e5a1bed34190b", size = 11329961 }, + { url = "https://files.pythonhosted.org/packages/e8/c6/b5b8c4762efb4d85401652658786506867553ecfc2beac3bcf361a15937f/ty-0.0.44-py3-none-linux_armv6l.whl", hash = "sha256:272d31e7ad49b1dc5e8465a9fe700354e14c755b40d9c75f08f031d786903df3", size = 11607267, upload-time = "2026-06-05T03:33:27.154Z" }, + { url = "https://files.pythonhosted.org/packages/1c/5c/f4b405570737f44ab0fc4214117fe43353f8f0825a1823d9e99e9c8e57be/ty-0.0.44-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b92c4ddd7a3daf2049715edec9dc70cf6fd31a5a318ee647258f90dd75495eed", size = 11382826, upload-time = "2026-06-05T03:33:54.374Z" }, + { url = "https://files.pythonhosted.org/packages/9d/aa/fb9835aa492b148d7754cb4c3db07f31a7e2e09f0d8e0e8e297f01125dd2/ty-0.0.44-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4d42cfd84a690f6654b2a4f0515027c21b692cf2512d32e6433f754893a95609", size = 10809741, upload-time = "2026-06-05T03:33:33.22Z" }, + { url = "https://files.pythonhosted.org/packages/47/f5/0b20ba6b66837a5a37bab7f74ac0732c66e766b5f0b2d55b30816b15f348/ty-0.0.44-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc47ae87e4cb7db2a9166bb23b78a905c3626e523296ec5bccf36b5e89bda6b", size = 11318153, upload-time = "2026-06-05T03:34:09.403Z" }, + { url = "https://files.pythonhosted.org/packages/ca/bb/b82ea730774a4f950f06d355fbc120d51eac7da23b57fc79ef6ff7c79cbb/ty-0.0.44-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46d867e80f16f421ac72c9a85240dbf050d62d9b3fbd10a8b5b082fb21679e0b", size = 11403108, upload-time = "2026-06-05T03:33:57.745Z" }, + { url = "https://files.pythonhosted.org/packages/8b/41/e2c83856165291049c702eda4e2ef3d3ebd875e8a0a77b8cc4ef3156aa1c/ty-0.0.44-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:411f5de0f96a4e4e5cccc3e0d55954c41f6a99ee6ca1fe5a7226cbc68406e053", size = 11944815, upload-time = "2026-06-05T03:34:15.793Z" }, + { url = "https://files.pythonhosted.org/packages/66/95/1fa6a101eb9d5bec042b87e5ca9c8fc349b75961beca6306f95af5cd5539/ty-0.0.44-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b15f01ecb4e2b46c05a1769293f9d32c3d4a1e4e7dfccf37c604d705dc3e3f4", size = 12476121, upload-time = "2026-06-05T03:33:51.529Z" }, + { url = "https://files.pythonhosted.org/packages/72/6a/da4b45b1229d39207c6140681c2aaf4f5691bcb1dc830b84450ca25c8f57/ty-0.0.44-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:edd32b7467af509c99c0244c2226a4e4c03400699003ec33373282ab931654d9", size = 12091340, upload-time = "2026-06-05T03:33:36.289Z" }, + { url = "https://files.pythonhosted.org/packages/16/c7/e1c9260ea5188195962ff1214ace418b5d69187e8fa7c0a1ec4994b8071b/ty-0.0.44-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503a585f4007387c3afc58bae23a7ca1b9f236cbdb1a881dc36110655ceb1937", size = 11986201, upload-time = "2026-06-05T03:34:00.624Z" }, + { url = "https://files.pythonhosted.org/packages/92/f9/312bb112da9b1a7da295bb0426be85e72ad48da4e4266c36d77256b4058d/ty-0.0.44-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d28bcfa83243d77c2316944e8cf197f73597bf17d1ddc047d0b10a762531252", size = 12168475, upload-time = "2026-06-05T03:33:30.386Z" }, + { url = "https://files.pythonhosted.org/packages/02/de/64978d603f6c3e5dd7cb97eca2214567d8ad0c85fa4a7435b7852ae4b779/ty-0.0.44-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:56fd2dd0192def189715b25f5338f6222fb827884dc34111e50aa1c4e061cee5", size = 11292937, upload-time = "2026-06-05T03:34:06.448Z" }, + { url = "https://files.pythonhosted.org/packages/64/63/a625d8a3c71dcaa01988d330f849c465fe72ead4b0bbab44fe4bd6e672b5/ty-0.0.44-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7f8d990489032de1984e73c159f3e760d754cf83a602b874827d943821f63595", size = 11421560, upload-time = "2026-06-05T03:33:23.995Z" }, + { url = "https://files.pythonhosted.org/packages/99/96/61aeba0e629b0c91bd316ff94d00e38817ec493ae4316f39508988daa287/ty-0.0.44-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f61ffe72996a755432922fe90b28db593f572eb5cbf48e3ef4e67b282533d1b0", size = 11580282, upload-time = "2026-06-05T03:34:03.308Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f7/256e1538ce21cab67b381201444c42454de69d310059c4929d92a0ee9c48/ty-0.0.44-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2b237a143bac4f30cec9257d45f01e72da97030a80a09a2b69cfef065f09c37f", size = 12085723, upload-time = "2026-06-05T03:33:45.953Z" }, + { url = "https://files.pythonhosted.org/packages/d3/76/ec3957c10872643a98db7a7895101ad89c5b7cba4bc6c4aebbbfc91756cc/ty-0.0.44-py3-none-win32.whl", hash = "sha256:6a24586c65419223ac5bab4822d49ab493a5d19ea2a897514284c232b9d6166a", size = 10892978, upload-time = "2026-06-05T03:34:12.603Z" }, + { url = "https://files.pythonhosted.org/packages/a5/7d/ba24050432196e7d7f03945e5c379951593c48e04e5c5d5275cfc4624791/ty-0.0.44-py3-none-win_amd64.whl", hash = "sha256:8cccb27e348c89a9733fbad1b2efadfbad79b107c7e52adb52dfd8a70156a38d", size = 11987058, upload-time = "2026-06-05T03:33:42.692Z" }, + { url = "https://files.pythonhosted.org/packages/71/34/16ec3f1fec75292d9c56a8b5fef037ceaba85a5c30562206c1a245a00a67/ty-0.0.44-py3-none-win_arm64.whl", hash = "sha256:58049504e7a12bf1957f24a5384a332c94d5590127083a80db5e5a1bed34190b", size = 11329961, upload-time = "2026-06-05T03:33:39.427Z" }, ] [[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]] @@ -2657,43 +2369,43 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949 } +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611 }, + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, ] [[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 = "urllib3" version = "2.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602 } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087 }, + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, ] [[package]] name = "wcwidth" version = "0.8.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/49/b4/51fe890511f0f242d07cb1ebe6a5b6db417262b9d2568b460347c57d95cc/wcwidth-0.8.1.tar.gz", hash = "sha256:faf5b4a5366a72dc49cad48cdf21f52bdf63bdda995178e483ba247ff79089b9", size = 1466072 } +sdist = { url = "https://files.pythonhosted.org/packages/49/b4/51fe890511f0f242d07cb1ebe6a5b6db417262b9d2568b460347c57d95cc/wcwidth-0.8.1.tar.gz", hash = "sha256:faf5b4a5366a72dc49cad48cdf21f52bdf63bdda995178e483ba247ff79089b9", size = 1466072, upload-time = "2026-06-08T05:57:23.146Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/6e/95b0e537de1f4d4301f76f944642c6da50d1511cc7b3d64dc418a66c7509/wcwidth-0.8.1-py3-none-any.whl", hash = "sha256:f453740b1e4a4f3291faa37944c555d71056c4da08d59809b307ef4feba695c8", size = 323092 }, + { url = "https://files.pythonhosted.org/packages/bd/6e/95b0e537de1f4d4301f76f944642c6da50d1511cc7b3d64dc418a66c7509/wcwidth-0.8.1-py3-none-any.whl", hash = "sha256:f453740b1e4a4f3291faa37944c555d71056c4da08d59809b307ef4feba695c8", size = 323092, upload-time = "2026-06-08T05:57:21.413Z" }, ] [[package]] name = "wget" version = "3.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/47/6a/62e288da7bcda82b935ff0c6cfe542970f04e29c756b0e147251b2fb251f/wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061", size = 10857 } +sdist = { url = "https://files.pythonhosted.org/packages/47/6a/62e288da7bcda82b935ff0c6cfe542970f04e29c756b0e147251b2fb251f/wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061", size = 10857, upload-time = "2015-10-22T15:26:37.51Z" } [[package]] name = "xarray" @@ -2704,16 +2416,16 @@ dependencies = [ { name = "packaging" }, { name = "pandas" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311 } +sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311, upload-time = "2026-04-13T19:45:36.688Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326 }, + { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326, upload-time = "2026-04-13T19:45:34.659Z" }, ] [[package]] name = "zipp" version = "4.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214 } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238 }, + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, ] From f7692ea4347dda1a7e5faadad3b1e37402b9c057 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 10:56:38 +0100 Subject: [PATCH 62/95] Bump earthkit-workflows versions --- pproc-core/pyproject.toml | 4 +- pproc-core/tests/workflows/test_fluent.py | 63 ----------------------- pproc-core/uv.lock | 10 ++-- 3 files changed, 7 insertions(+), 70 deletions(-) delete mode 100644 pproc-core/tests/workflows/test_fluent.py diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 857a5103..8a080e64 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -33,11 +33,11 @@ dependencies = [ "code-meters", "conflator>=0.1.8", "earthkit-time", - "earthkit-workflows[vizualize]>=0.15.1", + "earthkit-workflows[vizualize]>=0.15.4", "numpy", "pandas", "pydantic", - "qubed<=0.3.1", + "qubed>=0.3.0,<0.4.4", ] scripts.ppcore-config = "ppcore.config:main" diff --git a/pproc-core/tests/workflows/test_fluent.py b/pproc-core/tests/workflows/test_fluent.py deleted file mode 100644 index ca795f59..00000000 --- a/pproc-core/tests/workflows/test_fluent.py +++ /dev/null @@ -1,63 +0,0 @@ -# (C) Copyright 2024- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - -import os -import tempfile - -import pytest -import xarray as xr -from earthkit.workflows.fluent import Node -from earthkit.workflows.fluent import Payload -from earthkit.workflows.graph import Graph -from earthkit.workflows.graph import deduplicate_nodes -from earthkit.workflows.nodetree import nodetree_from_dict - -from earthkit.workflows.plugins.pproc.fluent import Action - - -@pytest.mark.parametrize( - "inputs, nnodes", - [ - [[["2t", "2d", "10u", "10v"], ["2t", "10u", "10v"]], 8], - [[["167", "169", "165", "166"], ["167", "165", "166"]], 9], - ], - ids=["match-names", "no-match"], -) -def test_thermal(inputs, nnodes): - action = Action( - nodetree_from_dict( - { - "/": xr.DataArray( - data=[ - Node(Payload(print, [x]), name=str(x)) - for x in range(len(inputs[0])) - ], - dims=["param"], - coords={"param": inputs[0]}, - ) - } - ) - ) - graph = Graph([]) - for index, param in enumerate(["nefft", "wcf"]): - new_action = action.sel(param=inputs[index]).thermal_index(param) - graph += new_action.graph() - graph = deduplicate_nodes(graph) - from earthkit.workflows.visualise import visualise - - with tempfile.TemporaryDirectory() as td: - # NOTE `visualise` calls some dubious library which always generates javascript - # in the current directory, despite the generated html being elsewhere. We chdir - # to mitigate the pollution - cwd = os.getcwd() - os.chdir(td) - visualise(graph, "test.html") - os.chdir(cwd) - nodes = list(graph.nodes()) - assert len(nodes) == nnodes diff --git a/pproc-core/uv.lock b/pproc-core/uv.lock index a1decb3e..24a820ef 100644 --- a/pproc-core/uv.lock +++ b/pproc-core/uv.lock @@ -426,7 +426,7 @@ wheels = [ [[package]] name = "earthkit-workflows" -version = "0.15.2" +version = "0.15.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "array-api-compat" }, @@ -442,9 +442,9 @@ dependencies = [ { name = "sortedcontainers" }, { name = "xarray" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/c6/8fd4b42984abff59eaf7bc2bc727a713c4b65539e55324b354aef2795fad/earthkit_workflows-0.15.2.tar.gz", hash = "sha256:616a3065fd14d4be282327048898355f3d4f972b8a648bbb87cbed9329c83202", size = 10865493, upload-time = "2026-07-08T09:20:38.402Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ed/06/79fb057cfd15a979b4ecc7e61f4620551671b5095c218d29b5a4dc7109a4/earthkit_workflows-0.15.4.tar.gz", hash = "sha256:3c5c55872d718992476866c8c6a013426544df4f9c5055dc3bfe68bba5490df4", size = 10866443, upload-time = "2026-07-29T09:49:59.207Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/45/835afbb6254535370fb0f1917607e7b1b1a0a737a155d5e2f8f2b2ad3e88/earthkit_workflows-0.15.2-py3-none-any.whl", hash = "sha256:ba9ac562c0b57bc05a380b0a2d9881c1c261bab68912491ed431fb9a9da20f0d", size = 217575, upload-time = "2026-07-08T09:20:37.055Z" }, + { url = "https://files.pythonhosted.org/packages/f7/15/486d3f4a2ac02dd913fa1d79b59440575c987d8f4caf363d209471badb89/earthkit_workflows-0.15.4-py3-none-any.whl", hash = "sha256:1b31130e17bdb5160baf2d791812edecd84632f78e0c512aac9a8854d83f9a1a", size = 214914, upload-time = "2026-07-29T09:49:57.226Z" }, ] [package.optional-dependencies] @@ -1282,11 +1282,11 @@ requires-dist = [ { name = "code-meters" }, { name = "conflator", specifier = ">=0.1.8" }, { name = "earthkit-time" }, - { name = "earthkit-workflows", extras = ["vizualize"], specifier = ">=0.15.1" }, + { name = "earthkit-workflows", extras = ["vizualize"], specifier = ">=0.15.4" }, { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, - { name = "qubed", specifier = "<=0.3.1" }, + { name = "qubed", specifier = ">=0.3.0,<0.4.4" }, ] [package.metadata.requires-dev] From dcb0ad0d02f40ae5868d7d0760fe4dd94991acd0 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 10:56:56 +0100 Subject: [PATCH 63/95] Revert dependency removal --- pproc/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index 35d470ed..59e1638f 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -36,6 +36,7 @@ dependencies = [ "xarray", ] optional-dependencies.tcycl = [ + "pyinfero @ git+ssh://git@github.com/ecmwf/infero.git@0.3.1#subdirectory=src/infero/api/pyinfero", "wget", ] scripts.pproc-accumulate = "pproc.accumulate:main" From f1fd47acb95b19f5625672a3ec9e07de9f21edce Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 11:45:30 +0100 Subject: [PATCH 64/95] Bug fix different rate --- pproc-core/src/ppcore/configs/common/accumulation.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pproc-core/src/ppcore/configs/common/accumulation.py b/pproc-core/src/ppcore/configs/common/accumulation.py index 02e08f75..2f96f608 100644 --- a/pproc-core/src/ppcore/configs/common/accumulation.py +++ b/pproc-core/src/ppcore/configs/common/accumulation.py @@ -111,11 +111,10 @@ def create_action(self) -> dict: return { "operation": Payload( self.payload, - kwargs={"factor": self.factor}, + kwargs={"factor": self.factor, "metadata": self.metadata}, metadata={"environment": ["ppruntime"]}, ), "coords": self.coords, - "metadata": self.metadata, "deaccumulate": self.deaccumulate, "name": self.name, } From a9fa1af716adcfe2cfead53820ccd26e498792ab Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 12:04:12 +0100 Subject: [PATCH 65/95] Fix vod2uv --- pproc-runtime/src/ppruntime/io.py | 9 ++++++--- pproc-runtime/tests/test_io.py | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pproc-runtime/src/ppruntime/io.py b/pproc-runtime/src/ppruntime/io.py index 9b7ce1dd..cebcb7a7 100644 --- a/pproc-runtime/src/ppruntime/io.py +++ b/pproc-runtime/src/ppruntime/io.py @@ -32,6 +32,9 @@ def mir_job( mir_options: dict, cache: Optional[str] = None, ) -> FieldList: + # Convert vod2uv bool to string int + if "vod2uv" in mir_options: + mir_options["vod2uv"] = "1" if mir_options["vod2uv"] else "0" job = mir.Job(**mir_options) # type: ignore[ty:unresolved-attribute] stream = BytesIO() job.execute(input, stream) @@ -49,7 +52,7 @@ def fdb_retrieve(request: dict, stream: bool = False, **kwargs) -> FieldList: if mir_options is None: return from_source("fdb", request, stream=stream, read_all=True, **kwargs) # type: ignore[ty:invalid-return-type] - if mir_options.get("vod2uv", "0") == "1": + if mir_options.get("vod2uv", False): stream = False reader: FieldList = from_source( @@ -58,7 +61,7 @@ def fdb_retrieve(request: dict, stream: bool = False, **kwargs) -> FieldList: if stream: return mir_job(reader._source._stream, mir_options) # type: ignore[ty:unresolved-attribute] - if mir_options.get("vod2uv", "0") == "1": + if mir_options.get("vod2uv", False): if len(request["param"]) != 2: raise ValueError("Wind vod2uv requires two parameters") inp = mir.MultiDimensionalGribFileInput(reader.path, 2) # type: ignore[ty:unresolved-attribute] @@ -75,7 +78,7 @@ def mars_retrieve(request: dict, **kwargs) -> FieldList: if mir_options is None: return ds - if mir_options.get("vod2uv", "0") == "1": + if mir_options.get("vod2uv", False): if len(request["param"]) != 2: raise ValueError("Wind vod2uv requires two parameters") inp = mir.MultiDimensionalGribFileInput(ds.path, 2) # type: ignore[ty:unresolved-attribute] diff --git a/pproc-runtime/tests/test_io.py b/pproc-runtime/tests/test_io.py index bff6ea1d..079812b2 100644 --- a/pproc-runtime/tests/test_io.py +++ b/pproc-runtime/tests/test_io.py @@ -40,7 +40,7 @@ "param": [138, 155], "levtype": "pl", "levelist": [250, 850], - "interpolate": {"grid": "O640", "vod2uv": "1"}, + "interpolate": {"grid": "O640", "vod2uv": True}, }, ], ids=["default", "interpolate", "wind"], @@ -68,7 +68,7 @@ def test_mars_retrieve(overrides): "param": [138, 155], "levtype": "pl", "levelist": [250, 850], - "interpolate": {"grid": "O640", "vod2uv": "1"}, + "interpolate": {"grid": "O640", "vod2uv": True}, }, ], ids=["default", "interpolate", "wind"], From e4ae81d0ebfa28840efbc6cf1d77cbd914f77071 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 12:15:09 +0100 Subject: [PATCH 66/95] Bug fix accumulation --- pproc-core/pyproject.toml | 2 +- pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 8a080e64..101db83a 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -37,7 +37,7 @@ dependencies = [ "numpy", "pandas", "pydantic", - "qubed>=0.3.0,<0.4.4", + "qubed>=0.3,<0.4.4", ] scripts.ppcore-config = "ppcore.config:main" diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 1896c2fd..b294646b 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -770,10 +770,13 @@ def _accum_transform( ) ) else: + if isinstance(operation, fluent.Payload): + operation.kwargs.setdefault("metadata", {}).update(accum_metadata) + else: + kwargs["metadata"] = accum_metadata accum_action = accum_action._wrapped_reduction( operation, dim=dim, - metadata=accum_metadata, **kwargs, ) From 38613dc98363c2b105150b9d83e701066234dd28 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 12:25:09 +0100 Subject: [PATCH 67/95] Update workflows --- .github/workflows/cd-ppcore.yml | 22 ++++++------------- .github/workflows/cd-pproc.yml | 35 ++++++------------------------ .github/workflows/cd-ppruntime.yml | 23 +++++++------------- .github/workflows/ci.yml | 8 +++---- 4 files changed, 26 insertions(+), 62 deletions(-) diff --git a/.github/workflows/cd-ppcore.yml b/.github/workflows/cd-ppcore.yml index 251501c9..010f6e53 100644 --- a/.github/workflows/cd-ppcore.yml +++ b/.github/workflows/cd-ppcore.yml @@ -27,23 +27,15 @@ jobs: - uses: actions/checkout@v4 with: ref: ${{ inputs.tag }} - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python_version }} - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - cd pproc-core - pip install -e . - pip install pytest - - - name: Run tests + - uses: astral-sh/setup-uv@v7 + - name: Run checks and tests run: | cd pproc-core - pytest tests/ -v + uv sync --python "${{ matrix.python_version }}" --all-packages + uv run prek --directory . --config ../.pre-commit-config.yaml + if [ -d "tests" ]; then + uv run -m pytest tests/ -v + fi publish: needs: test diff --git a/.github/workflows/cd-pproc.yml b/.github/workflows/cd-pproc.yml index 346bd943..b99c17b5 100644 --- a/.github/workflows/cd-pproc.yml +++ b/.github/workflows/cd-pproc.yml @@ -24,36 +24,15 @@ jobs: matrix: python_version: ["3.11", "3.12", "3.13"] steps: - - uses: actions/checkout@v4 - with: - ref: ${{ inputs.tag }} - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python_version }} - - - name: Install pproc-runtime - run: | - python -m pip install --upgrade pip - cd pproc-runtime - pip install -e . - - - name: Install pproc-core - run: | - cd pproc-core - pip install -e . - - - name: Install pproc dependencies - run: | - cd pproc - pip install -e . - pip install pytest - - - name: Run tests + - uses: astral-sh/setup-uv@v7 + - name: Run pproc tests run: | cd pproc - pytest tests/ -v + uv sync --python "${{ matrix.python_version }}" --all-packages + uv run prek --directory . --config ../.pre-commit-config.yaml + if [ -d "tests" ]; then + uv run --prerelease allow -m tests/ -v + fi publish: needs: test diff --git a/.github/workflows/cd-ppruntime.yml b/.github/workflows/cd-ppruntime.yml index 8e089427..1153402e 100644 --- a/.github/workflows/cd-ppruntime.yml +++ b/.github/workflows/cd-ppruntime.yml @@ -27,23 +27,16 @@ jobs: - uses: actions/checkout@v4 with: ref: ${{ inputs.tag }} - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python_version }} - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - cd pproc-runtime - pip install -e . - pip install pytest - - - name: Run tests + - uses: astral-sh/setup-uv@v7 + - name: Run checks and tests run: | cd pproc-runtime - pytest tests/ -v + uv sync --python "${{ matrix.python_version }}" --all-packages + uv run prek --directory . --config ../.pre-commit-config.yaml + uv run ty check + if [ -d "tests" ]; then + uv run -m pytest tests/ -v + fi publish: needs: test diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f3d8b39..78d548c4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,11 +25,11 @@ jobs: run: | cd pproc-runtime export UV_FROZEN=1 - uv sync --prerelease allow --python "${{ matrix.python_version }}" --all-packages - uv run --prerelease allow prek --directory . --config ../.pre-commit-config.yaml - uv run --prerelease allow ty check + uv sync --python "${{ matrix.python_version }}" --all-packages + uv run prek --directory . --config ../.pre-commit-config.yaml + uv run ty check if [ -d "tests" ]; then - uv run --prerelease allow -m pytest tests/ -v + uv run -m pytest tests/ -v fi ppcore_test: From dc29ceccb58a05b1e4bdee450921a6fcc9dfd9ed Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 13:37:10 +0100 Subject: [PATCH 68/95] Add tag prefix for pproc-core and pproc-runtime --- pproc-core/pyproject.toml | 4 ++++ pproc-runtime/pyproject.toml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 101db83a..8b47fa91 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -66,6 +66,10 @@ root = ".." local_scheme = "no-local-version" fallback_version = "0.0.0" +[tool.setuptools_scm.tag] +prefix = "ppcore-" +strict = true + [tool.ruff] lint.ignore = [ "E722", "E731", "E741" ] diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index 319b05f3..36283a36 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -65,6 +65,10 @@ root = ".." local_scheme = "no-local-version" fallback_version = "0.0.0" +[tool.setuptools_scm.tag] +prefix = "ppruntime-" +strict = true + [tool.ruff] lint.ignore = [ "E722", "E731", "E741" ] From 97f043d2cb7a404b36d06fade3b9de393d8ad2c5 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 14:12:39 +0100 Subject: [PATCH 69/95] Tidy --- pproc-core/pyproject.toml | 2 +- pproc-runtime/pyproject.toml | 2 +- pproc-runtime/tests/conftest.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 8b47fa91..11f8aac6 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -68,7 +68,7 @@ fallback_version = "0.0.0" [tool.setuptools_scm.tag] prefix = "ppcore-" -strict = true +strict = true [tool.ruff] lint.ignore = [ "E722", "E731", "E741" ] diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index 36283a36..3f879764 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -67,7 +67,7 @@ fallback_version = "0.0.0" [tool.setuptools_scm.tag] prefix = "ppruntime-" -strict = true +strict = true [tool.ruff] lint.ignore = [ "E722", "E731", "E741" ] diff --git a/pproc-runtime/tests/conftest.py b/pproc-runtime/tests/conftest.py index ac51baa0..5119c11d 100644 --- a/pproc-runtime/tests/conftest.py +++ b/pproc-runtime/tests/conftest.py @@ -9,7 +9,7 @@ import os import requests -from typing import List, Generator +from typing import List, Iterator import pytest import shutil import tempfile @@ -62,7 +62,7 @@ def populate_fdb( @pytest.fixture(scope="session") -def fdb() -> Generator[pyfdb.FDB]: +def fdb() -> Iterator[pyfdb.FDB]: tmpdir = tempfile.mkdtemp() print("Using temporary directory", tmpdir) os.makedirs(f"{tmpdir}/etc/fdb") From 60e40a0d225a716d835dff179cf65a6ddb90eca3 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 14:26:03 +0100 Subject: [PATCH 70/95] Add licenses --- LICENSE | 79 +++++ LICENSES/Apache-2.0.txt | 73 +++++ NOTICE | 8 + pproc-core/LICENSE | 280 +++++------------- pproc-core/README.md | 14 +- pproc-core/setup.py | 3 - .../plugins/pproc/config/accumulation.py | 4 + .../workflows/plugins/pproc/config/mask.py | 4 + .../plugins/pproc/config/threshold.py | 4 + .../workflows/plugins/pproc/fluent.py | 9 +- .../plugins/pproc/metadata/accumulation.py | 4 + .../plugins/pproc/metadata/threshold.py | 4 + .../workflows/plugins/pproc/utils/metadata.py | 4 + .../plugins/pproc/utils/pydantic_utils.py | 4 + .../workflows/plugins/pproc/utils/request.py | 9 +- pproc-core/src/ppcore/config.py | 9 +- pproc-core/src/ppcore/configs/__init__.py | 4 + .../src/ppcore/configs/common/accumulation.py | 4 + pproc-core/src/ppcore/configs/common/input.py | 9 +- .../src/ppcore/configs/common/output.py | 9 +- .../ppcore/configs/common/preprocessing.py | 9 +- .../src/ppcore/configs/common/source.py | 4 + pproc-core/src/ppcore/configs/common/stats.py | 4 + .../src/ppcore/configs/common/target.py | 9 +- .../src/ppcore/configs/entrypoint/base.py | 4 + .../ppcore/configs/entrypoint/execution.py | 9 +- .../src/ppcore/configs/entrypoint/log.py | 9 +- .../src/ppcore/configs/product/__init__.py | 4 + .../src/ppcore/configs/product/ensemble.py | 9 +- pproc-core/src/ppcore/product.py | 19 +- pproc-core/src/ppcore/products/__init__.py | 4 + pproc-core/src/ppcore/products/base.py | 4 + pproc-core/src/ppcore/products/ensemble.py | 10 +- pproc-core/src/ppcore/schema/__init__.py | 9 +- pproc-core/src/ppcore/schema/base.py | 9 +- pproc-core/src/ppcore/schema/config.py | 9 +- pproc-core/src/ppcore/schema/deriver.py | 9 +- pproc-core/src/ppcore/schema/filters.py | 4 + pproc-core/src/ppcore/schema/forecast.py | 4 + pproc-core/src/ppcore/schema/input.py | 9 +- pproc-core/src/ppcore/schema/schema.py | 9 +- pproc-core/src/ppcore/schema/step.py | 9 +- pproc-core/src/ppcore/utils/dicts.py | 9 +- pproc-core/src/ppcore/utils/entrypoint.py | 4 + pproc-core/src/ppcore/utils/helpers.py | 4 + pproc-core/src/ppcore/utils/io.py | 4 + pproc-core/src/ppcore/utils/mars.py | 4 + pproc-core/src/ppcore/utils/qube.py | 4 + pproc-core/src/ppcore/utils/requests.py | 4 + pproc-core/src/ppcore/utils/stepseq.py | 9 +- pproc-core/tests/conftest.py | 9 +- .../ppcore/configs/entrypoint/test_log.py | 9 +- .../tests/ppcore/products/test_products.py | 9 +- .../tests/ppcore/schema/test_config_schema.py | 9 +- .../tests/ppcore/schema/test_deriver.py | 4 + .../tests/ppcore/schema/test_input_schema.py | 9 +- pproc-core/tests/ppcore/schema/test_schema.py | 9 +- .../tests/ppcore/schema/test_step_schema.py | 9 +- pproc-core/tests/ppcore/utils/test_dicts.py | 4 + pproc-core/tests/ppcore/utils/test_mars.py | 9 +- pproc-core/tests/ppcore/utils/test_stepseq.py | 9 +- pproc-runtime/LICENSE | 280 +++++------------- pproc-runtime/README.md | 23 +- pproc-runtime/pyproject.toml | 8 - pproc-runtime/src/ppruntime/accumulation.py | 4 + pproc-runtime/src/ppruntime/io.py | 9 +- pproc-runtime/src/ppruntime/metadata.py | 9 +- pproc-runtime/src/ppruntime/stats.py | 9 +- .../src/ppruntime/thermal_indices.py | 4 + .../src/ppruntime/thermo/__init__.py | 9 +- pproc-runtime/src/ppruntime/thermo/helpers.py | 9 +- pproc-runtime/src/ppruntime/utils.py | 4 + pproc-runtime/tests/conftest.py | 9 +- pproc-runtime/tests/test_accumulation.py | 4 + pproc-runtime/tests/test_io.py | 9 +- pproc-runtime/tests/test_thermal_indices.py | 4 + 76 files changed, 537 insertions(+), 695 deletions(-) create mode 100644 LICENSE create mode 100644 LICENSES/Apache-2.0.txt create mode 100644 NOTICE delete mode 100644 pproc-core/setup.py diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..19b15663 --- /dev/null +++ b/LICENSE @@ -0,0 +1,79 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +------------------------------------------------------------------------------- + +In applying this licence, ECMWF does not waive the privileges and immunities +granted to it by virtue of its status as an intergovernmental organisation +nor does it submit to any jurisdiction. \ No newline at end of file diff --git a/LICENSES/Apache-2.0.txt b/LICENSES/Apache-2.0.txt new file mode 100644 index 00000000..137069b8 --- /dev/null +++ b/LICENSES/Apache-2.0.txt @@ -0,0 +1,73 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/NOTICE b/NOTICE new file mode 100644 index 00000000..e687ebf2 --- /dev/null +++ b/NOTICE @@ -0,0 +1,8 @@ +European Centre for Medium-Range Weather Forecasts (ECMWF) +Copyright 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) + +This product includes software developed at ECMWF (https://www.ecmwf.int). + +In applying this licence, ECMWF does not waive the privileges and immunities +granted to it by virtue of its status as an intergovernmental organisation +nor does it submit to any jurisdiction. \ No newline at end of file diff --git a/pproc-core/LICENSE b/pproc-core/LICENSE index 32d3e94a..19b15663 100644 --- a/pproc-core/LICENSE +++ b/pproc-core/LICENSE @@ -1,201 +1,79 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024, European Centre for Medium Range Weather Forecasts. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +------------------------------------------------------------------------------- + +In applying this licence, ECMWF does not waive the privileges and immunities +granted to it by virtue of its status as an intergovernmental organisation +nor does it submit to any jurisdiction. \ No newline at end of file diff --git a/pproc-core/README.md b/pproc-core/README.md index 5f129fa2..6d7f22f1 100644 --- a/pproc-core/README.md +++ b/pproc-core/README.md @@ -1,4 +1,4 @@ -# earthkit-workflows-pproc +# pproc-core

@@ -21,14 +21,4 @@ > \[!IMPORTANT\] > This software is **Sandbox** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). -Earthkit-Workflows-PProc is a Python library for constructing task graphs associated to forecast post-processing products provided by [PProc](https://github.com/ecmwf/pproc). These task graphs are an extension of the [earthkit-workflows](https://github.com/ecmwf/earthkit-workflows) framework, in which the graphs can be executed. - -## Installation - -The workflows defined in this plugin depend on PProc. Please follow the instructions in https://github.com/ecmwf/pproc for installing PProc and it's dependencies, after which this plugin can be installed via `pip` with: - -```bash -pip install git+https://github.com/ecmwf/earthkit-workflows-pproc.git -``` - -For development, you can use `pip install -e .` +ppcore-core is a Python library for constructing task graphs associated to forecast post-processing products provided. These task graphs are an extension of the [earthkit-workflows](https://github.com/ecmwf/earthkit-workflows) framework, in which the graphs can be executed. diff --git a/pproc-core/setup.py b/pproc-core/setup.py deleted file mode 100644 index 60684932..00000000 --- a/pproc-core/setup.py +++ /dev/null @@ -1,3 +0,0 @@ -from setuptools import setup - -setup() diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py index aec39afc..b5239c2d 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/accumulation.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Literal, Optional, Union, Annotated import datetime diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py index 5d83cb70..83d6605e 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/mask.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Any, Literal from pydantic import model_validator diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py b/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py index 1a7d9a08..def584d5 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/config/threshold.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from pydantic import model_validator from typing import Any, Optional, Literal diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index b294646b..fbf588b6 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -1,11 +1,6 @@ -# (C) Copyright 2024- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 from __future__ import annotations import inspect diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py index 2676c954..d38eb9e0 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/accumulation.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Optional from earthkit.workflows.plugins.pproc.config.accumulation import Coords from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py index a6a885be..f30aa252 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/metadata/threshold.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Optional from earthkit.workflows.plugins.pproc.config.threshold import Threshold diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py index f633082e..ea951e1b 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/metadata.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + import re _TEMPLATE_RE = re.compile("^{([a-z_]*)}:?([a-z]*)$", re.I) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/pydantic_utils.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/pydantic_utils.py index e2f6095e..97a37292 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/pydantic_utils.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/pydantic_utils.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from pydantic import BaseModel, ConfigDict diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py index 356f5bd2..21b1a3f9 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/utils/request.py @@ -1,11 +1,6 @@ -# (C) Copyright 2024- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import copy import itertools diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py index 016660c8..33e07f6b 100644 --- a/pproc-core/src/ppcore/config.py +++ b/pproc-core/src/ppcore/config.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import argparse import sys diff --git a/pproc-core/src/ppcore/configs/__init__.py b/pproc-core/src/ppcore/configs/__init__.py index 551f0ba1..e0720813 100644 --- a/pproc-core/src/ppcore/configs/__init__.py +++ b/pproc-core/src/ppcore/configs/__init__.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + import os from typing import Iterator, Optional, Union diff --git a/pproc-core/src/ppcore/configs/common/accumulation.py b/pproc-core/src/ppcore/configs/common/accumulation.py index 2f96f608..3549086d 100644 --- a/pproc-core/src/ppcore/configs/common/accumulation.py +++ b/pproc-core/src/ppcore/configs/common/accumulation.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Optional, Union, Literal, Annotated, Any from pydantic import Discriminator, Field, Tag, field_validator, model_validator diff --git a/pproc-core/src/ppcore/configs/common/input.py b/pproc-core/src/ppcore/configs/common/input.py index 17cc631c..33c6da85 100644 --- a/pproc-core/src/ppcore/configs/common/input.py +++ b/pproc-core/src/ppcore/configs/common/input.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 from typing import Any, ClassVar diff --git a/pproc-core/src/ppcore/configs/common/output.py b/pproc-core/src/ppcore/configs/common/output.py index c9d250d7..ef753672 100644 --- a/pproc-core/src/ppcore/configs/common/output.py +++ b/pproc-core/src/ppcore/configs/common/output.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 from typing import Any, ClassVar, Union diff --git a/pproc-core/src/ppcore/configs/common/preprocessing.py b/pproc-core/src/ppcore/configs/common/preprocessing.py index 4ebebf1b..85d49c8c 100644 --- a/pproc-core/src/ppcore/configs/common/preprocessing.py +++ b/pproc-core/src/ppcore/configs/common/preprocessing.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 from typing import Annotated from typing import Any diff --git a/pproc-core/src/ppcore/configs/common/source.py b/pproc-core/src/ppcore/configs/common/source.py index a5c14ba1..fc5b89a9 100644 --- a/pproc-core/src/ppcore/configs/common/source.py +++ b/pproc-core/src/ppcore/configs/common/source.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Optional, Literal, Annotated, Union from pydantic import Field diff --git a/pproc-core/src/ppcore/configs/common/stats.py b/pproc-core/src/ppcore/configs/common/stats.py index 21775ec5..b7e5c334 100644 --- a/pproc-core/src/ppcore/configs/common/stats.py +++ b/pproc-core/src/ppcore/configs/common/stats.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Literal, Any from pydantic import Field, model_validator diff --git a/pproc-core/src/ppcore/configs/common/target.py b/pproc-core/src/ppcore/configs/common/target.py index 37e98771..4ab4d63b 100644 --- a/pproc-core/src/ppcore/configs/common/target.py +++ b/pproc-core/src/ppcore/configs/common/target.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 from typing import Literal, Optional, Annotated, Union diff --git a/pproc-core/src/ppcore/configs/entrypoint/base.py b/pproc-core/src/ppcore/configs/entrypoint/base.py index 8ce1a057..506d68d3 100644 --- a/pproc-core/src/ppcore/configs/entrypoint/base.py +++ b/pproc-core/src/ppcore/configs/entrypoint/base.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + import yaml from annotated_types import Annotated from pydantic import Field, BeforeValidator diff --git a/pproc-core/src/ppcore/configs/entrypoint/execution.py b/pproc-core/src/ppcore/configs/entrypoint/execution.py index d26903f8..1ad33bd2 100644 --- a/pproc-core/src/ppcore/configs/entrypoint/execution.py +++ b/pproc-core/src/ppcore/configs/entrypoint/execution.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 from conflator import ConfigModel diff --git a/pproc-core/src/ppcore/configs/entrypoint/log.py b/pproc-core/src/ppcore/configs/entrypoint/log.py index 4a05f1a4..19119d4b 100644 --- a/pproc-core/src/ppcore/configs/entrypoint/log.py +++ b/pproc-core/src/ppcore/configs/entrypoint/log.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import logging from typing import Literal diff --git a/pproc-core/src/ppcore/configs/product/__init__.py b/pproc-core/src/ppcore/configs/product/__init__.py index bb93242d..a90327d5 100644 --- a/pproc-core/src/ppcore/configs/product/__init__.py +++ b/pproc-core/src/ppcore/configs/product/__init__.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + import logging from typing import Optional, Union from annotated_types import Annotated diff --git a/pproc-core/src/ppcore/configs/product/ensemble.py b/pproc-core/src/ppcore/configs/product/ensemble.py index d4e76376..c79b8ab2 100644 --- a/pproc-core/src/ppcore/configs/product/ensemble.py +++ b/pproc-core/src/ppcore/configs/product/ensemble.py @@ -1,11 +1,6 @@ -# (C) Copyright 2024- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 from typing import Any, Union, Literal, Annotated, Optional from pydantic import Field, model_validator diff --git a/pproc-core/src/ppcore/product.py b/pproc-core/src/ppcore/product.py index f29f58d6..64e68716 100644 --- a/pproc-core/src/ppcore/product.py +++ b/pproc-core/src/ppcore/product.py @@ -1,22 +1,7 @@ -#!/usr/bin/env python3 -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 -# -# (C) Copyright 1996- ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation nor -# does it submit to any jurisdiction. import sys import logging diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index 5b449631..39c1bc62 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + import os from typing import Optional, Union diff --git a/pproc-core/src/ppcore/products/base.py b/pproc-core/src/ppcore/products/base.py index 03cbf1f2..416aaf42 100644 --- a/pproc-core/src/ppcore/products/base.py +++ b/pproc-core/src/ppcore/products/base.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from abc import ABC from dataclasses import dataclass from typing import Iterator, Optional diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index cbecb4bd..19c8be27 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -1,11 +1,7 @@ -# (C) Copyright 2024- ECMWF. +# Copyright 2024 ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 from typing import Optional, Iterator from dataclasses import dataclass diff --git a/pproc-core/src/ppcore/schema/__init__.py b/pproc-core/src/ppcore/schema/__init__.py index 64e1349e..96793c76 100644 --- a/pproc-core/src/ppcore/schema/__init__.py +++ b/pproc-core/src/ppcore/schema/__init__.py @@ -1,8 +1,3 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 diff --git a/pproc-core/src/ppcore/schema/base.py b/pproc-core/src/ppcore/schema/base.py index 15601d86..ad010589 100644 --- a/pproc-core/src/ppcore/schema/base.py +++ b/pproc-core/src/ppcore/schema/base.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import copy import logging diff --git a/pproc-core/src/ppcore/schema/config.py b/pproc-core/src/ppcore/schema/config.py index d73e6f00..ff1d0dfc 100644 --- a/pproc-core/src/ppcore/schema/config.py +++ b/pproc-core/src/ppcore/schema/config.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import numpy as np diff --git a/pproc-core/src/ppcore/schema/deriver.py b/pproc-core/src/ppcore/schema/deriver.py index 537a37cb..3cf6c455 100644 --- a/pproc-core/src/ppcore/schema/deriver.py +++ b/pproc-core/src/ppcore/schema/deriver.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import bisect import datetime diff --git a/pproc-core/src/ppcore/schema/filters.py b/pproc-core/src/ppcore/schema/filters.py index d5bcbbb8..0aa819fc 100644 --- a/pproc-core/src/ppcore/schema/filters.py +++ b/pproc-core/src/ppcore/schema/filters.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from ppcore.utils.stepseq import fcmonth_to_steprange diff --git a/pproc-core/src/ppcore/schema/forecast.py b/pproc-core/src/ppcore/schema/forecast.py index 3c90b4d0..b4a39fd3 100644 --- a/pproc-core/src/ppcore/schema/forecast.py +++ b/pproc-core/src/ppcore/schema/forecast.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Optional, Annotated, Union, Literal, Self from dataclasses import dataclass from functools import cached_property diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index 94ced799..471d7da8 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import logging import itertools diff --git a/pproc-core/src/ppcore/schema/schema.py b/pproc-core/src/ppcore/schema/schema.py index 30728e11..5e3a8900 100644 --- a/pproc-core/src/ppcore/schema/schema.py +++ b/pproc-core/src/ppcore/schema/schema.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import os from typing import Iterator, Optional, Union, Literal, Any diff --git a/pproc-core/src/ppcore/schema/step.py b/pproc-core/src/ppcore/schema/step.py index 03c39f45..38740d98 100644 --- a/pproc-core/src/ppcore/schema/step.py +++ b/pproc-core/src/ppcore/schema/step.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import bisect from typing import Annotated diff --git a/pproc-core/src/ppcore/utils/dicts.py b/pproc-core/src/ppcore/utils/dicts.py index 0d5dd031..bafd902f 100644 --- a/pproc-core/src/ppcore/utils/dicts.py +++ b/pproc-core/src/ppcore/utils/dicts.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import collections import itertools diff --git a/pproc-core/src/ppcore/utils/entrypoint.py b/pproc-core/src/ppcore/utils/entrypoint.py index 538333bb..1ba648b7 100644 --- a/pproc-core/src/ppcore/utils/entrypoint.py +++ b/pproc-core/src/ppcore/utils/entrypoint.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Any diff --git a/pproc-core/src/ppcore/utils/helpers.py b/pproc-core/src/ppcore/utils/helpers.py index 1546e019..f846adbb 100644 --- a/pproc-core/src/ppcore/utils/helpers.py +++ b/pproc-core/src/ppcore/utils/helpers.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Any import numpy as np diff --git a/pproc-core/src/ppcore/utils/io.py b/pproc-core/src/ppcore/utils/io.py index 1539a5de..c3798487 100644 --- a/pproc-core/src/ppcore/utils/io.py +++ b/pproc-core/src/ppcore/utils/io.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Optional, Tuple import re diff --git a/pproc-core/src/ppcore/utils/mars.py b/pproc-core/src/ppcore/utils/mars.py index c1960b22..cd6473a3 100644 --- a/pproc-core/src/ppcore/utils/mars.py +++ b/pproc-core/src/ppcore/utils/mars.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Optional from datetime import datetime, date from math import ceil diff --git a/pproc-core/src/ppcore/utils/qube.py b/pproc-core/src/ppcore/utils/qube.py index 32c74ee1..9cdbbfec 100644 --- a/pproc-core/src/ppcore/utils/qube.py +++ b/pproc-core/src/ppcore/utils/qube.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from typing import Iterable from qubed import Qube diff --git a/pproc-core/src/ppcore/utils/requests.py b/pproc-core/src/ppcore/utils/requests.py index 4f8a5802..d623b934 100644 --- a/pproc-core/src/ppcore/utils/requests.py +++ b/pproc-core/src/ppcore/utils/requests.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + import copy import itertools from typing import Iterator, Optional, Iterable, Any diff --git a/pproc-core/src/ppcore/utils/stepseq.py b/pproc-core/src/ppcore/utils/stepseq.py index 7fc7ae3b..a41b4149 100644 --- a/pproc-core/src/ppcore/utils/stepseq.py +++ b/pproc-core/src/ppcore/utils/stepseq.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import datetime from typing import Iterator diff --git a/pproc-core/tests/conftest.py b/pproc-core/tests/conftest.py index b9a00a26..98d46628 100644 --- a/pproc-core/tests/conftest.py +++ b/pproc-core/tests/conftest.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import os from typing import Optional diff --git a/pproc-core/tests/ppcore/configs/entrypoint/test_log.py b/pproc-core/tests/ppcore/configs/entrypoint/test_log.py index 012317d3..73dd7809 100644 --- a/pproc-core/tests/ppcore/configs/entrypoint/test_log.py +++ b/pproc-core/tests/ppcore/configs/entrypoint/test_log.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import logging from unittest.mock import patch diff --git a/pproc-core/tests/ppcore/products/test_products.py b/pproc-core/tests/ppcore/products/test_products.py index bccbd572..9f33187b 100644 --- a/pproc-core/tests/ppcore/products/test_products.py +++ b/pproc-core/tests/ppcore/products/test_products.py @@ -1,11 +1,6 @@ -# (C) Copyright 2024- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import os diff --git a/pproc-core/tests/ppcore/schema/test_config_schema.py b/pproc-core/tests/ppcore/schema/test_config_schema.py index 44a6383e..daece7a4 100644 --- a/pproc-core/tests/ppcore/schema/test_config_schema.py +++ b/pproc-core/tests/ppcore/schema/test_config_schema.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import pytest from conftest import schema diff --git a/pproc-core/tests/ppcore/schema/test_deriver.py b/pproc-core/tests/ppcore/schema/test_deriver.py index b1b72e8f..14fc1eb1 100644 --- a/pproc-core/tests/ppcore/schema/test_deriver.py +++ b/pproc-core/tests/ppcore/schema/test_deriver.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + import pytest from pydantic import TypeAdapter diff --git a/pproc-core/tests/ppcore/schema/test_input_schema.py b/pproc-core/tests/ppcore/schema/test_input_schema.py index cf9218a7..10980f88 100644 --- a/pproc-core/tests/ppcore/schema/test_input_schema.py +++ b/pproc-core/tests/ppcore/schema/test_input_schema.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import pytest from conftest import schema diff --git a/pproc-core/tests/ppcore/schema/test_schema.py b/pproc-core/tests/ppcore/schema/test_schema.py index f1613c95..4e4c9df1 100644 --- a/pproc-core/tests/ppcore/schema/test_schema.py +++ b/pproc-core/tests/ppcore/schema/test_schema.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import pytest diff --git a/pproc-core/tests/ppcore/schema/test_step_schema.py b/pproc-core/tests/ppcore/schema/test_step_schema.py index c0abbadf..2beebbab 100644 --- a/pproc-core/tests/ppcore/schema/test_step_schema.py +++ b/pproc-core/tests/ppcore/schema/test_step_schema.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import pytest from conftest import schema diff --git a/pproc-core/tests/ppcore/utils/test_dicts.py b/pproc-core/tests/ppcore/utils/test_dicts.py index 30f01e72..81328a49 100644 --- a/pproc-core/tests/ppcore/utils/test_dicts.py +++ b/pproc-core/tests/ppcore/utils/test_dicts.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from ppcore.utils.dicts import dict_product diff --git a/pproc-core/tests/ppcore/utils/test_mars.py b/pproc-core/tests/ppcore/utils/test_mars.py index 4b47d183..25a5ba9f 100644 --- a/pproc-core/tests/ppcore/utils/test_mars.py +++ b/pproc-core/tests/ppcore/utils/test_mars.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 from datetime import date, datetime diff --git a/pproc-core/tests/ppcore/utils/test_stepseq.py b/pproc-core/tests/ppcore/utils/test_stepseq.py index 7691e848..9f88e006 100644 --- a/pproc-core/tests/ppcore/utils/test_stepseq.py +++ b/pproc-core/tests/ppcore/utils/test_stepseq.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import pytest from datetime import datetime diff --git a/pproc-runtime/LICENSE b/pproc-runtime/LICENSE index 32d3e94a..19b15663 100644 --- a/pproc-runtime/LICENSE +++ b/pproc-runtime/LICENSE @@ -1,201 +1,79 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024, European Centre for Medium Range Weather Forecasts. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +------------------------------------------------------------------------------- + +In applying this licence, ECMWF does not waive the privileges and immunities +granted to it by virtue of its status as an intergovernmental organisation +nor does it submit to any jurisdiction. \ No newline at end of file diff --git a/pproc-runtime/README.md b/pproc-runtime/README.md index 42a976ec..8f873bfe 100644 --- a/pproc-runtime/README.md +++ b/pproc-runtime/README.md @@ -1,3 +1,24 @@ # pproc-runtime -Contains functions required for execution of pproc entrypoints +

+ + Static Badge + + + + Code Coverage + + + + License: Apache 2.0 + + + + Latest Release + +

+ +> \[!IMPORTANT\] +> This software is **Sandbox** and subject to ECMWF's guidelines on [Software Maturity](https://github.com/ecmwf/codex/raw/refs/heads/main/Project%20Maturity). + +pproc-runtime contains the functions required at runtime for the execution of graphs constructed using pproc-core. diff --git a/pproc-runtime/pyproject.toml b/pproc-runtime/pyproject.toml index 3f879764..7812787b 100644 --- a/pproc-runtime/pyproject.toml +++ b/pproc-runtime/pyproject.toml @@ -1,11 +1,3 @@ -# (C) Copyright 2024 ECMWF. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. - [build-system] build-backend = "setuptools.build_meta" diff --git a/pproc-runtime/src/ppruntime/accumulation.py b/pproc-runtime/src/ppruntime/accumulation.py index 095a3e0c..7dee1372 100644 --- a/pproc-runtime/src/ppruntime/accumulation.py +++ b/pproc-runtime/src/ppruntime/accumulation.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + import array_api_compat from earthkit.data import FieldList diff --git a/pproc-runtime/src/ppruntime/io.py b/pproc-runtime/src/ppruntime/io.py index cebcb7a7..1a58b6eb 100644 --- a/pproc-runtime/src/ppruntime/io.py +++ b/pproc-runtime/src/ppruntime/io.py @@ -1,11 +1,6 @@ -# (C) Copyright 2024- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import shutil from io import BytesIO diff --git a/pproc-runtime/src/ppruntime/metadata.py b/pproc-runtime/src/ppruntime/metadata.py index 3ff2c016..2b80c264 100644 --- a/pproc-runtime/src/ppruntime/metadata.py +++ b/pproc-runtime/src/ppruntime/metadata.py @@ -1,11 +1,6 @@ -# (C) Copyright 2024- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 from typing import Optional diff --git a/pproc-runtime/src/ppruntime/stats.py b/pproc-runtime/src/ppruntime/stats.py index e5e716f9..1a4c0861 100644 --- a/pproc-runtime/src/ppruntime/stats.py +++ b/pproc-runtime/src/ppruntime/stats.py @@ -1,11 +1,6 @@ -# (C) Copyright 2024- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import logging from typing import Optional, Literal diff --git a/pproc-runtime/src/ppruntime/thermal_indices.py b/pproc-runtime/src/ppruntime/thermal_indices.py index 6c4dc5b9..eed44498 100644 --- a/pproc-runtime/src/ppruntime/thermal_indices.py +++ b/pproc-runtime/src/ppruntime/thermal_indices.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from earthkit.data import FieldList from earthkit.data.core.metadata import Metadata as ekMetadata import earthkit.meteo.solar diff --git a/pproc-runtime/src/ppruntime/thermo/__init__.py b/pproc-runtime/src/ppruntime/thermo/__init__.py index 64e1349e..96793c76 100644 --- a/pproc-runtime/src/ppruntime/thermo/__init__.py +++ b/pproc-runtime/src/ppruntime/thermo/__init__.py @@ -1,8 +1,3 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 diff --git a/pproc-runtime/src/ppruntime/thermo/helpers.py b/pproc-runtime/src/ppruntime/thermo/helpers.py index 3b044293..08ff8421 100644 --- a/pproc-runtime/src/ppruntime/thermo/helpers.py +++ b/pproc-runtime/src/ppruntime/thermo/helpers.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import earthkit.data from earthkit.data.core.metadata import Metadata diff --git a/pproc-runtime/src/ppruntime/utils.py b/pproc-runtime/src/ppruntime/utils.py index a9c7b303..5d3571b3 100644 --- a/pproc-runtime/src/ppruntime/utils.py +++ b/pproc-runtime/src/ppruntime/utils.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + from earthkit.data import FieldList from earthkit.data.core.metadata import Metadata as ekdMetadata diff --git a/pproc-runtime/tests/conftest.py b/pproc-runtime/tests/conftest.py index 5119c11d..1350fab3 100644 --- a/pproc-runtime/tests/conftest.py +++ b/pproc-runtime/tests/conftest.py @@ -1,11 +1,6 @@ -# (C) Copyright 2021- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import os import requests diff --git a/pproc-runtime/tests/test_accumulation.py b/pproc-runtime/tests/test_accumulation.py index 515b3379..485e5555 100644 --- a/pproc-runtime/tests/test_accumulation.py +++ b/pproc-runtime/tests/test_accumulation.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + import os import numpy as np diff --git a/pproc-runtime/tests/test_io.py b/pproc-runtime/tests/test_io.py index 079812b2..050f861b 100644 --- a/pproc-runtime/tests/test_io.py +++ b/pproc-runtime/tests/test_io.py @@ -1,11 +1,6 @@ -# (C) Copyright 2024- ECMWF. +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) # -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# -# In applying this licence, ECMWF does not waive the privileges and immunities -# granted to it by virtue of its status as an intergovernmental organisation -# nor does it submit to any jurisdiction. +# SPDX-License-Identifier: Apache-2.0 import os from datetime import datetime, timedelta diff --git a/pproc-runtime/tests/test_thermal_indices.py b/pproc-runtime/tests/test_thermal_indices.py index cb0b79ac..9687bdcb 100644 --- a/pproc-runtime/tests/test_thermal_indices.py +++ b/pproc-runtime/tests/test_thermal_indices.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2026 European Centre for Medium-Range Weather Forecasts (ECMWF) +# +# SPDX-License-Identifier: Apache-2.0 + import os import pytest from typing import Optional From 41b2405e307bd4d1369280ea8de51dcf5ef6fd7b Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 14:35:49 +0100 Subject: [PATCH 71/95] Restore pproc develop --- pproc/.gitignore | 2 +- pproc/MANIFEST.in | 2 +- pproc/pyproject.toml | 138 +- pproc/requirements.txt | 21 + pproc/src/pproc/Config.py | 4 +- pproc/src/pproc/__init__.py | 2 +- pproc/src/pproc/accum/__init__.py | 1 + pproc/src/pproc/accum/main.py | 4 +- pproc/src/pproc/anomaly.py | 2 + pproc/src/pproc/clustereps/__init__.py | 1 + pproc/src/pproc/clustereps/attribution.py | 3 +- pproc/src/pproc/clustereps/season.py | 26 +- pproc/src/pproc/clustereps/utils.py | 1 - pproc/src/pproc/common/__init__.py | 4 +- pproc/src/pproc/common/accumulation.py | 7 +- .../src/pproc/common/accumulation_manager.py | 5 +- pproc/src/pproc/common/grib_helpers.py | 29 + pproc/src/pproc/common/io.py | 2 + pproc/src/pproc/common/mars.py | 40 +- pproc/src/pproc/common/parallel.py | 14 +- pproc/src/pproc/common/param_requester.py | 1 + pproc/src/pproc/common/steps.py | 4 +- pproc/src/pproc/common/stepseq.py | 75 + pproc/src/pproc/common/utils.py | 17 + pproc/src/pproc/config/accumulation.py | 9 +- pproc/src/pproc/config/base.py | 10 +- pproc/src/pproc/config/factory.py | 7 +- pproc/src/pproc/config/io.py | 8 +- pproc/src/pproc/config/log.py | 30 + pproc/src/pproc/config/param.py | 6 +- pproc/src/pproc/config/preprocessing.py | 1 + pproc/src/pproc/config/targets.py | 5 +- pproc/src/pproc/config/types.py | 16 +- pproc/src/pproc/config/utils.py | 158 +- pproc/src/pproc/config_generation.py | 4 +- pproc/src/pproc/data/__init__.py | 1 + pproc/src/pproc/data/pts/__init__.py | 1 + pproc/src/pproc/ecpoint.py | 2 + pproc/src/pproc/ecpt/predictors.py | 3 + pproc/src/pproc/ensms.py | 3 +- pproc/src/pproc/ensms_original.py | 215 ++ pproc/src/pproc/extreme_forecast_simple.py | 125 + pproc/src/pproc/extremes/__init__.py | 1 + pproc/src/pproc/extremes/grib.py | 7 +- pproc/src/pproc/flight_levels.py | 4 +- pproc/src/pproc/monthly_stats.py | 1 + pproc/src/pproc/prob/parallel.py | 3 +- pproc/src/pproc/prob/threshold.py | 8 +- pproc/src/pproc/pts.md | 1 + pproc/src/pproc/pts.py | 3 +- pproc/src/pproc/quantiles.py | 6 +- pproc/src/pproc/schema/__init__.py | 8 + pproc/src/pproc/schema/base.py | 170 + pproc/src/pproc/schema/config.py | 65 + pproc/src/pproc/schema/deriver.py | 265 ++ pproc/src/pproc/schema/filters.py | 33 + pproc/src/pproc/schema/input.py | 477 +++ pproc/src/pproc/schema/schema.py | 87 + pproc/src/pproc/schema/step.py | 139 + pproc/src/pproc/schema/utils.py | 45 + pproc/src/pproc/signi/__init__.py | 1 + pproc/src/pproc/signi/clim.py | 5 +- pproc/src/pproc/significance.py | 1 + pproc/src/pproc/spectrum.py | 6 +- pproc/src/pproc/tcycl/__init__.py | 1 + pproc/src/pproc/tcycl/tcycl_evaluate.py | 542 ++- pproc/src/pproc/tcycl/tcycl_run.py | 560 ++-- .../src/pproc/tcycl/tcycl_summarise_ibtks.py | 41 +- .../src/pproc/tcycl/tcycl_summarise_tcycl.py | 51 +- .../src/pproc/tcycl/tcycl_summarise_trckr.py | 307 +- pproc/src/pproc/tcycl/tcycl_tools.py | 90 +- pproc/src/pproc/thermal_indices.py | 51 +- pproc/src/pproc/thermo/__init__.py | 9 + pproc/src/pproc/thermo/helpers.py | 194 ++ pproc/src/pproc/thermo/indices.py | 38 +- pproc/src/pproc/wind.py | 138 + pproc/src/pproc/wind850.py | 296 ++ pproc/src/pproc/wind850.yaml | 28 + .../tests/common/test_accumulation_manager.py | 4 +- pproc/tests/common/test_io.py | 308 +- pproc/tests/common/test_mars.py | 51 + pproc/tests/common/test_stepseq.py | 71 + pproc/tests/common/test_utils.py | 26 + pproc/tests/config/test_accum.py | 4 +- pproc/tests/config/test_base.py | 2 +- pproc/tests/config/test_factory.py | 169 +- pproc/tests/config/test_io_models.py | 2 +- pproc/tests/config/test_log.py | 82 + pproc/tests/config/test_param.py | 2 +- pproc/tests/config/types/test_extreme.py | 2 +- pproc/tests/config/types/test_flightlevels.py | 57 +- pproc/tests/conftest.py | 3 +- pproc/tests/ecpt/test_predictors.py | 1 + .../prob/test_prob_accumulation_manager.py | 4 +- pproc/tests/{ => schema}/schema.yaml | 2894 +++++++---------- pproc/tests/schema/test_config_schema.py | 86 + pproc/tests/schema/test_deriver.py | 273 ++ pproc/tests/schema/test_input_schema.py | 558 ++++ pproc/tests/schema/test_schema.py | 452 +++ pproc/tests/schema/test_step_schema.py | 123 + .../tests/templates/{v2 => }/clustereps.yaml | 2 +- pproc/tests/templates/{v2 => }/ensms.yaml | 8 +- pproc/tests/templates/{v2 => }/extreme.yaml | 8 +- pproc/tests/templates/fdb/schema | 1 + pproc/tests/templates/{v2 => }/prob.yaml | 4 +- pproc/tests/templates/{v2 => }/quantiles.yaml | 8 +- pproc/tests/templates/{v2 => }/t850.yaml | 6 +- pproc/tests/templates/{v2 => }/thermo.yaml | 14 +- pproc/tests/templates/v3/ensms.yaml | 223 -- pproc/tests/templates/v3/prob.yaml | 157 - pproc/tests/templates/v3/quantiles.yaml | 1209 ------- pproc/tests/templates/v3/thermo.yaml | 886 ----- pproc/tests/templates/{v2 => }/wind.yaml | 7 +- pproc/tests/test_ensms.py | 53 + pproc/tests/test_ensms.yaml | 45 + pproc/tests/test_products.py | 66 +- pproc/uv.lock | 2431 -------------- pproc/workflows/cd.yml | 12 + pproc/workflows/sync.yml | 26 + pproc/workflows/test-pypi.yml | 11 + 120 files changed, 7051 insertions(+), 7991 deletions(-) create mode 100644 pproc/requirements.txt create mode 100644 pproc/src/pproc/common/stepseq.py create mode 100644 pproc/src/pproc/config/log.py create mode 100755 pproc/src/pproc/ensms_original.py create mode 100755 pproc/src/pproc/extreme_forecast_simple.py create mode 100644 pproc/src/pproc/schema/__init__.py create mode 100644 pproc/src/pproc/schema/base.py create mode 100644 pproc/src/pproc/schema/config.py create mode 100644 pproc/src/pproc/schema/deriver.py create mode 100644 pproc/src/pproc/schema/filters.py create mode 100644 pproc/src/pproc/schema/input.py create mode 100644 pproc/src/pproc/schema/schema.py create mode 100644 pproc/src/pproc/schema/step.py create mode 100644 pproc/src/pproc/schema/utils.py create mode 100644 pproc/src/pproc/thermo/helpers.py create mode 100755 pproc/src/pproc/wind.py create mode 100755 pproc/src/pproc/wind850.py create mode 100644 pproc/src/pproc/wind850.yaml create mode 100644 pproc/tests/common/test_mars.py create mode 100644 pproc/tests/common/test_stepseq.py create mode 100644 pproc/tests/config/test_log.py rename pproc/tests/{ => schema}/schema.yaml (66%) create mode 100644 pproc/tests/schema/test_config_schema.py create mode 100644 pproc/tests/schema/test_deriver.py create mode 100644 pproc/tests/schema/test_input_schema.py create mode 100644 pproc/tests/schema/test_schema.py create mode 100644 pproc/tests/schema/test_step_schema.py rename pproc/tests/templates/{v2 => }/clustereps.yaml (99%) rename pproc/tests/templates/{v2 => }/ensms.yaml (92%) rename pproc/tests/templates/{v2 => }/extreme.yaml (94%) rename pproc/tests/templates/{v2 => }/prob.yaml (97%) rename pproc/tests/templates/{v2 => }/quantiles.yaml (92%) rename pproc/tests/templates/{v2 => }/t850.yaml (97%) rename pproc/tests/templates/{v2 => }/thermo.yaml (87%) delete mode 100644 pproc/tests/templates/v3/ensms.yaml delete mode 100644 pproc/tests/templates/v3/prob.yaml delete mode 100644 pproc/tests/templates/v3/quantiles.yaml delete mode 100644 pproc/tests/templates/v3/thermo.yaml rename pproc/tests/templates/{v2 => }/wind.yaml (92%) create mode 100644 pproc/tests/test_ensms.py create mode 100644 pproc/tests/test_ensms.yaml delete mode 100644 pproc/uv.lock create mode 100644 pproc/workflows/cd.yml create mode 100644 pproc/workflows/sync.yml create mode 100644 pproc/workflows/test-pypi.yml diff --git a/pproc/.gitignore b/pproc/.gitignore index 36a2e8dd..77c2cca8 100644 --- a/pproc/.gitignore +++ b/pproc/.gitignore @@ -37,4 +37,4 @@ ipython_config.py tests/data -src/pproc/_version.py +src/pproc/_version.py \ No newline at end of file diff --git a/pproc/MANIFEST.in b/pproc/MANIFEST.in index 1733a73d..f5a2a159 100644 --- a/pproc/MANIFEST.in +++ b/pproc/MANIFEST.in @@ -1,2 +1,2 @@ include src/pproc/data/pts/*.grib1 -include src/pproc/templates/*.yaml +include src/pproc/templates/*.yaml \ No newline at end of file diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index 59e1638f..50c538da 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -1,105 +1,89 @@ [build-system] +requires = ["setuptools>=78", "setuptools-scm[toml]>=9.2"] build-backend = "setuptools.build_meta" -requires = [ "setuptools>=78", "setuptools-scm[toml]>=9.2" ] - [project] name = "pproc" description = "ECMWF Post-processing tools" readme = "README.md" license = "Apache-2.0" -license-files = [ "LICENSE" ] +license-files = ["LICENSE"] authors = [ - { name = "European Centre for Medium-Range Weather Forecasts (ECMWF)", email = "software.support@ecmwf.int" }, + { name = "European Centre for Medium-Range Weather Forecasts (ECMWF)", email = "software.support@ecmwf.int" }, ] requires-python = ">=3.10" -classifiers = [ - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.13", -] -dynamic = [ "version" ] - dependencies = [ - "conflator>=0.1.7", - "earthkit-time>=0.1.3", - "earthkit-utils>=0.2.1", - "filelock>=3.12", - "numexpr", - "pproc-core", - "psutil", - "scikit-learn", - "scipy>=1.8", - "xarray", -] -optional-dependencies.tcycl = [ - "pyinfero @ git+ssh://git@github.com/ecmwf/infero.git@0.3.1#subdirectory=src/infero/api/pyinfero", - "wget", + "code-meters >= 0.0.3", + "conflator >= 0.1.7", + "earthkit-data >= 0.19.0", + "earthkit-meteo >= 0.6.1", + "earthkit-time >= 0.1.3", + "earthkit-utils >= 0.2.1", + "eccodes >= 1.6.1", + "filelock >= 3.12.0", + "mir-python >= 0.2.0", + "numexpr", + "numpy >= 1.21.2", + "pandas >= 1.3.3", + "psutil", + "pydantic", + "pyfdb", + "pyyaml", + "scikit-learn", + "scipy >= 1.8", + "thermofeel >= 2.1.0", + "xarray", ] -scripts.pproc-accumulate = "pproc.accumulate:main" -scripts.pproc-anomaly = "pproc.anomaly:main" -scripts.pproc-clustereps = "pproc.clustereps.__main__:main" -scripts.pproc-clustereps-attr = "pproc.clustereps.attribution:main" -scripts.pproc-clustereps-cluster = "pproc.clustereps.cluster:main" -scripts.pproc-clustereps-pca = "pproc.clustereps.pca:main" -scripts.pproc-config = "pproc.config_generation:main" -scripts.pproc-ecpoint = "pproc.ecpoint:main" -scripts.pproc-ensms = "pproc.ensms:main" -scripts.pproc-extreme = "pproc.extreme:main" -scripts.pproc-extreme-forecast-simple = "pproc.extreme_forecast_simple:main" -scripts.pproc-flight-levels = "pproc.flight_levels:main" -scripts.pproc-histogram = "pproc.histogram:main" -scripts.pproc-interpol = "pproc.interpol:main" -scripts.pproc-monthly-stats = "pproc.monthly_stats:main" -scripts.pproc-probabilities = "pproc.probabilities:main" -scripts.pproc-product = "ppcore.product:main" +dynamic = ["version"] -scripts.pproc-pts = "pproc.pts:main" -scripts.pproc-quantiles = "pproc.quantiles:main" -scripts.pproc-significance = "pproc.significance:main" -scripts.pproc-spectrum = "pproc.spectrum:main" -scripts.pproc-tcycl-evaluate = "pproc.tcycl.tcycl_evaluate:main" -scripts.pproc-tcycl-run = "pproc.tcycl.tcycl_run:main" -scripts.pproc-tcycl-summarise-ibtks = "pproc.tcycl.tcycl_summarise_ibtks:main" -scripts.pproc-tcycl-summarise-tcycl = "pproc.tcycl.tcycl_summarise_tcycl:main" -scripts.pproc-tcycl-summarise-trckr = "pproc.tcycl.tcycl_summarise_trckr:main" -scripts.pproc-thermal-indices = "pproc.thermal_indices:main" +[project.optional-dependencies] +tcycl = ["pyinfero >= 0.1.1", "wget"] +test = ["pytest", "requests"] -[dependency-groups] -dev = [ - "pytest>=9.0.3", - "requests>=2.34.2", -] +[project.scripts] +pproc-extreme-forecast-simple = "pproc.extreme_forecast_simple:main" +pproc-extreme = "pproc.extreme:main" +pproc-interpol = "pproc.interpol:main" +pproc-pts = "pproc.pts:main" +pproc-probabilities = "pproc.probabilities:main" +pproc-ensms = "pproc.ensms:main" +pproc-wind = "pproc.wind:main" +pproc-spectrum = "pproc.spectrum:main" +pproc-clustereps = "pproc.clustereps.__main__:main" +pproc-clustereps-pca = "pproc.clustereps.pca:main" +pproc-clustereps-cluster = "pproc.clustereps.cluster:main" +pproc-clustereps-attr = "pproc.clustereps.attribution:main" +pproc-quantiles = "pproc.quantiles:main" +pproc-tcycl-run = "pproc.tcycl.tcycl_run:main" +pproc-tcycl-summarise-ibtks = "pproc.tcycl.tcycl_summarise_ibtks:main" +pproc-tcycl-summarise-tcycl = "pproc.tcycl.tcycl_summarise_tcycl:main" +pproc-tcycl-summarise-trckr = "pproc.tcycl.tcycl_summarise_trckr:main" +pproc-tcycl-evaluate = "pproc.tcycl.tcycl_evaluate:main" +pproc-thermal-indices = "pproc.thermal_indices:main" +pproc-histogram = "pproc.histogram:main" +pproc-accumulate = "pproc.accumulate:main" +pproc-significance = "pproc.significance:main" +pproc-anomaly = "pproc.anomaly:main" +pproc-monthly-stats = "pproc.monthly_stats:main" +pproc-config="pproc.config_generation:main" +pproc-ecpoint = "pproc.ecpoint:main" +pproc-flight-levels = "pproc.flight_levels:main" + +[tool.pytest.ini_options] +minversion = "6.0" +testpaths = ["tests"] [tool.setuptools] include-package-data = true [tool.setuptools.packages.find] -where = [ "src" ] +where = ["src"] [tool.setuptools_scm] write_to = "src/pproc/_version.py" write_to_template = '''# Do not change! Do not track in version control! __version__ = "{version}" ''' -root = ".." local_scheme = "no-local-version" -scm.git.describe_command = [ 'git', 'describe', '--dirty', '--tags', '--long', '--abbrev=40', '--match', '[0-9]*' ] - -[tool.pytest.ini_options] -minversion = "6.0" -testpaths = [ "tests" ] - -[tool.uv] -package = true - -[tool.uv.sources] -pproc-core = { workspace = true } - -[tool.uv.workspace] -members = [ - "../pproc-core", -] +scm.git.describe_command = ['git', 'describe', '--dirty', '--tags', '--long', '--abbrev=40', '--match', '[0-9]*'] diff --git a/pproc/requirements.txt b/pproc/requirements.txt new file mode 100644 index 00000000..6f70b2b9 --- /dev/null +++ b/pproc/requirements.txt @@ -0,0 +1,21 @@ +code-meters >= 0.0.3 +conflator >= 0.1.7 +earthkit-data >= 0.19.0 +earthkit-meteo >= 0.6.1 +earthkit-time >= 0.1.3 +earthkit-utils >= 0.2.1 +eccodes @ git+ssh://git@github.com/ecmwf/eccodes-python.git@develop +filelock >= 3.12.0 +mir-python @ git+ssh://git@github.com/ecmwf/mir.git@develop#subdirectory=python/mir +numexpr +numpy >= 1.21.2 +pandas >= 1.3.3 +psutil +pydantic +pyfdb @ git+ssh://git@github.com/ecmwf/pyfdb.git@develop +pyyaml +requests +scikit-learn +scipy >= 1.8.0 +thermofeel >= 2.1.0 +xarray \ No newline at end of file diff --git a/pproc/src/pproc/Config.py b/pproc/src/pproc/Config.py index 1172109d..f1b5e09d 100644 --- a/pproc/src/pproc/Config.py +++ b/pproc/src/pproc/Config.py @@ -55,7 +55,7 @@ def id(self, key) -> int: p, t = map(int, "{:.3f}".format(float(key)).split(".")) assert 0 <= p < 1000 and t < 1000 return p if t == 128 else (1000 * t + p) - except: # noqa: E722 + except: pass # from shortName @@ -120,7 +120,7 @@ def main(): args = parser.parse_args() tree = VariableTree(args.file) - [int(p) if p.isdigit() else p for p in args.config_node] + node = [int(p) if p.isdigit() else p for p in args.config_node] print(tree.variables(*args.config_node)) diff --git a/pproc/src/pproc/__init__.py b/pproc/src/pproc/__init__.py index 162ef1d1..f4ac21de 100644 --- a/pproc/src/pproc/__init__.py +++ b/pproc/src/pproc/__init__.py @@ -7,7 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from . import clustereps # noqa: F401 +from . import clustereps try: from ._version import __version__ diff --git a/pproc/src/pproc/accum/__init__.py b/pproc/src/pproc/accum/__init__.py index 64e1349e..6d947223 100644 --- a/pproc/src/pproc/accum/__init__.py +++ b/pproc/src/pproc/accum/__init__.py @@ -6,3 +6,4 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. + diff --git a/pproc/src/pproc/accum/main.py b/pproc/src/pproc/accum/main.py index 97e41785..003c1663 100644 --- a/pproc/src/pproc/accum/main.py +++ b/pproc/src/pproc/accum/main.py @@ -46,7 +46,9 @@ def main(cfg: Config, postproc_iteration: Any): cfg.inputs, param.total_fields, ) - postproc_partial = functools.partial(postproc_iteration, param, cfg) + postproc_partial = functools.partial( + postproc_iteration, param, cfg + ) for keys, data in parallel_data_retrieval( cfg.parallelisation.n_par_read, accum_manager.dims, diff --git a/pproc/src/pproc/anomaly.py b/pproc/src/pproc/anomaly.py index 6edb9b39..a7fa29c3 100644 --- a/pproc/src/pproc/anomaly.py +++ b/pproc/src/pproc/anomaly.py @@ -36,7 +36,9 @@ def anomaly_iteration( window_id: str, accum: Accumulator, ): + with ResourceMeter(f"{param.name}, window {window_id}: Retrieve climatology"): + if "stepRange" in accum.grib_keys(): steprange = accum.grib_keys()["stepRange"] else: diff --git a/pproc/src/pproc/clustereps/__init__.py b/pproc/src/pproc/clustereps/__init__.py index 64e1349e..6d947223 100644 --- a/pproc/src/pproc/clustereps/__init__.py +++ b/pproc/src/pproc/clustereps/__init__.py @@ -6,3 +6,4 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. + diff --git a/pproc/src/pproc/clustereps/attribution.py b/pproc/src/pproc/clustereps/attribution.py index 03a26305..3d5a11b5 100644 --- a/pproc/src/pproc/clustereps/attribution.py +++ b/pproc/src/pproc/clustereps/attribution.py @@ -24,6 +24,7 @@ def read_clim_file(filePath: str, nRecords: int, dtype: str = ">f4"): + arr = list() with FortranFile(filePath, "r", header_dtype=">u4") as fin: for _ in range(nRecords): @@ -289,7 +290,7 @@ def main() -> int: fmt="%-3d", delimiter=3 * " ", ) - + cfg.clean() return 0 diff --git a/pproc/src/pproc/clustereps/season.py b/pproc/src/pproc/clustereps/season.py index 23328d1a..2205cdf0 100644 --- a/pproc/src/pproc/clustereps/season.py +++ b/pproc/src/pproc/clustereps/season.py @@ -9,7 +9,7 @@ from datetime import datetime, timedelta -from typing import List +from typing import List, Tuple import calendar @@ -17,7 +17,9 @@ class Season: + def __init__(self, startMonth, endMonth, baseYear): + self.baseYear = baseYear jumpYear = 0 if startMonth > endMonth: @@ -26,15 +28,13 @@ def __init__(self, startMonth, endMonth, baseYear): else: startYear = self.baseYear first_day = datetime.strptime(f"{startYear:04d}{startMonth:02d}01", "%Y%m%d") - end_day = datetime.strptime( - f"{self.baseYear:04d}{endMonth:02d}{MONTH_DAYS[endMonth-1]}", "%Y%m%d" - ) + end_day = datetime.strptime(f"{self.baseYear:04d}{endMonth:02d}{MONTH_DAYS[endMonth-1]}", "%Y%m%d") self.start = first_day self.end = end_day all_months = list(range(1, 13)) * 2 - self.months = all_months[startMonth - 1 : (endMonth + jumpYear * 12)] + self.months = all_months[startMonth - 1 : (endMonth + jumpYear*12)] self.leapday = None if startMonth > endMonth and endMonth >= 2: @@ -44,14 +44,9 @@ def __init__(self, startMonth, endMonth, baseYear): if calendar.isleap(startYear): self.leapday = self.leapday = datetime(baseYear, 2, 29) - self.name = "".join( - [ - datetime.strptime(f"1970{mon:02d}01", "%Y%m%d") - .strftime("%b") - .lower()[0] - for mon in self.months - ] - ) + self.name = ''.join([ + datetime.strptime(f"1970{mon:02d}01", "%Y%m%d").strftime("%b").lower()[0] for mon in self.months + ]) @property def ndays(self) -> int: @@ -62,10 +57,7 @@ def ndays(self) -> int: @property def doys(self) -> List[int]: - return [ - (self.start + timedelta(days=i)).timetuple().tm_yday - 1 - for i in range(self.ndays) - ] + return [(self.start + timedelta(days=i)).timetuple().tm_yday - 1 for i in range(self.ndays)] def dos(self, date: datetime) -> int: if self.leapday is not None and date >= self.leapday: diff --git a/pproc/src/pproc/clustereps/utils.py b/pproc/src/pproc/clustereps/utils.py index ae67926f..d477e6b0 100644 --- a/pproc/src/pproc/clustereps/utils.py +++ b/pproc/src/pproc/clustereps/utils.py @@ -9,7 +9,6 @@ import numpy as np - def gen_steps(start, end, delta, monthly=False): """Generate the list of steps diff --git a/pproc/src/pproc/common/__init__.py b/pproc/src/pproc/common/__init__.py index c891ee46..3a6b13da 100644 --- a/pproc/src/pproc/common/__init__.py +++ b/pproc/src/pproc/common/__init__.py @@ -7,5 +7,5 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from .config import default_parser, Config # noqa: F401 -from .steps import AnyStep, Step, parse_step, step_to_coord # noqa: F401 +from .config import default_parser, Config +from .steps import AnyStep, Step, parse_step, step_to_coord diff --git a/pproc/src/pproc/common/accumulation.py b/pproc/src/pproc/common/accumulation.py index e2f5990a..b55762d6 100644 --- a/pproc/src/pproc/common/accumulation.py +++ b/pproc/src/pproc/common/accumulation.py @@ -19,7 +19,8 @@ from earthkit.time.calendar import MonthInYear from earthkit.time.sequence import MonthlySequence -from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values + +from pproc.common.grib_helpers import fill_template_values NumericCoord = int @@ -49,7 +50,7 @@ def coords_name(coords: Coords, name_config: Optional[dict] = None) -> str: fcdate = datetime.datetime.strptime(name_config["date"], "%Y%m%d") end = int(end) seq = MonthlySequence(1) - seq.next(fcdate, False) + first_month = seq.next(fcdate, False) this_month = fcdate + datetime.timedelta(hours=end - 1) month_length = MonthInYear(this_month.year, this_month.month).length() * 24 start = end - month_length @@ -126,7 +127,7 @@ def grib_keys(self, dim: str) -> dict: ) # Don't override if set in config grib_header["stepRange"] = steprange else: - assert end == start, "Start step can not be greater than end step" + assert end == start, f"Start step can not be greater than end step" if "timeRangeIndicator" not in grib_header: if end >= 256: grib_header["timeRangeIndicator"] = 10 diff --git a/pproc/src/pproc/common/accumulation_manager.py b/pproc/src/pproc/common/accumulation_manager.py index a1fa5ec6..9e53e1ae 100644 --- a/pproc/src/pproc/common/accumulation_manager.py +++ b/pproc/src/pproc/common/accumulation_manager.py @@ -7,13 +7,12 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Any, Callable, Dict, Iterator, List, Optional, Set, Tuple +from typing import Any, Callable, Dict, Iterator, List, Optional, Set, Tuple, Union import numpy as np -from ppcore.utils.dicts import dict_product - from pproc.common.accumulation import Accumulator, Coord +from pproc.common.utils import dict_product from pproc.common.steps import parse_step from pproc.config.accumulation import accumulation_factory, AccumulationConfig diff --git a/pproc/src/pproc/common/grib_helpers.py b/pproc/src/pproc/common/grib_helpers.py index f0ccc7eb..33f1bb38 100644 --- a/pproc/src/pproc/common/grib_helpers.py +++ b/pproc/src/pproc/common/grib_helpers.py @@ -7,7 +7,9 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. +from typing import Dict import numpy as np +import re import eccodes from earthkit.data.utils.message import CodesHandle @@ -54,3 +56,30 @@ def construct_message(template_grib, metadata: dict): for key, value in arr_grib_keys.items(): out_grib.set_array(key, value) return out_grib + + +_TEMPLATE_RE = re.compile("^{([a-z_]*)}:?([a-z]*)$", re.I) +_TYPES = { + "int": int, + "str": str, + "float": float, +} + + +def fill_template_value(val: str, template_map: dict): + m = _TEMPLATE_RE.fullmatch(val) + if m is None: + return val + value, tp = m.groups() + if value not in template_map: + return val + + return template_map[value] if len(tp) == 0 else _TYPES[tp](template_map[value]) + + +def fill_template_values(metadata: dict, template_map: dict) -> dict: + metadata = metadata.copy() + for key, val in metadata.items(): + if isinstance(val, str): + metadata[key] = fill_template_value(val, template_map) + return metadata diff --git a/pproc/src/pproc/common/io.py b/pproc/src/pproc/common/io.py index a2ca2483..01128fe5 100644 --- a/pproc/src/pproc/common/io.py +++ b/pproc/src/pproc/common/io.py @@ -278,6 +278,7 @@ def fdb_read_to_file(fdb, request, file_out, mir_options=None, mode="wb"): def fdb_write_ufunc(data, coords, fdb, template): + message = ( template.copy() ) # are we always copying the full message with the data values? @@ -320,6 +321,7 @@ def write_message(target, template, data_array): def write(target, template, attributes, data_array): + message = template.copy() for key, value in attributes.items(): message[key] = value diff --git a/pproc/src/pproc/common/mars.py b/pproc/src/pproc/common/mars.py index 97b6bf72..b2612ee4 100644 --- a/pproc/src/pproc/common/mars.py +++ b/pproc/src/pproc/common/mars.py @@ -10,7 +10,9 @@ from contextlib import ExitStack import copy +from datetime import date, datetime import errno +from math import ceil import os import select import shlex @@ -18,8 +20,6 @@ from tempfile import NamedTemporaryFile, mktemp from typing import List, Union -from ppcore.utils.mars import to_mars - def _mkftemp(dir=None, mode=0o600, num_attempts=1000): for _ in range(num_attempts): @@ -147,6 +147,42 @@ def close(self): self.__exit__(None, None, None) +def _val_to_mars(val): + if isinstance(val, bytes): + return val + elif isinstance(val, (list, tuple)): + return b"/".join(_val_to_mars(v) for v in val) + elif isinstance(val, str): + pass + elif isinstance(val, int): + val = str(val) + elif isinstance(val, (datetime, date)): + val = val.strftime("%Y%m%d") + elif isinstance(val, range): + first = val.start + last = val.start + (ceil((val.stop - val.start) / val.step) - 1) * val.step + step = val.step + val = f"{first}/to/{last}" + if step != 1: + val += f"/by/{step}" + elif isinstance(val, float) and val.is_integer(): + val = str(int(val)) + else: + raise TypeError(f"Cannot convert {type(val)} to MARS request") + return val.encode("utf-8") + + +def to_mars(verb: bytes, req: dict) -> bytes: + def _gen_req(): + yield verb + for key, val in req.items(): + key = key.encode("utf-8") + val = _val_to_mars(val) + yield key + b"=" + val + + return b",".join(_gen_req()) + + def mars_retrieve( req: dict, mars_cmd: Union[str, List[str]] = "mars", tmpdir=None ) -> MARSReader: diff --git a/pproc/src/pproc/common/parallel.py b/pproc/src/pproc/common/parallel.py index b7c3c955..8d4feddf 100644 --- a/pproc/src/pproc/common/parallel.py +++ b/pproc/src/pproc/common/parallel.py @@ -16,10 +16,9 @@ import psutil from meters import ResourceMeter -from ppcore.utils.dicts import dict_product from pproc.common.param_requester import ParamRequester -from pproc.common.utils import delayed_map +from pproc.common.utils import delayed_map, dict_product from pproc.config.base import Parallelisation @@ -217,13 +216,10 @@ def parallel_data_retrieval( ) with executor: delay = 0 if num_processes == 1 else num_processes - - def submit(keys): - return ( - keys, - executor.submit(_retrieve, data_requesters, **keys), - ) - + submit = lambda keys: ( + keys, + executor.submit(_retrieve, data_requesters, **keys), + ) requests = dict_product(dims) for keys, future in delayed_map(delay, submit, requests): yield keys, future.result() diff --git a/pproc/src/pproc/common/param_requester.py b/pproc/src/pproc/common/param_requester.py index d87dce12..f0b06d4f 100644 --- a/pproc/src/pproc/common/param_requester.py +++ b/pproc/src/pproc/common/param_requester.py @@ -14,6 +14,7 @@ from pproc.common.dataset import open_multi_dataset from pproc.common.io import missing_to_nan, GribMetadata +from pproc.common.steps import AnyStep from pproc.config.io import Input, InputsCollection from pproc.config.param import ParamConfig diff --git a/pproc/src/pproc/common/steps.py b/pproc/src/pproc/common/steps.py index 28a97635..341aec9a 100644 --- a/pproc/src/pproc/common/steps.py +++ b/pproc/src/pproc/common/steps.py @@ -17,9 +17,7 @@ class Step: end: int = None def __init__(self, start_or_step, end=None): - def _set_frozen(attr, val): - return object.__setattr__(self, attr, val) - + _set_frozen = lambda attr, val: object.__setattr__(self, attr, val) if isinstance(start_or_step, Step): _set_frozen("start", start_or_step.start) _set_frozen("end", start_or_step.end) diff --git a/pproc/src/pproc/common/stepseq.py b/pproc/src/pproc/common/stepseq.py new file mode 100644 index 00000000..4d056787 --- /dev/null +++ b/pproc/src/pproc/common/stepseq.py @@ -0,0 +1,75 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import datetime +from typing import Iterator + +from earthkit.time.calendar import MonthInYear +from earthkit.time.sequence import MonthlySequence + + +def steprange_to_fcmonth(fcdate: datetime.datetime | str, steprange: str) -> int: + if isinstance(fcdate, str): + fcdate = datetime.datetime.strptime(str(fcdate), "%Y%m%d") + start, end = map(int, steprange.split("-")) + seq = MonthlySequence(1) + first_month = seq.next(fcdate, False) + this_month = fcdate + datetime.timedelta(hours=int(start)) + + month_length = MonthInYear(this_month.year, this_month.month).length() * 24 + assert month_length == ( + end - start + ), f"Expected month length {end - start} for {fcdate} and step range {steprange}. Got {month_length}." + + return ( + (this_month.year - first_month.year) * 12 + + this_month.month + - first_month.month + + 1 + ) + + +def fcmonth_to_steprange(fcdate: datetime.datetime | str, fcmonth: int) -> str: + if isinstance(fcdate, str): + fcdate = datetime.datetime.strptime(str(fcdate), "%Y%m%d") + seq = MonthlySequence(1) + month = seq.next(fcdate, False) + for _ in range(1, fcmonth): + month = seq.next(month, True) + date = datetime.datetime(month.year, month.month, month.day) + start = (date - fcdate).total_seconds() // 3600 + end = start + MonthInYear(date.year, date.month).length() * 24 + return f"{int(start)}-{int(end)}" + + +def stepseq_monthly(date: str, start: int, end: int, interval: int) -> Iterator: + fcdate = datetime.datetime.strptime(str(date), "%Y%m%d") + start_date = fcdate + datetime.timedelta(hours=start) + seq = MonthlySequence(1) + start_month = seq.next(start_date.date(), strict=False) + # Steps are in hours, from forecast date + step_start = (start_month - fcdate.date()).days * 24 + miny = MonthInYear(start_month.year, start_month.month) + while step_start < end: + delta = miny.length() * 24 + step_end = step_start + delta + + if step_end > end: + break + + yield range(step_start, step_end + 1, interval) + miny = miny.next() + step_start = step_end + + +def stepseq_ranges( + start: int, end: int, width: int, interval: int, by: int +) -> Iterator: + for start in range(start, end - width + 1, interval): + yield range(start, start + width + 1, by) diff --git a/pproc/src/pproc/common/utils.py b/pproc/src/pproc/common/utils.py index e6c31269..6589c9e8 100644 --- a/pproc/src/pproc/common/utils.py +++ b/pproc/src/pproc/common/utils.py @@ -18,6 +18,13 @@ NestedDict: TypeAlias = Dict[K, V | "NestedDict"] +def dict_product(dic: Dict[K, Iterable[V]]) -> Iterator[Dict[K, V]]: + keys = list(dic.keys()) + its = tuple(dic.values()) + for vals in itertools.product(*its): + yield dict(zip(keys, vals)) + + def delayed_map(delay: int, func: Callable[[T], U], it: Iterable[T]) -> Iterator[U]: sentinel = object() it = iter(it) @@ -27,3 +34,13 @@ def delayed_map(delay: int, func: Callable[[T], U], it: Iterable[T]) -> Iterator x = next(it, sentinel) if x is not sentinel: queue.append(func(x)) + + +def dict_apply(func: Callable[[V], V], dic: NestedDict) -> NestedDict: + modified_dic = dic.copy() + for k, v in modified_dic.items(): + if isinstance(v, dict): + modified_dic[k] = dict_apply(func, v) + else: + modified_dic[k] = func(v) + return modified_dic diff --git a/pproc/src/pproc/config/accumulation.py b/pproc/src/pproc/config/accumulation.py index edefbc46..045e4289 100644 --- a/pproc/src/pproc/config/accumulation.py +++ b/pproc/src/pproc/config/accumulation.py @@ -15,11 +15,10 @@ from earthkit.time.calendar import parse_date from earthkit.time.sequence import Sequence -from ppcore.utils.mars import extract_mars -from ppcore.utils.stepseq import stepseq_ranges, stepseq_monthly +from pproc.common.stepseq import stepseq_ranges, stepseq_monthly from pproc.common.accumulation import convert_coords, coords_name -from pproc.config.utils import _get +from pproc.config.utils import extract_mars, _get class StepRanges(BaseModel): @@ -109,7 +108,7 @@ def out_mars(self, dim: str) -> dict: name = coords_name(coord, self.name) try: name = int(name) - except ValueError: + except: pass base[dim].append(name) if hasattr(self, "thresholds"): @@ -231,7 +230,7 @@ def out_mars(self, dim: str) -> list[dict]: name = coords_name(coord, self.name) try: name = int(name) - except ValueError: + except: pass base[dim].append(name) return [base] diff --git a/pproc/src/pproc/config/base.py b/pproc/src/pproc/config/base.py index 3410887a..2225b4f7 100644 --- a/pproc/src/pproc/config/base.py +++ b/pproc/src/pproc/config/base.py @@ -18,15 +18,15 @@ from conflator import CLIArg, ConfigModel from pydantic import Field, field_validator, model_validator from typing_extensions import Self -from ppcore.utils.dicts import deep_update -from ppcore.utils.helpers import to_list -from ppcore.utils.requests import update_request -from ppcore.utils.mars import extract_mars -from ppcore.configs.entrypoint.log import LoggingConfig from pproc.config import io +from pproc.config.log import LoggingConfig from pproc.config.param import ParamConfig, partial_equality from pproc.config.utils import ( + deep_update, + extract_mars, + update_request, + to_list, _get, _set, ) diff --git a/pproc/src/pproc/config/factory.py b/pproc/src/pproc/config/factory.py index ebdf27ce..1b030d74 100644 --- a/pproc/src/pproc/config/factory.py +++ b/pproc/src/pproc/config/factory.py @@ -8,13 +8,14 @@ # nor does it submit to any jurisdiction. import os +import pandas as pd +import numpy as np import logging -from ppcore.utils.requests import expand -from ppcore.schema.schema import Schema - from pproc.config import types from pproc.config.base import BaseConfig +from pproc.config.utils import expand, squeeze +from pproc.schema.schema import Schema logging.getLogger("pproc").setLevel(os.environ.get("PPROC_LOG", "INFO").upper()) diff --git a/pproc/src/pproc/config/io.py b/pproc/src/pproc/config/io.py index d1e2434b..c44dbb0a 100644 --- a/pproc/src/pproc/config/io.py +++ b/pproc/src/pproc/config/io.py @@ -23,8 +23,6 @@ model_validator, field_validator, ) -from ppcore.utils.dicts import deep_update -from ppcore.utils.entrypoint import validate_overrides from pproc.config import utils from pproc.config.targets import ( @@ -121,7 +119,7 @@ class InputsCollection(ConfigModel): names: ClassVar[list[str]] overrides: Annotated[ dict, - BeforeValidator(validate_overrides), + BeforeValidator(utils.validate_overrides), CLIArg( "--override-input", action="append", @@ -141,7 +139,7 @@ def set_defaults(cls, data: Any) -> Any: def_source = data["default"] for sub in cls.names: subsec = data.setdefault(sub, {}) - data[sub] = deep_update(subsec, def_source) + data[sub] = utils.deep_update(subsec, def_source) return data @@ -186,7 +184,7 @@ class OutputsCollection(ConfigModel): default: Output = Output() overrides: Annotated[ dict, - BeforeValidator(validate_overrides), + BeforeValidator(utils.validate_overrides), CLIArg( "--override-output", action="append", diff --git a/pproc/src/pproc/config/log.py b/pproc/src/pproc/config/log.py new file mode 100644 index 00000000..717a02c6 --- /dev/null +++ b/pproc/src/pproc/config/log.py @@ -0,0 +1,30 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import logging + +from annotated_types import Annotated, Literal +from conflator import CLIArg, ConfigModel, EnvVar +from pydantic import Field + + +class LoggingConfig(ConfigModel): + level: Annotated[ + Literal["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"], + CLIArg("--log"), + EnvVar("LOG"), + Field( + description="Logging level [CRITICAL, ERROR, WARNING, INFO, DEBUG] (default: INFO)" + ), + ] = "INFO" + format: str = "%(asctime)s; %(name)s; %(levelname)s - %(message)s" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + logging.basicConfig(format=self.format, level=self.level, force=True) diff --git a/pproc/src/pproc/config/param.py b/pproc/src/pproc/config/param.py index 5c170e9a..392a558c 100644 --- a/pproc/src/pproc/config/param.py +++ b/pproc/src/pproc/config/param.py @@ -10,19 +10,19 @@ from typing import Any, Dict, Iterator, Optional from typing_extensions import Self import itertools +import os import logging import copy import numpy as np import pandas as pd from pydantic import BaseModel, Field, model_validator -from ppcore.utils.dicts import deep_update -from ppcore.utils.requests import expand, update_request -from ppcore.utils.mars import extract_mars from pproc.config.preprocessing import PreprocessingConfig from pproc.config.accumulation import AccumulationConfig +from pproc.config.utils import extract_mars, deep_update from pproc.config.io import Source, Input, InputsCollection +from pproc.config.utils import update_request, expand logger = logging.getLogger(__name__) diff --git a/pproc/src/pproc/config/preprocessing.py b/pproc/src/pproc/config/preprocessing.py index 53f48780..63141382 100644 --- a/pproc/src/pproc/config/preprocessing.py +++ b/pproc/src/pproc/config/preprocessing.py @@ -9,6 +9,7 @@ from abc import ABC, abstractmethod from typing import Annotated, Any, List, Literal, Optional, Tuple, Union +from typing_extensions import Self import numexpr import numpy as np diff --git a/pproc/src/pproc/config/targets.py b/pproc/src/pproc/config/targets.py index 74bac8c8..0a6433a1 100644 --- a/pproc/src/pproc/config/targets.py +++ b/pproc/src/pproc/config/targets.py @@ -13,13 +13,14 @@ from typing_extensions import Self import yaml +import eccodes import pyfdb from annotated_types import Annotated from conflator import ConfigModel from filelock import FileLock from pydantic import BaseModel, BeforeValidator, ConfigDict, Field, model_validator -from ppcore.utils.entrypoint import validate_overrides +from pproc.config import utils _manager = None @@ -168,7 +169,7 @@ class OverrideTargetWrapper(ConfigModel, Target): ] overrides: Annotated[ dict, - BeforeValidator(validate_overrides), + BeforeValidator(utils.validate_overrides), ] @model_validator(mode="before") diff --git a/pproc/src/pproc/config/types.py b/pproc/src/pproc/config/types.py index 6ffbac1b..ce454d03 100644 --- a/pproc/src/pproc/config/types.py +++ b/pproc/src/pproc/config/types.py @@ -9,7 +9,7 @@ import copy import os -from typing import Literal, Optional, List, Any, Annotated, Iterator +from typing import Literal, Optional, List, Any, Annotated, ClassVar, Iterator from typing_extensions import Self, Union from pydantic import ( field_validator, @@ -26,9 +26,6 @@ from conflator import CLIArg, ConfigModel from earthkit.time import DailySequence -from ppcore.utils.dicts import deep_update -from ppcore.utils.requests import expand, update_request, squeeze -from ppcore.utils.mars import extract_mars from pproc.clustereps.season import MONTH_DAYS, Season from pproc.config.base import BaseConfig, Parallelisation @@ -37,9 +34,14 @@ from pproc.config.utils import ( _set, _get, + extract_mars, + update_request, + deep_update, + expand, + squeeze, ) from pproc.config.preprocessing import Reshape, Expression -from ppcore.utils.stepseq import steprange_to_fcmonth +from pproc.common.stepseq import steprange_to_fcmonth from pproc.extremes.indices import Index, SUPPORTED_INDICES, create_indices from pproc.flightlevel.mapping import FLIGHT_TO_PRESSURE_LEVEL @@ -591,7 +593,7 @@ def sort_inputs(cls, inputs: list[dict]) -> dict: if clim_step is not None: assert len(fc_step) == len( clim_step - ), "Forecast and clim steps must be of the same length" + ), f"Forecast and clim steps must be of the same length" for clim_inp in sorted_requests.get("clim", []): clim_inp["step"] = { fc_step[x]: clim_step[x] for x in range(len(fc_step)) @@ -933,7 +935,7 @@ def validate_inputs(self) -> Self: nsteps = list(map(lambda x: len(str(x).split("-")), steps)) assert np.all( np.asarray(nsteps) == 1 - ), "Accumulation inputs required for step ranges." + ), f"Accumulation inputs required for step ranges." return self @classmethod diff --git a/pproc/src/pproc/config/utils.py b/pproc/src/pproc/config/utils.py index 99278335..ece5feb1 100644 --- a/pproc/src/pproc/config/utils.py +++ b/pproc/src/pproc/config/utils.py @@ -7,7 +7,29 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Any +from typing import Any, Optional, Iterator +import copy +import numpy as np +import pandas as pd +import itertools + +from pproc.common.utils import dict_product + +METADATA_KEYS = {"param": "paramId", "date": "dataDate"} + + +def parse_vars(items): + """ + Parse a series of key-value pairs and return a dictionary + """ + return dict(map(lambda s: s.split("="), items)) + + +def parse_var_strs(items): + """ + Parse a list of comma-separated lists of key-value pairs and return a dictionary + """ + return parse_vars(sum((s.split(",") for s in items if s), start=[])) def _get(obj, attr, default=None): @@ -31,3 +53,137 @@ def model_update(original: dict, update: Any) -> dict: else: _set(original, key, value) return original + + +def validate_overrides(data: Any) -> Any: + if isinstance(data, list): + return parse_var_strs(data) + return data + + +def deep_update(original: dict, update: dict) -> dict: + for key, value in update.items(): + if isinstance(value, dict) and isinstance(original.get(key, None), dict): + original[key] = deep_update(original[key], value) + else: + original[key] = value + return original + + +def update_request( + base: dict | list[dict], update: dict | list[dict], method: str = "map", **kwargs +): + if isinstance(base, dict): + base = [base] + if isinstance(update, dict): + update = [update] + + if len(update) == 0: + return copy.deepcopy(base) + if len(base) == 0: + return copy.deepcopy(update) + if method == "map": + if len(base) == len(update): + combinations = zip(base, update) + else: + assert len(base) == 1 or len(update) == 1 + combinations = itertools.product(base, update) + elif method == "product": + combinations = itertools.product(base, update) + else: + raise ValueError( + f"Unknown method for combining requests: {method}. Supported methods are 'map' and 'product'" + ) + new_requests = [ + deep_update(copy.deepcopy(breq), {**ureq, **kwargs}) + for breq, ureq in combinations + ] + # Remove duplicates + deduplicated = [] + for inp in new_requests: + if inp not in deduplicated: + deduplicated.append(inp) + return deduplicated + + +def to_list(value: Any) -> list[Any]: + if np.ndim(value) == 0: + return [value] + return list(value) + + +def expand( + requests: dict | list[dict], + dim: Optional[str | list[str]] = None, + exclude: list[str] = [], +) -> Iterator[dict]: + if isinstance(requests, dict): + requests = [requests] + + for request in requests: + request = copy.deepcopy(request) + # Expand all if no dimension is specified + if dim is None: + dims = [x for x in request.keys() if x not in exclude] + elif isinstance(dim, str): + dims = [dim] + else: + dims = dim + + expansion = {} + for d in dims: + coords = request.pop(d, None) + if coords is None: + continue + expansion[d] = to_list(coords) + + for vals in dict_product(expansion): + yield {**request, **vals} + + +def squeeze(reqs: list[dict], dims: list[str]) -> Iterator[dict]: + df = pd.DataFrame(reqs) + drop_dims = df.drop(dims, axis=1, errors="ignore").drop_duplicates() + for _, row in drop_dims.iterrows(): + req = row.dropna().to_dict() + condition = np.logical_and.reduce([df[k] == v for k, v in req.items()]) + cond_reqs = df.loc[condition].to_dict("records") + for dim in dims: + val = cond_reqs[0].get(dim, np.nan) + if val is None: + continue + if isinstance(val, str) or not np.isnan(val): + req[dim] = sorted(list({x[dim] for x in cond_reqs})) + yield req + + +def extract_mars(keys: dict, additional: list[str] = None) -> dict: + additional = additional or [] + for key, metadata_key in METADATA_KEYS.items(): + if metadata_key in keys: + keys[key] = keys.pop(metadata_key) + mars_namespace = [ + "class", + "type", + "stream", + "expver", + "model", + "levtype", + "levelist", + "param", + "date", + "year", + "month", + "hdate", + "fcmonth", + "fcperiod", + "time", + "step", + "number", + "domain", + "quantile", + "method", + "origin", + "system", + ] + return {k: v for k, v in keys.items() if (k in mars_namespace) or (k in additional)} diff --git a/pproc/src/pproc/config_generation.py b/pproc/src/pproc/config_generation.py index d4751ae4..69163b92 100644 --- a/pproc/src/pproc/config_generation.py +++ b/pproc/src/pproc/config_generation.py @@ -16,9 +16,9 @@ import yaml import json -from ppcore.schema.schema import Schema from pproc.config.factory import ConfigFactory +from pproc.schema.schema import Schema from pproc.common import mars logging.basicConfig( @@ -66,7 +66,7 @@ def _to_mars(requests: list[dict]) -> str: for req in requests: source = req.pop("source", None) target = req.pop("target", None) - # Reverse source/target keys so request can be used to + # Reverse source/target keys so request can be used to # create/extract from the input/output files if source and source not in ["fdb", "mars", "fdbmars"]: req["target"] = f"'{source}'" diff --git a/pproc/src/pproc/data/__init__.py b/pproc/src/pproc/data/__init__.py index 64e1349e..6d947223 100644 --- a/pproc/src/pproc/data/__init__.py +++ b/pproc/src/pproc/data/__init__.py @@ -6,3 +6,4 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. + diff --git a/pproc/src/pproc/data/pts/__init__.py b/pproc/src/pproc/data/pts/__init__.py index 64e1349e..6d947223 100644 --- a/pproc/src/pproc/data/pts/__init__.py +++ b/pproc/src/pproc/data/pts/__init__.py @@ -6,3 +6,4 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. + diff --git a/pproc/src/pproc/ecpoint.py b/pproc/src/pproc/ecpoint.py index 9fc1b9f0..25650153 100644 --- a/pproc/src/pproc/ecpoint.py +++ b/pproc/src/pproc/ecpoint.py @@ -16,6 +16,7 @@ import logging import numexpr +import eccodes from meters import ResourceMeter from conflator import Conflator import earthkit.data @@ -280,6 +281,7 @@ def ecpoint_iteration( config.parallelisation.n_par_compute, ) ): + # Scale outputs, needed for grib 2 rainfall in metres if config.scale_outputs is not None: pt_bc_allwt *= config.scale_outputs diff --git a/pproc/src/pproc/ecpt/predictors.py b/pproc/src/pproc/ecpt/predictors.py index f9d50916..51a2bcf8 100644 --- a/pproc/src/pproc/ecpt/predictors.py +++ b/pproc/src/pproc/ecpt/predictors.py @@ -2,8 +2,11 @@ import datetime import functools +import eccodes +import earthkit.data from earthkit.data import FieldList +from pproc.common.io import GribMetadata from pproc.config.param import ParamConfig from pproc.config.types import ECPointConfig from pproc.config.preprocessing import Expression diff --git a/pproc/src/pproc/ensms.py b/pproc/src/pproc/ensms.py index acdd83e5..0c08cd42 100755 --- a/pproc/src/pproc/ensms.py +++ b/pproc/src/pproc/ensms.py @@ -25,7 +25,6 @@ import numpy as np from conflator import Conflator from meters import ResourceMeter -from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values from pproc.common.io import write_grib from pproc.common.accumulation import Accumulator @@ -36,6 +35,7 @@ sigterm_handler, ) from pproc.common.param_requester import ParamConfig, ParamRequester +from pproc.common.grib_helpers import fill_template_values from pproc.config.types import EnsmsConfig @@ -58,6 +58,7 @@ def ensms_iteration( accum: Accumulator, template_ens: eccodes.GRIBMessage, ): + ens = accum.values assert ens is not None diff --git a/pproc/src/pproc/ensms_original.py b/pproc/src/pproc/ensms_original.py new file mode 100755 index 00000000..48941cd9 --- /dev/null +++ b/pproc/src/pproc/ensms_original.py @@ -0,0 +1,215 @@ +#!/usr/bin/env python3 +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + + +from io import BytesIO + +from datetime import datetime +import numpy as np + +import eccodes +import mir + +# import pyfdb + + +def parse_range(r: str): + if not r: + return (None,) + + l = r.lower().split("/") + if len(l) == 5 and l[1] == "to" and l[3] == "by": + return range(int(l[0]), int(l[2]) + 1, int(l[4])) + + if len(l) == 3 and l[1] == "to": + return range(int(l[0]), int(l[2]) + 1, 1) + + return sorted(set(map(int, l))) + + +def mars(input: str = ""): + from os import environ + from subprocess import run + + p = run( + "mars", + capture_output=True, + text=True, + input=input, + env=environ, + ) + if p.returncode: + print(f"stdout:\n{p.stdout}\n") + print(f"stderr:\n{p.stderr}\n") + + return p.returncode == 0 + + +def main(args=None): + import argparse + from os import path + + from pproc.Config import VariableTree, postproc_keys + + # arguments + parser = argparse.ArgumentParser( + description="Calculate ensemble means and standard deviations", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + + parser.add_argument("--config-file", help="Configuration file", required=True) + parser.add_argument( + "--config-node", help="Configuration node", required=True, nargs="+" + ) + + parser.add_argument("--no-mars", action="store_false", dest="mars") + parser.add_argument("--write-grib", action="store_true") + parser.add_argument("--write-fdb", action="store_true") + parser.add_argument( + "--std-corrected-sample", + help="corrected sample standard deviation", + action="store_true", + ) + parser.add_argument( + "--metkit-share-dir", + help="Metkit configuration directory", + default="/usr/local/apps/ecmwf-toolbox/2022.05.0.0/GNU/11.2/share/metkit", + ) + + parser.add_argument("--class", default="od", dest="klass") + parser.add_argument("--stream", default="enfo") + parser.add_argument("--expver", default=1) + parser.add_argument("--date", required=True) + parser.add_argument("--time", choices=(0, 6, 12, 18), default=0, type=int) + parser.add_argument("--number", default="1/to/50") + + parser.add_argument("--grid", default="O640") + parser.add_argument("--resol", default="av") + parser.add_argument("--intgrid", default=None) + parser.add_argument("--truncation", default=None) + + args = parser.parse_args() + print(args) + + date = datetime.strptime(args.date, "%Y%m%d") + pp_keys = postproc_keys(args.metkit_share_dir) + + # variables + tree = VariableTree(args.config_file) + var = tree.variables(*map(lambda n: int(n) if n.isdigit() else n, args.config_node)) + var.update(vars(args)) + var["class"] = var.pop("klass") + print(var) + + # assert one parameter only + assert "/" not in str(var["param"]) + + # assert fdb or mars-client + fdb = None # pyfdb.FDB() + assert bool(fdb) != bool(var["mars"]) + + tens = len(parse_range(var["number"])) + 1 # nens + 1 + + for levelist in parse_range(var["levelist"]): + for step in parse_range(var["step"]): + + if var["mars"]: + target = f"""param={var["param"]},levtype={var["levtype"]}{("",f",levelist={levelist}")[bool(levelist)]},step={step}""" + request = f""" +retrieve, + class = {var["class"]}, + type = pf, + stream = {var["stream"]}, + param = {var["param"]}, + date = {var["date"]}, + time = {var["time"]}, + levtype = {var["levtype"]}, + levelist = {levelist}, + expver = {var["expver"]}, + step = {step}, + number = {var["number"]}, + target = '{target}' + +retrieve, + type = cf, + number = off +""" + + print(request) + assert mars(request) + assert path.exists(target) + + # post-process + pp = {key: var[key] for key in pp_keys if var.get(key, None)} + if pp: + out = BytesIO() + inp = mir.GribFileInput(target) + + job = mir.Job(**pp) + job.execute(inp, out) + + out.seek(0) + eccodes_reader = eccodes.StreamReader(out) + else: + eccodes_reader = eccodes.FileReader(target) + + messages = list(eccodes_reader) + + # check data + # - for expected number of messages + # - for absence of missing values (otherwise need to convert to/from nan and use np.nanmean/np.nanstd) + assert tens == len(messages) + assert not any(m["missingValuesPresent"] for m in messages) + + data = np.asarray([m.get_array("values") for m in messages]) + + # mean across forecast ensemble members (perturbed and control) + # copy template GRIB message, modify headers and write/archive + mean = np.mean(data, axis=0) + + out_grib = messages[0].copy() + out_grib.set("type", "em") + out_grib.set("perturbationNumber", 0) + out_grib.set("numberOfForecastsInEnsemble", tens) + out_grib.set_array("values", mean) + + if var["write_grib"]: + assert not path.exists("em.grib") + with open("em.grib", "wb") as fout: + out_grib.write_to(fout) + + if var["write_fdb"]: + fdb.archive(out_grib.get_buffer()) + + # standard deviation across forecast ensemble members (perturbed and control) + # copy template GRIB message, modify headers and write/archive + stddev = np.std(data, axis=0, ddof=int(var["std_corrected_sample"])) + + out_grib = messages[0].copy() + out_grib.set("type", "es") + out_grib.set("perturbationNumber", 0) + out_grib.set("numberOfForecastsInEnsemble", tens) + out_grib.set_array("values", stddev) + + if var["write_grib"]: + assert not path.exists("es.grib") + with open("es.grib", "wb") as fout: + out_grib.write_to(fout) + + if var["write_fdb"]: + fdb.archive(out_grib.get_buffer()) + + # fdb.flush() + + +if __name__ == "__main__": + import sys + + main(sys.argv) diff --git a/pproc/src/pproc/extreme_forecast_simple.py b/pproc/src/pproc/extreme_forecast_simple.py new file mode 100755 index 00000000..79a2c548 --- /dev/null +++ b/pproc/src/pproc/extreme_forecast_simple.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +# +# (C) Copyright 1996- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation nor +# does it submit to any jurisdiction. + +import os +import argparse +import numpy as np + +import eccodes +from earthkit.meteo import extreme + + +def compute_efi(fcs, clim, eps): + + efi = extreme.efi(clim, fcs, eps) + + return efi + + +def compute_sot(fcs, clim, sot_values, eps): + + sot = {} + for perc in sot_values: + sot[perc] = extreme.sot(clim, fcs, perc, eps=eps) + + return sot + + +def read_grib(in_file): + reader = eccodes.FileReader(in_file) + + data = [] + for message in reader: + data_array = message.get_array("values") + + # handle missing values and replace by nan + if message.get('bitmapPresent'): + missing = message.get('missingValue') + data_array[data_array == missing] = np.nan + + data.append(data_array) + + return np.asarray(data) + + +def write_grib(template, data, out_dir, out_name): + reader = eccodes.FileReader(template) + messages = list(reader) + message = messages[0] + + # replace missing values if any + missing = -9999 + is_missing = np.isnan(data).any() + if is_missing: + data[np.isnan(data)] = missing + message.set('missingValue', missing) + message.set('bitmapPresent', 1) + + message.set_array('values', data) + + if is_missing: + n_missing1 = len(data[data==missing]) + n_missing2 = message.get('numberOfMissing') + if n_missing1 != n_missing2: + raise Exception(f'Number of missing values in the message not consistent, is {n_missing1} and should be {n_missing2}') + + out_file = os.path.join(out_dir, out_name) + with open(out_file,"ab") as outfile: + message.write_to(outfile) + + +def main(args=None): + + parser = argparse.ArgumentParser(description='Small python EFI test') + parser.add_argument('fc_file', help='Forecast input file') + parser.add_argument('clim_file', help='Climatology input file') + parser.add_argument('template', help='GRIB template') + parser.add_argument('out_dir', help='Output directory') + parser.add_argument('--sot', nargs="+", type=int, help='SOT percentiles values') + parser.add_argument('--eps', type=float, help='epsilon factor') + + args = parser.parse_args(args) + + sot_num = args.sot + if not isinstance(sot_num, list): + sot_num = [sot_num] + + fcs = read_grib(args.fc_file) + clim = read_grib(args.clim_file) + print(np.mean(fcs)) + print(np.mean(clim)) + + fc_name = os.path.basename(args.fc_file).split('_')[0] + + efi = compute_efi(fcs, clim, eps=args.eps) + print(np.mean(efi)) + + efifile = 'efi' + os.path.basename(args.fc_file)[3:] + write_grib(args.template, efi, args.out_dir, efifile) + + if fc_name == 'eps': + sot = compute_sot(fcs, clim, sot_num, eps=args.eps) + for val in sot_num: + sotfile = 'sot' + str(val) + os.path.basename(args.fc_file)[3:] + write_grib(args.template, sot[val], args.out_dir, sotfile) + + +if __name__ == "__main__": + main() diff --git a/pproc/src/pproc/extremes/__init__.py b/pproc/src/pproc/extremes/__init__.py index 64e1349e..6d947223 100644 --- a/pproc/src/pproc/extremes/__init__.py +++ b/pproc/src/pproc/extremes/__init__.py @@ -6,3 +6,4 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. + diff --git a/pproc/src/pproc/extremes/grib.py b/pproc/src/pproc/extremes/grib.py index c89e006a..2ed84ad2 100644 --- a/pproc/src/pproc/extremes/grib.py +++ b/pproc/src/pproc/extremes/grib.py @@ -13,6 +13,7 @@ def extreme_template(accum, template_fc, template_clim, allow_grib1_to_grib2=False): + template_ext = construct_message(template_fc, accum.grib_keys()) grib_keys = {} @@ -208,9 +209,9 @@ def sot_metadata(template, sot, metadata) -> dict: def cpf_metadata(template, metadata) -> dict: metadata = metadata.copy() - metadata["marsType"] = ( - 27 # FIXME: this corresponds to efi, should be a new value for cpf - ) + metadata[ + "marsType" + ] = 27 # FIXME: this corresponds to efi, should be a new value for cpf metadata["bitsPerValue"] = 24 edition = metadata.get("edition", template["edition"]) diff --git a/pproc/src/pproc/flight_levels.py b/pproc/src/pproc/flight_levels.py index 1f7eab6a..6afd7881 100644 --- a/pproc/src/pproc/flight_levels.py +++ b/pproc/src/pproc/flight_levels.py @@ -20,6 +20,7 @@ import functools import signal import sys +import earthkit import logging import numpy as np @@ -27,11 +28,10 @@ from earthkit.meteo import vertical from earthkit.data import FieldList, SimpleFieldList from meters import ResourceMeter -from ppcore.utils.dicts import dict_product from pproc.common.accumulation_manager import AccumulationManager from pproc.common.io import write_grib - +from pproc.common.utils import dict_product from pproc.common.parallel import ( parallel_processing, sigterm_handler, diff --git a/pproc/src/pproc/monthly_stats.py b/pproc/src/pproc/monthly_stats.py index 8470d543..a767d180 100644 --- a/pproc/src/pproc/monthly_stats.py +++ b/pproc/src/pproc/monthly_stats.py @@ -9,6 +9,7 @@ import sys from datetime import datetime, timedelta +from typing import Optional import numpy as np import eccodes diff --git a/pproc/src/pproc/prob/parallel.py b/pproc/src/pproc/prob/parallel.py index 99066e75..7579fce0 100644 --- a/pproc/src/pproc/prob/parallel.py +++ b/pproc/src/pproc/prob/parallel.py @@ -8,7 +8,7 @@ # nor does it submit to any jurisdiction. from meters import ResourceMeter -from typing import Optional +from typing import Union, Optional import numpy as np import numexpr @@ -73,6 +73,7 @@ def prob_iteration( with ResourceMeter( f"Param {param.name}, window {window_id}, computing threshold probs" ): + ens = accum.values assert ens is not None diff --git a/pproc/src/pproc/prob/threshold.py b/pproc/src/pproc/prob/threshold.py index 987068cb..ef09f555 100644 --- a/pproc/src/pproc/prob/threshold.py +++ b/pproc/src/pproc/prob/threshold.py @@ -61,13 +61,13 @@ def grib_keys(self, edition: int) -> dict: if edition != 2: raise ValueError("Threshold ranges are only supported for GRIB edition 2") return { - "scaleFactorOfLowerLimit": self.lower_scale_factor, - "scaledValueOfLowerLimit": round( + f"scaleFactorOfLowerLimit": self.lower_scale_factor, + f"scaledValueOfLowerLimit": round( self.lower_value * 10**self.lower_scale_factor, 0 ), "probabilityType": 2, - "scaleFactorOfUpperLimit": self.upper_scale_factor, - "scaledValueOfUpperLimit": round( + f"scaleFactorOfUpperLimit": self.upper_scale_factor, + f"scaledValueOfUpperLimit": round( self.upper_value * 10**self.upper_scale_factor, 0 ), } diff --git a/pproc/src/pproc/pts.md b/pproc/src/pproc/pts.md index c1e4e82d..a0578153 100644 --- a/pproc/src/pproc/pts.md +++ b/pproc/src/pproc/pts.md @@ -85,3 +85,4 @@ Filtering --- For filtering wind, check if *any* of the start/end track segment points exceed a minimum. + diff --git a/pproc/src/pproc/pts.py b/pproc/src/pproc/pts.py index d5c97d25..b191c31a 100755 --- a/pproc/src/pproc/pts.py +++ b/pproc/src/pproc/pts.py @@ -241,8 +241,7 @@ def main(args=None): } # regex: fixed size (n) " "-padded right-flushed integers - def rd(n): - return "|".join(" " * i + r"\d" * (n - i) for i in range(n)) + rd = lambda n: "|".join(" " * i + r"\d" * (n - i) for i in range(n)) re_filename = re.compile(r"^....(\d{10})_(\d{3}|..)_\d+_.{3}$") re_split = re.compile(r"^..... ( TD| TS|HR\d)$") diff --git a/pproc/src/pproc/quantiles.py b/pproc/src/pproc/quantiles.py index 3b4af8ab..142eb7b4 100644 --- a/pproc/src/pproc/quantiles.py +++ b/pproc/src/pproc/quantiles.py @@ -18,10 +18,10 @@ from earthkit.meteo.stats import iter_quantiles from meters import ResourceMeter from conflator import Conflator -from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_values from pproc.common.accumulation import Accumulator from pproc.common.accumulation_manager import AccumulationManager +from pproc.common.grib_helpers import fill_template_values from pproc.common.io import write_grib from pproc.common.parallel import ( create_executor, @@ -116,7 +116,9 @@ def main(): cfg.inputs, param.total_fields, ) - quantiles_partial = functools.partial(quantiles_iteration, cfg, param) + quantiles_partial = functools.partial( + quantiles_iteration, cfg, param + ) for keys, data in parallel_data_retrieval( cfg.parallelisation.n_par_read, accum_manager.dims, diff --git a/pproc/src/pproc/schema/__init__.py b/pproc/src/pproc/schema/__init__.py new file mode 100644 index 00000000..64e1349e --- /dev/null +++ b/pproc/src/pproc/schema/__init__.py @@ -0,0 +1,8 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. diff --git a/pproc/src/pproc/schema/base.py b/pproc/src/pproc/schema/base.py new file mode 100644 index 00000000..a2a4d578 --- /dev/null +++ b/pproc/src/pproc/schema/base.py @@ -0,0 +1,170 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import yaml +import copy +from typing import Callable, Any, Optional, Iterator +from typing_extensions import Self +import logging + +from pproc.config.utils import deep_update + +logger = logging.getLogger(__name__) + +UpdateFunc = Callable[[dict, dict], dict] +FilterFunc = Callable[[dict, str], Any] +MatchFunc = Callable[[dict, Any, Any], bool] + + +def dict_update(base: dict, update: dict) -> dict: + base.update(update) + return base + + +DEFAULT_UPDATE: UpdateFunc = deep_update +DEFAULT_FILTER: FilterFunc = dict.__getitem__ +DEFAULT_MATCH: MatchFunc = lambda _, value, expected: value == expected + + +class BaseSchema: + custom_update: dict[str, UpdateFunc] = {} + custom_filter: dict[str, FilterFunc] = {} + custom_match: dict[str, MatchFunc] = {} + + def __init__(self, schema: dict): + self.all_filters, self.schema = self.expand(schema) + self.filters = self.all_filters.difference(set(self.custom_filter.keys())) + + @classmethod + def from_file(cls, schema_path: str) -> Self: + with open(schema_path, "r") as f: + schema = yaml.safe_load(f) + return cls(schema) + + @classmethod + def expand(cls, schema: dict) -> tuple[set, dict]: + expanded = {} + filters = set() + for key, value in schema.items(): + if cls.is_subschema(key): + filters.add(key.split(":")[1]) + expanded.setdefault(key, {}) + for sub_keys, sub_values in value.items(): + new_filters, sub_expanded = cls.expand(sub_values) + filters.update(new_filters) + for sub_key in sub_keys.split("/"): + expanded[key][sub_key] = sub_expanded + else: + expanded[key] = value + return filters, expanded + + @classmethod + def is_subschema(cls, key: str) -> bool: + return "filter" in key + + @classmethod + def subschema(cls, key: str, schema: dict, request: dict) -> dict: + _, mars_key = key.split(":") + filter_value = cls.custom_filter.get(mars_key, DEFAULT_FILTER)( + request, mars_key + ) + ret = schema.get(filter_value, schema.get("*", None)) + if ret is None: + raise ValueError( + f"Filter value {filter_value} not found in schema {schema}, and no default provided" + ) + assert isinstance(ret, dict), f"Subschema must be a dictionary." + return ret + + @classmethod + def _traverse(cls, sub_schema: dict, request: dict, config: dict) -> dict: + for key, value in sub_schema.items(): + if cls.is_subschema(key): + cls._traverse(cls.subschema(key, value, request), request, config) + else: + # TODO: Remove copies? + cls.custom_update.get(key, DEFAULT_UPDATE)( + config, {key: copy.deepcopy(value)} + ) + return config + + def traverse(self, request: dict, config: Optional[dict] = None) -> dict: + if len(set.intersection(set(request.keys()), self.filters)) < len(self.filters): + raise ValueError( + f"Request {request} does not contain all required filters {self.filters}" + ) + return self._traverse(self.schema, request, config or {}) + + @classmethod + def _find_matching( + cls, + schema: dict, + configs: list[dict], + **matching, + ) -> Iterator[dict]: + for key, value in schema.items(): + if cls.is_subschema(key): + filter_key = key.split(":")[1] + new_configs = [] + value_matched = False + for filter_value in value.keys(): + if filter_value == "*": + continue + for fout in configs: + new_fout = copy.deepcopy(fout) + if new_fout["recon_req"].get(filter_key, None) == filter_value: + value_matched = True + if ( + new_fout["recon_req"].setdefault( + filter_key, copy.deepcopy(filter_value) + ) + != filter_value + ): + continue + new_configs.extend( + cls._find_matching( + schema[key][filter_value], + [new_fout], + **matching, + ) + ) + if "*" in schema[key].keys() and not value_matched: + new_configs.extend( + cls._find_matching(schema[key]["*"], configs, **matching) + ) + configs = new_configs + else: + [ + cls.custom_update.get(key, DEFAULT_UPDATE)( + cfg, {key: copy.deepcopy(value)} + ) + for cfg in configs + ] + + for cfg in configs: + is_match = True + for key, value in matching.items(): + if not cls.custom_match.get(key, DEFAULT_MATCH)( + cfg["recon_req"], + cfg.get(key, value), + value, + ): + is_match = False + break + if is_match: + logger.debug("Matched config: %s", cfg) + yield cfg + + def reconstruct( + self, output_template: Optional[dict] = None, **matching + ) -> Iterator[tuple[dict, dict]]: + for cfg in self._find_matching( + self.schema, [{"recon_req": output_template or {}}], **matching + ): + yield cfg.pop("recon_req"), cfg diff --git a/pproc/src/pproc/schema/config.py b/pproc/src/pproc/schema/config.py new file mode 100644 index 00000000..ad71d65a --- /dev/null +++ b/pproc/src/pproc/schema/config.py @@ -0,0 +1,65 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import numpy as np + +from pproc.schema.base import BaseSchema, dict_update +from pproc.schema.filters import _steplength, _selection, _steptype +from pproc.schema.utils import validate_request +from pproc.config.utils import to_list +from pproc.common.grib_helpers import fill_template_value +from pproc.common.utils import dict_apply + + +class ConfigSchema(BaseSchema): + custom_filter = { + "steplength": _steplength, + "selection": _selection, + "steptype": _steptype, + } + custom_update = {"interp_keys": dict_update} + + def config(self, output_request: dict) -> dict: + output_request = validate_request(output_request) + config = self.traverse(output_request) + if "quantile" in output_request: + out_quantiles = to_list(output_request["quantile"]) + numbers = np.zeros(len(out_quantiles)) + totals = np.zeros(len(out_quantiles)) + for index, quantile in enumerate(out_quantiles): + number, total = map(int, quantile.split(":")) + numbers[index] = number + totals[index] = total + if ( + np.all(totals == totals[0]) + and np.all(np.diff(numbers) == 1) + and len(numbers) == total + 1 + ): + quantiles = int(totals[0]) + else: + quantiles = list(numbers / totals) + config["quantiles"] = quantiles + if output_request["type"] == "sot": + config["sot"] = to_list(output_request["number"]) + + out_vals = output_request.copy() + date = str(output_request["date"]) + out_vals.update( + { + "year": date[0:4], + "month": date[4:6], + "day": date[6:8], + "steplength": _steplength(output_request, "step"), + } + ) + config = dict_apply( + lambda v: fill_template_value(v, out_vals) if isinstance(v, str) else v, + config, + ) + return config diff --git a/pproc/src/pproc/schema/deriver.py b/pproc/src/pproc/schema/deriver.py new file mode 100644 index 00000000..ab647f3f --- /dev/null +++ b/pproc/src/pproc/schema/deriver.py @@ -0,0 +1,265 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from typing import Literal, Any, Optional, Annotated, Union +import datetime +import bisect +from pydantic import BaseModel, Field, model_validator, ConfigDict +import numpy as np + +from earthkit.time import Sequence +from earthkit.time.climatology import RelativeYear, date_range + +from pproc.common.stepseq import fcmonth_to_steprange + + +class DefaultStepDeriver(BaseModel): + type_: Literal["default"] = Field("default", alias="type") + by: Optional[int] = None + include_start: bool = False + allow_missing_zero: bool = False + + def _inst_step(self, step: int, fc_steps: list[int]) -> list[int]: + if step not in fc_steps: + raise ValueError(f"Required step {step} not in forecast steps") + return [step] + + def _range(self, start: int, end: int, fc_steps: list[int]) -> tuple[int]: + if self.by: + fc_steps = [ + x + for x in fc_steps + if x + in range((fc_steps[0] // self.by) * self.by, fc_steps[-1] + 1, self.by) + ] + if self.include_start: + if start not in fc_steps: + if start == 0 and self.allow_missing_zero: + start_index = 0 + else: + raise ValueError(f"Required step {start} not in forecast steps") + else: + start_index = fc_steps.index(start) + else: + start_index = bisect.bisect_right(fc_steps, start) + if end not in fc_steps: + raise ValueError(f"Required step {end} not in forecast steps") + return fc_steps[start_index : fc_steps.index(end) + 1] + + def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: + steps = list(map(int, str(output_request["step"]).split("-"))) + if len(steps) == 1: + return self._inst_step(int(steps[0]), fc_steps) + return self._range(*steps, fc_steps) + + +class DeaccumulateStepDeriver(BaseModel): + type_: Literal["deaccumulate"] = Field("deaccumulate", alias="type") + by: int = 0 + allow_missing_zero: bool = False + + def _inst_step(self, step: int, fc_steps: list[int]) -> list[int]: + if step == 0: + raise ValueError(f"Cannot perform de-accumulation for step 0") + if step == fc_steps[0]: + return [step] + start = fc_steps[fc_steps.index(step) - 1] + return self._range(start, step, fc_steps) + + def _range(self, start: int, end: int, fc_steps: list[int]) -> list[int]: + end = max(end, self.by) + start = min(end - self.by, start) + if end not in fc_steps: + raise ValueError(f"Required step {end} not in forecast steps") + if start not in fc_steps: + if start == 0 and self.allow_missing_zero: + return [end] + raise ValueError(f"Required step {start} not in forecast steps") + return [start, end] + + def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: + steps = list(map(int, str(output_request["step"]).split("-"))) + if len(steps) == 1: + return self._inst_step(int(steps[0]), fc_steps) + return self._range(*steps, fc_steps) + + +class PrecomputedStepDeriver(BaseModel): + type_: Literal["precomputed"] = Field("precomputed", alias="type") + + def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: + if not isinstance(output_request["step"], str): + raise ValueError( + f"Step {output_request['step']} must be step range for pre-computed steps" + ) + return [output_request["step"]] + + +class FcmonthStepDeriver(DefaultStepDeriver): + type_: Literal["monthly"] = Field("monthly", alias="type") + + def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: + fcmonth = int(output_request["fcmonth"]) + start, end = map( + int, + fcmonth_to_steprange( + datetime.datetime.strptime(str(output_request["date"]), "%Y%m%d"), + fcmonth, + ).split("-"), + ) + return self._range(start, end, fc_steps) + + +class SelectionStepDeriver(DefaultStepDeriver): + type_: Literal["select"] = Field("select", alias="type") + index: int + + def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: + steps = list(map(int, str(output_request["step"]).split("-"))) + if len(steps) == 1: + assert ValueError("SelectionStepDeriver can not be used for single steps") + selection_range = self._range(*steps, fc_steps) + return [selection_range[self.index]] + + +class StaticStepDeriver(BaseModel): + type_: Literal["static"] = Field("static", alias="type") + values: Union[int, list[int]] + + def derive(self, output_request: dict, fc_steps: list[int]) -> list[int]: + steps = [self.values] if isinstance(self.values, int) else self.values + if not all([x in fc_steps for x in steps]): + raise ValueError(f"Values {steps}, must be contained in forecast steps") + return steps + + +ForecastStepDeriver = Annotated[ + Union[ + DefaultStepDeriver, + DeaccumulateStepDeriver, + PrecomputedStepDeriver, + FcmonthStepDeriver, + SelectionStepDeriver, + StaticStepDeriver, + ], + Field(default_factory=DefaultStepDeriver, discriminator="type_"), +] + + +class ClimStepDeriver(BaseModel): + type_: Literal["range", "instantaneous"] = Field("range", alias="type") + + @model_validator(mode="before") + @classmethod + def set_type(cls, data: Any) -> Any: + if isinstance(data, str): + return {"type": data} + return data + + @staticmethod + def _range(fc_request: dict, clim_steps: list[int]) -> str: + time = int(fc_request["time"]) // 100 + req_steps = fc_request["step"] + + if len(req_steps) == 1 and isinstance(req_steps[0], str): + req_steps = list(map(int, req_steps[0].split("-"))) + start, end = req_steps[0], req_steps[-1] + widths = [np.diff(list(map(int, x.split("-"))))[0] for x in clim_steps] + width = end - start + if width not in widths: + if len(req_steps) == 1: + # Only possible if start should be step 0 and it is missing + start = 0 + else: + step_intervals = np.diff(req_steps) + if np.any(step_intervals != step_intervals[0]): + raise ValueError( + "Can not derive width not irregular step intervals" + ) + start = start - step_intervals[0] + width = end - start + if width not in widths: + raise ValueError("Can not derive step range from input steps") + filtered_clim_steps = [ + x for index, x in enumerate(clim_steps) if widths[index] == width + ] + + # Find nearest clim window range to real forecast time + relative_time = start + int(time) + if time == 12: + relative_time = start - int(time) + + if end < 240: + clim_start_steps = [int(x.split("-")[0]) for x in filtered_clim_steps] + nearest = bisect.bisect_right(clim_start_steps, relative_time) + clim_start = clim_start_steps[nearest - 1] + if (nearest <= (len(clim_start_steps) - 1)) and ( + (clim_start_steps[nearest] - relative_time) + < (relative_time - clim_start) + ): + clim_start = clim_start_steps[nearest] + return f"{clim_start}-{clim_start + width}" + return f"{start}-{end}" + + @staticmethod + def _instantaneous(fc_request: dict, clim_steps: list[int]) -> list[int]: + time = int(fc_request["time"]) // 100 + steps = fc_request["step"] + # Match on valid time. Reforecast assumed to run at 00UTC only + matched_steps = [] + for step in steps: + valid_time = step + time + if valid_time > clim_steps[-1] and time == 12: + # This rule only applies to 12UTC runs + valid_time = step - time + if valid_time not in clim_steps: + raise ValueError(f"Required step {valid_time} not in climatology steps") + matched_steps.append(valid_time) + return matched_steps + + def derive(self, request: dict, clim_steps: list[str]) -> int | str: + return getattr(ClimStepDeriver, f"_{self.type_}")(request, clim_steps) + + +class ClimDateDeriver(BaseModel): + model_config = ConfigDict(extra="allow") + + option: str + sequence: Optional[dict] = None + + def derive(self, fc_request: dict, scheme: str) -> str | list[str]: + date = datetime.datetime.strptime(str(fc_request["date"]), "%Y%m%d") + if self.sequence is not None: + seq = Sequence.from_dict(self.sequence) + else: + seq = Sequence.from_resource(scheme) + kwargs = self.model_dump(exclude={"option", "sequence"}) + clim_date = getattr(seq, self.option)(date.date(), **kwargs) + if isinstance(clim_date, datetime.date): + return datetime.datetime.strftime(clim_date, "%Y%m%d") + return [datetime.datetime.strftime(x, "%Y%m%d") for x in clim_date] + + +class HindcastDatesDeriver(BaseModel): + rstart: int + rend: int + recurrence: str = "yearly" + include_endpoint: bool = False + + def derive(self, fc_request: dict) -> list[str]: + date = datetime.datetime.strptime(str(fc_request["date"]), "%Y%m%d").date() + kwargs = self.model_dump() + start = RelativeYear(self.rstart).relative_to(date) + end = RelativeYear(self.rend).relative_to(date) + return [ + datetime.datetime.strftime(x, "%Y%m%d") + for x in date_range( + date, start, end, self.recurrence, self.include_endpoint + ) + ] diff --git a/pproc/src/pproc/schema/filters.py b/pproc/src/pproc/schema/filters.py new file mode 100644 index 00000000..fe3858e7 --- /dev/null +++ b/pproc/src/pproc/schema/filters.py @@ -0,0 +1,33 @@ +from pproc.common.stepseq import fcmonth_to_steprange + + +def _steptype(request: dict, key: str) -> str: + step = request.get("step", "") + steprange = str(step).split("-") + return "range" if len(steprange) == 2 else "instantaneous" + + +def _steplength(request: dict, key: str) -> str: + if "fcmonth" in request: + step = fcmonth_to_steprange(str(request["date"]), int(request["fcmonth"])) + else: + step = request.get("step", "") + steprange = list(map(int, str(step).split("-"))) + length = str(0) if len(steprange) == 1 else str(steprange[1] - steprange[0]) + return length + + +def _selection(request: dict, key: str) -> str: + return request.get("selection", "default") + + +def _members(request: dict, key: str) -> str: + number = request["number"] + if isinstance(number, (int, str)): + number = [number] + number = list(map(int, number)) + if 0 not in number: + return "no_zero" + if len(number) == 1: + return "only_zero" + return "contains_zero" diff --git a/pproc/src/pproc/schema/input.py b/pproc/src/pproc/schema/input.py new file mode 100644 index 00000000..a41d4529 --- /dev/null +++ b/pproc/src/pproc/schema/input.py @@ -0,0 +1,477 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from typing import Optional, Union, Iterator, Any +from typing_extensions import Self +from pydantic import BaseModel, model_validator, field_validator +import copy +import pandas as pd +import numpy as np +import logging + +from pproc.schema.base import BaseSchema +from pproc.schema.deriver import ( + ForecastStepDeriver, + DefaultStepDeriver, + ClimDateDeriver, + ClimStepDeriver, + HindcastDatesDeriver, +) +from pproc.schema.filters import _steplength, _steptype, _selection, _members +from pproc.schema.step import StepSchema +from pproc.schema.utils import validate_request +from pproc.config.utils import ( + update_request, + expand, + squeeze, + deep_update, + extract_mars, + to_list, +) + +logger = logging.getLogger(__name__) + + +class ForecastInput(BaseModel): + members: Optional[dict] = None + request: dict + derive_step: ForecastStepDeriver + derive_date: Optional[list[ClimDateDeriver]] = None + derive_hdate: Optional[HindcastDatesDeriver] = None + + @field_validator("derive_date", mode="before") + @classmethod + def format_derive_date(cls, data: Any) -> Any: + if isinstance(data, dict): + return [data] + return data + + @model_validator(mode="after") + def populate_request(self) -> Self: + if self.members: + if "number" in self.request: + number = np.asarray(self.request["number"]) + number = list( + number[ + (number >= self.members["start"]) + & (number <= self.members["end"]) + ] + ) + else: + number = list(range(self.members["start"], self.members["end"] + 1)) + self.request["number"] = number + else: + self.request.pop("number", None) + return self + + def populate_derived( + self, base_request: dict, steps: list[int], scheme: Optional[str] = None + ): + for k, v in self.request.items(): + self.request[k] = v if v != f"{{{k}}}" else base_request[k] + self.request["step"] = self.derive_step.derive(base_request, steps) + if self.derive_date: + request = base_request.copy() + for deriver in self.derive_date: + request["date"] = deriver.derive(request, scheme) + self.request["date"] = request["date"] + if self.derive_hdate: + self.request["hdate"] = self.derive_hdate.derive(base_request) + + def mars(self) -> dict: + req = extract_mars(self.request, additional=["target_grid"]) + for key in list(req.keys()): + if req[key] == f"{{{key}}}": + req.pop(key) + return req + + +class ClimatologyInput(ForecastInput): + derive_step: Optional[ClimStepDeriver] = None + + @model_validator(mode="after") + def populate_request(self) -> Self: + super().populate_request() + if self.request.get("type", None) == "cd": + self.request["quantile"] = [f"{x}:100" for x in range(0, 101)] + return self + + def populate_derived(self, base_request: dict, steps: list[int | str], scheme: str): + assert ( + self.derive_step and self.derive_date + ), "Both step and date derivers required" + super().populate_derived(base_request, steps, scheme) + + +class ForecastConfig(BaseModel): + inputs: list[ForecastInput] + scheme: Optional[str] = None + + @model_validator(mode="after") + def simplify_requests(self) -> Self: + if len(self.inputs) == 1: + return self + base_input = self.inputs[0].model_dump(exclude="members") + number = set(base_input["request"].pop("number", [])) + for input in self.inputs[1:]: + input_dict = input.model_dump(exclude="members") + input_number = input_dict["request"].pop("number", []) + if base_input != input_dict: + return self + number = number.union(input_number) + number = sorted(list(number)) + diff = set(np.diff(number)) + if len(diff) != 0 and diff != {1}: + return self + members = None + if len(number) != 0: + base_input["request"]["number"] = number + members = {"start": number[0], "end": number[-1]} + self.inputs = [ForecastInput(**base_input, members=members)] + return self + + def steps(self) -> list[int]: + out = set() + for inp in self.inputs: + steps = inp.request["step"] + assert isinstance(steps, list), f"Expected list of steps, got {steps}" + out.update(steps) + out = list(out) + out.sort() + return out + + def base_request(self, *exclude) -> dict: + out = {} + if len(self.inputs) == 0: + return out + + for key in set.intersection(*[set(inp.request.keys()) for inp in self.inputs]): + if all( + [inp.request[key] == self.inputs[0].request[key] for inp in self.inputs] + ): + if key not in exclude: + out[key] = self.inputs[0].request[key] + return out + + def match(self, input_requests: list[dict]) -> Iterator[Self]: + paramless = ["param" not in inp.mars() for inp in self.inputs] + + if any(paramless): + assert all(paramless), "All or none of the inputs must specify param" + groupby = ["param", "levtype"] + squeeze_dims = ["step", "number", "levelist", "quantile"] + else: + groupby = "levtype" + squeeze_dims = ["step", "number", "levelist", "param", "quantile"] + for _, group in pd.DataFrame(input_requests).groupby(groupby, sort=False): + updated_reqs = [] + for inp in self.inputs: + req = inp.mars() + require = expand(req) + intersection = _intersect(require, group.to_dict("records")) + reqs = list(squeeze(intersection.to_dict("records"), squeeze_dims)) + if len(reqs) == 0: + break + assert len(reqs) == 1, f"Expected single request, got {reqs} for {req}" + updated_reqs.append(reqs[0]) + if len(updated_reqs) == 0: + continue + yield type(self)( + **self.model_dump(exclude=("inputs",), by_alias=True), + inputs=[ + { + **inp.model_dump(exclude=("request",), by_alias=True), + "request": updated_reqs[i], + } + for i, inp in enumerate(self.inputs) + ], + ) + + +class ClimatologyConfig(ForecastConfig): + scheme: str = "" + inputs: list[ClimatologyInput] + required: bool = False + + def match(self, input_requests: list[dict]) -> Iterator[Self]: + assert all(["param" in inp.mars() for inp in self.inputs]) + yield from super().match(input_requests) + + +class InputConfig(BaseModel): + forecast: ForecastConfig + climatology: ClimatologyConfig + from_inputs: bool = True + + def populate_derived( + self, + output_request: dict, + fc_steps: list[int], + clim_steps: Optional[list[int | str]] = None, + ): + for input in self.forecast.inputs: + input.populate_derived(output_request, fc_steps, self.forecast.scheme) + + if self.climatology.required: + for input in self.climatology.inputs: + input.populate_derived( + self.forecast.base_request(), + clim_steps, + self.climatology.scheme, + ) + + def inputs(self) -> Iterator[dict]: + for inp in self.forecast.inputs: + yield inp.mars() + if self.climatology.required: + for inp in self.climatology.inputs: + yield {**inp.mars(), "climatology": True} + + def match(self, input_requests: list[dict]) -> Iterator[Self]: + fc_inputs = list(self.forecast.match(input_requests)) + + if self.climatology.required: + assert ( + len(fc_inputs) == 1 + ), "Climatology should be uniquely tied to forecast" + + fc_config = fc_inputs[0] + for clim_inp in self.climatology.inputs: + assert ( + len(clim_inp.derive_date) == 1 + ), "Climatology can only have a single date" + clim_inp.request["date"] = clim_inp.derive_date[0].derive( + fc_config.base_request(), self.climatology.scheme + ) + try: + clim_inputs = list(self.climatology.match(input_requests)) + except AssertionError: + logger.warning("Could not find required climatology in requests") + return iter([]) + + yield InputConfig( + forecast=fc_inputs[0], + climatology=clim_inputs[0], + ) + else: + for fc_input in fc_inputs: + yield InputConfig( + forecast=fc_input, + climatology=self.climatology, + from_inputs=self.from_inputs, + ) + + +def _update_config(config: dict, update: dict[str, dict]) -> dict: + for fc_type, fc_update in update.items(): + fc_update = fc_update.copy() + fc_config = config[fc_type].model_dump(exclude_none=True, by_alias=True) + current_inputs = fc_config.pop("inputs") + update_inputs = fc_update.pop("inputs", []) + method = fc_update.get("update_request_method", "map") + inputs = update_request(current_inputs, update_inputs, method=method) + config[fc_type] = type(config[fc_type])( + **deep_update(fc_config, fc_update), inputs=inputs + ) + return config + + +def _intersect( + lista: list[dict], listb: list[dict], how: str = "inner" +) -> pd.DataFrame: + dfa = pd.DataFrame(lista) + dfa.drop(columns="number", errors="ignore", inplace=True) + dfa.drop_duplicates(inplace=True) + dfb = pd.DataFrame(listb) + merged = dfa.merge(dfb, how=how, on=dfa.columns.tolist()) + + num_expected = len(dfa) + restricted = merged.drop( + columns=["number"] + [x for x in dfb.columns if x not in dfa.columns], + errors="ignore", + ) + restricted.drop_duplicates(inplace=True) + return merged if len(restricted) == num_expected else pd.DataFrame() + + +def _match_forecast( + out: dict, forecast: Union[ForecastConfig, ClimatologyConfig], match: dict +) -> bool: + for key, value in match.items(): + if key == "inputs": + if not getattr(forecast, "required", True) or len(forecast.inputs) == 0: + continue + require = [] + for inp in forecast.inputs: + for key in list(inp.request.keys()): + if inp.request[key] == f"{{{key}}}": + if key not in out: + return True + inp.request[key] = out[key] + require.extend(expand(inp.request)) + merged = _intersect(require, value) + if len(merged) == 0: + return False + elif getattr(forecast, key, value) != value: + return False + return True + + +class InputSchema(BaseSchema): + custom_update = { + "forecast": _update_config, + "climatology": _update_config, + } + custom_filter = { + "steptype": _steptype, + "steplength": _steplength, + "selection": _selection, + "members": _members, + } + custom_match = {"forecast": _match_forecast, "climatology": _match_forecast} + + @classmethod + def _format_output_request( + cls, request: dict, pop: Optional[list[str]] = [] + ) -> dict: + out = copy.deepcopy(request) + ignore_inheritance = { + "number": lambda req: ( + req["type"] + not in ["pf", "fcmean", "fcmax", "fcstdev", "fcmin", "fc", "gwt"] + ), + "step": None, + "fcmonth": None, + "quantile": None, + } + ignore_inheritance.update({x: None for x in pop}) + for key, condition in ignore_inheritance.items(): + if condition is None or condition(request): + out.pop(key, None) + return out + + def inputs(self, output_request: dict, step_schema: StepSchema) -> Iterator[dict]: + output_request = validate_request(output_request) + initial = { + "forecast": ForecastConfig.model_construct( + inputs=[ + ForecastInput.model_construct( + request=self._format_output_request(output_request), + derive_step=DefaultStepDeriver(), + ) + ], + ), + "climatology": ClimatologyConfig.model_construct( + inputs=[ + ClimatologyInput.model_construct( + request=self._format_output_request( + output_request, pop=["date"] + ) + ) + ], + ), + } + config = InputConfig(**self.traverse(output_request, initial)) + fc_steps = step_schema.in_steps(output_request) + clim_steps = ( + None + if not config.climatology.required + else step_schema.out_steps(config.climatology.inputs[0].request)[1] + ) + config.populate_derived(output_request, fc_steps, clim_steps) + for inp in config.inputs(): + yield validate_request(inp) + + def reconstruct( + self, output_template: Optional[dict] = None, **matching + ) -> Iterator[tuple[dict, InputConfig]]: + inherit = ["levelist", "levtype"] + base_request = { + key: output_template[key] for key in inherit if key in output_template + } + for cfg in self._find_matching( + self.schema, + [ + { + "recon_req": output_template or {}, + "forecast": ForecastConfig.model_construct( + inputs=[ForecastInput.model_construct(request=base_request)] + ), + "climatology": ClimatologyConfig.model_construct( + inputs=[ClimatologyInput.model_construct(request=base_request)] + ), + } + ], + **matching, + ): + out, input_config = cfg.pop("recon_req"), InputConfig(**cfg) + logger.info("Reconstructed output %s, with config %s", out, input_config) + yield out, input_config + + def _set_defaults(cls, output_request: dict, input_requests: list[dict]) -> dict: + output_request = validate_request(output_request) + tp = output_request["type"] + if tp in ["fcmean", "fcmax", "fcstdev", "fcmin"]: + output_request["number"] = sum( + [to_list(req.get("number", [0])) for req in input_requests], [] + ) + elif tp in ["pf", "gwt"]: + for req in input_requests: + if req["type"] in ["pf", "gwt"] and "number" in req: + output_request["number"] = req["number"] + break + elif tp in ["pb", "cd"]: + output_request.setdefault("quantile", [f"{x}:100" for x in range(0, 101)]) + elif tp == "sot": + output_request.setdefault("number", [10, 90]) + return output_request + + def outputs( + self, + input_requests: list[dict], + step_schema: Optional[StepSchema] = None, + output_template: Optional[dict] = None, + ) -> Iterator[tuple[dict, list[dict]]]: + """ + Assumes inputs are from the same forecast for a single date and time + """ + input_requests = list(expand([validate_request(req) for req in input_requests])) + output_template = ( + None if output_template is None else validate_request(output_template) + ) + for base_output, config in self.reconstruct( + output_template=output_template, + forecast={"inputs": input_requests}, + climatology={"inputs": input_requests}, + from_inputs=True, + ): + for mconfig in config.match(input_requests): + logger.debug("Matched config: %s", mconfig) + mout = { + **mconfig.forecast.base_request("step", "number"), + **base_output, + } + + step_schema = step_schema or StepSchema({}) + step_dim, out_steps = step_schema.out_steps( + mout, mconfig.forecast.steps() + ) + clim_steps = ( + None + if not mconfig.climatology.required + else mconfig.climatology.steps() + ) + + for step in out_steps: + out = {**mout, step_dim: step} + sconfig = mconfig.model_copy(deep=True) + sconfig.populate_derived(out, sconfig.forecast.steps(), clim_steps) + out, inputs = out, [validate_request(x) for x in sconfig.inputs()] + logger.info("Output %s, requiring inputs %s", out, inputs) + yield self._set_defaults(out, inputs), inputs diff --git a/pproc/src/pproc/schema/schema.py b/pproc/src/pproc/schema/schema.py new file mode 100644 index 00000000..2e4481e2 --- /dev/null +++ b/pproc/src/pproc/schema/schema.py @@ -0,0 +1,87 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from typing import Iterator, Optional +from typing_extensions import Self +import copy +import numpy as np +import pandas as pd +import yaml + +from pproc.schema.config import ConfigSchema +from pproc.schema.input import InputSchema +from pproc.schema.step import StepSchema +from pproc.schema.utils import validate_request, VALUE_TYPES + +from pproc.config.utils import expand, METADATA_KEYS + + +class Schema: + def __init__(self, config: dict, inputs: dict, windows: dict): + self.config_schema = ConfigSchema(config) + self.param_schema = InputSchema(inputs) + self.step_schema = StepSchema(windows) + + @classmethod + def from_file(cls, schema_path: str) -> Self: + with open(schema_path, "r") as f: + schema = yaml.safe_load(f) + return cls(**schema) + + def config_from_output( + self, output_request: dict, inputs: Optional[list[dict]] = None + ) -> dict: + config = self.config_schema.config(output_request) + if inputs is not None: + inputs = [validate_request(x) for x in inputs] + else: + inputs = list(self.param_schema.inputs(output_request, self.step_schema)) + + # Set metadata + base_request = inputs[0] + metadata = config.setdefault("metadata", {}) + if np.size(base_request["param"]) > 1: + config["name"] = f"{output_request['param']}_{output_request['levtype']}" + config.setdefault( + "name", f"{base_request['param']}_{output_request['levtype']}" + ) + for key in config.pop("metadata_from_output", []): + if base_request.get(key, None) != VALUE_TYPES.get(key, str)( + output_request[key] + ): + metadata_key = METADATA_KEYS.get(key, key) + metadata[metadata_key] = VALUE_TYPES.get(metadata_key, str)( + output_request[key] + ) + return {**config, "inputs": inputs} + + def config_from_input( + self, + input_requests: list[dict], + output_template: Optional[dict] = None, + entrypoint: Optional[str] = None, + ) -> Iterator[dict]: + reconstructed = self.config_schema.reconstruct( + output_template=( + None if output_template is None else validate_request(output_template) + ), + **({} if entrypoint is None else {"entrypoint": entrypoint}), + ) + matching_types = pd.DataFrame([x for x, _ in reconstructed]) + output_keys = [] if output_template is None else list(output_template.keys()) + drop = [ + x for x in self.config_schema.all_filters.difference(["type"] + output_keys) + ] + matching_types.drop(columns=drop, inplace=True, errors="ignore") + matching_types.drop_duplicates(inplace=True) + for template in matching_types.to_dict(orient="records"): + for output, inputs in self.param_schema.outputs( + input_requests, self.step_schema, output_template=template + ): + yield self.config_from_output(output, inputs) diff --git a/pproc/src/pproc/schema/step.py b/pproc/src/pproc/schema/step.py new file mode 100644 index 00000000..ef61aa8c --- /dev/null +++ b/pproc/src/pproc/schema/step.py @@ -0,0 +1,139 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from pydantic import BaseModel, Field, RootModel +from typing import Literal, Optional, Annotated, Union +import numpy as np +import bisect + +from pproc.schema.base import BaseSchema +from pproc.common.stepseq import stepseq_monthly, steprange_to_fcmonth + + +class Instantaneous(BaseModel): + type_: Literal["instantaneous"] = Field("instantaneous", alias="type") + deaccumulate: bool = False + start: Optional[int] = None + end: Optional[int] = None + interval: Optional[int] = None + dim: Literal["step"] = "step" + + def generate_steps(self, steps: list[int]) -> list[int]: + start = self.start or steps[0] + end = self.end or steps[-1] + if self.interval: + interval_steps = list(range(start, end + 1, self.interval)) + selected_steps = [x for x in interval_steps if x in steps] + else: + start_index = bisect.bisect_left(steps, start) + end_index = bisect.bisect_right(steps, end) + selected_steps = steps[start_index:end_index] + return selected_steps[1:] if self.deaccumulate else selected_steps + + +class Range(BaseModel): + type_: Literal["range"] = Field("range", alias="type") + start: Optional[int] = None + end: Optional[int] = None + interval: int + width: int + dim: Literal["step"] = "step" + + def generate_steps(self, steps: list[int | str]) -> list[str]: + if all(isinstance(x, str) for x in steps): + return steps + assert all( + isinstance(x, int) for x in steps + ), "Steps can not be a mix of strings and integers" + start = self.start or steps[0] + end = min((self.end or steps[-1]), steps[-1]) - self.width + rstarts = set(range(start, end + 1, self.interval)) + rstarts.intersection_update(steps) + return [f"{rstart}-{rstart + self.width}" for rstart in sorted(rstarts)] + + +class Monthly(BaseModel): + type_: Literal["monthly"] = Field("monthly", alias="type") + date: str + dim: Literal["fcmonth"] = "fcmonth" + + def generate_steps(self, steps: list[int]) -> list[int]: + by = np.diff(steps) + if len(by) == 0: + return [] + if len(set(by)) != 1: + raise ValueError("Monthly steps must be evenly spaced") + return [ + steprange_to_fcmonth(self.date, f"{x[0]}-{x[-1]}") + for x in stepseq_monthly(self.date, steps[0], steps[-1], by[0]) + ] + + +StepType = RootModel[ + Annotated[ + Union[Instantaneous, Range, Monthly], + Field(discriminator="type_"), + ] +] + + +class StepSchema(BaseSchema): + @classmethod + def _create_steps(cls, step_config: list[dict]) -> list[int]: + steps = set( + sum( + [ + list(range(x["from"], x["to"] + 1, x.get("by", 1))) + for x in step_config + ], + [], + ) + ) + return sorted(steps) + + def in_steps(self, request: dict) -> list[int]: + config = self.traverse(request) + return self._create_steps(config.get("in_steps", [])) + + def out_steps( + self, request_or_name: dict | str, steps: Optional[list[int]] = None + ) -> tuple[str, list[int | str]]: + if isinstance(request_or_name, str): + step_configs = self.schema.get("defs", {}).get(request_or_name, []) + else: + for dim in ["step", "fcmonth"]: + if dim in request_or_name: + return dim, [request_or_name[dim]] + + config = self.traverse(request_or_name, {}) + steps = steps or self._create_steps(config.get("in_steps", [])) + step_configs = config.get("out_steps", None) + if step_configs is None: + raise ValueError(f"No output steps defined {request_or_name}") + + if isinstance(step_configs, dict): + step_configs = [step_configs] + + out = [] + dim = None + for step_config in step_configs: + if isinstance(step_config, str): + if all(x in steps for x in map(int, step_config.split("-"))): + out.append(step_config) + continue + step_config = { + k: v.format_map(request_or_name) if isinstance(v, str) else v + for k, v in step_config.items() + } + step_type = StepType(**step_config).root + if dim is None: + dim = step_type.dim + assert dim == step_type.dim, "All steps must be of the same dimension" + out.extend([x for x in step_type.generate_steps(steps) if x not in out]) + return dim, out diff --git a/pproc/src/pproc/schema/utils.py b/pproc/src/pproc/schema/utils.py new file mode 100644 index 00000000..4c3bc89a --- /dev/null +++ b/pproc/src/pproc/schema/utils.py @@ -0,0 +1,45 @@ +import copy +from typing import Any +import numpy as np + + +VALUE_TYPES = { + "param": str, + "paramId": int, + "levelist": int, + "step": int, + "fcmonth": int, + "number": int, + "dataDate": int, + "date": str, +} + + +def validate_request(request: dict) -> dict: + """ + Format request into desired format for schema and config generation + """ + out = copy.deepcopy(request) + # Map types + for key, value in request.items(): + if isinstance(value, list) and len(value) == 1: + value = value[0] + if key in VALUE_TYPES: + value_type = VALUE_TYPES[key] + try: + value = ( + value_type(value) + if np.ndim(value) == 0 + else list(map(value_type, value)) + ) + except ValueError: + pass + out[key] = value + # Format time + if time := out.get("time", None): + if isinstance(time, list): + raise ValueError("Only single value of time supported per request") + if isinstance(time, int): + time = f"{time:02d}" + out["time"] = time.ljust(4, "0") + return out diff --git a/pproc/src/pproc/signi/__init__.py b/pproc/src/pproc/signi/__init__.py index 64e1349e..6d947223 100644 --- a/pproc/src/pproc/signi/__init__.py +++ b/pproc/src/pproc/signi/__init__.py @@ -6,3 +6,4 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. + diff --git a/pproc/src/pproc/signi/clim.py b/pproc/src/pproc/signi/clim.py index cdbacd65..7581b41c 100644 --- a/pproc/src/pproc/signi/clim.py +++ b/pproc/src/pproc/signi/clim.py @@ -7,12 +7,12 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. -from typing import Optional, Tuple +from typing import Optional, Tuple, List import eccodes from meters import ResourceMeter -from pproc.common.param_requester import ParamRequester, IndexFunc +from pproc.common.param_requester import ParamConfig, ParamRequester, IndexFunc from pproc.common.accumulation import Accumulator from pproc.common.accumulation_manager import AccumulationManager from pproc.common.parallel import parallel_data_retrieval @@ -28,6 +28,7 @@ def retrieve_clim( index_func: Optional[IndexFunc] = None, **additional_dims, ) -> Tuple[Accumulator, eccodes.GRIBMessage]: + accums = param.accumulations.copy() for dim, value in additional_dims.items(): accums[dim] = {"operation": "aggregation", "coords": [[value]]} diff --git a/pproc/src/pproc/significance.py b/pproc/src/pproc/significance.py index e4bd1c1b..5e9edc33 100644 --- a/pproc/src/pproc/significance.py +++ b/pproc/src/pproc/significance.py @@ -117,6 +117,7 @@ def signi_iteration( window_id: str, accum: Accumulator, ): + with ResourceMeter(f"{param.name}, window {window_id}: Retrieve climatology"): steprange = accum.grib_keys()["stepRange"] clim_accum, clim_template = retrieve_clim( diff --git a/pproc/src/pproc/spectrum.py b/pproc/src/pproc/spectrum.py index b9573800..988b6417 100755 --- a/pproc/src/pproc/spectrum.py +++ b/pproc/src/pproc/spectrum.py @@ -33,8 +33,8 @@ def spectrum(T, sh): def norm(m, n, r, i): zmet = zlam * (1 if m == 0 else 2) - zfact = 1.0 if n == 0 else ra**2 / (n * (n + 1)) - return zmet * zfact * (r**2 if m == 0 else (r**2 + i**2)) + zfact = 1.0 if n == 0 else ra ** 2 / (n * (n + 1)) + return zmet * zfact * (r ** 2 if m == 0 else (r ** 2 + i ** 2)) sp = np.zeros(T + 1) i = 0 @@ -78,7 +78,7 @@ def main(): rot = spectrum(T, sh_vo) div = spectrum(T, sh_d) - ke = (rot + div) * np.array([n**1.6666 for n in range(T + 1)]) + ke = (rot + div) * np.array([n ** 1.6666 for n in range(T + 1)]) if not args.linear: rot = np.log10(rot) div = np.log10(div) diff --git a/pproc/src/pproc/tcycl/__init__.py b/pproc/src/pproc/tcycl/__init__.py index 64e1349e..6d947223 100644 --- a/pproc/src/pproc/tcycl/__init__.py +++ b/pproc/src/pproc/tcycl/__init__.py @@ -6,3 +6,4 @@ # In applying this licence, ECMWF does not waive the privileges and immunities # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. + diff --git a/pproc/src/pproc/tcycl/tcycl_evaluate.py b/pproc/src/pproc/tcycl/tcycl_evaluate.py index e46e54b3..f1001a68 100644 --- a/pproc/src/pproc/tcycl/tcycl_evaluate.py +++ b/pproc/src/pproc/tcycl/tcycl_evaluate.py @@ -21,23 +21,32 @@ class TropicalCyclone: Simply a TC with name and lat/lon """ - allowed_params = ["p", "wind", "step"] - + allowed_params = [ + "p", + "wind", + "step" + ] + def __init__(self, name, lat, lon, **kwargs): + self.name = name self.lat = lat self.lon = lon self.params = kwargs - + # check other TC params self._check_params(kwargs) - + def _check_params(self, params): + for p in params: assert p in self.allowed_params, f"Parameter {p} not allowed!" - + def distance_from(self, tc_other): - return self._haversine_dist(self.lat, self.lon, tc_other.lat, tc_other.lon) + return self._haversine_dist(self.lat, + self.lon, + tc_other.lat, + tc_other.lon) @staticmethod def _haversine_dist(lat1, lon1, lat2, lon2): @@ -45,27 +54,25 @@ def _haversine_dist(lat1, lon1, lat2, lon2): Haversine distance """ p = math.pi / 180 - - a = ( - 0.5 - - math.cos((lat2 - lat1) * p) / 2 - + math.cos(lat1 * p) - * math.cos(lat2 * p) - * (1 - math.cos((lon2 - lon1) * p)) - / 2 - ) + + a = 0.5 - \ + math.cos((lat2 - lat1) * p) / 2 + \ + math.cos(lat1 * p) * math.cos(lat2 * p) * \ + (1 - math.cos((lon2 - lon1) * p)) / 2 # 2 * R * asin... distance = 12742 * math.asin(math.sqrt(a)) - + return distance - + def __str__(self): - """ """ - + """ + + """ + min_req_str = f"{self.name:15} lat: {self.lat:7.2f} lon: {self.lon:7.2f}, " - params_str = ", ".join([f"{k}: {w:7.2f}" for k, w in self.params.items()]) - + params_str = ", ".join([f'{k}: {w:7.2f}' for k, w in self.params.items()]) + return min_req_str + params_str @@ -75,8 +82,9 @@ class TC_Forecast: dictionary of tropical cyclones grouped according to forecast step """ - + def __init__(self, *args, **kwargs): + # Structure of self.data # { # : [ @@ -91,13 +99,13 @@ def __init__(self, *args, **kwargs): # ... # } self.data = self._parse() - + def _parse(self): raise NotImplementedError - + def __getitem__(self, item): return self.data.get(item, []) - + @property def steps(self): return sorted(list(self.data.keys())) @@ -110,7 +118,7 @@ def print(self): for _tc in tc_s: print(_tc) - + class TC_Observation(TC_Forecast): """ Similar to TC forecast but with no @@ -123,18 +131,18 @@ class TC_Observation(TC_Forecast): # , # ... # ] - + def __getitem__(self, item): """ Always return the data, regardless of the "step", as there is no concept of "step" for tc observation """ return self.data - + @property def steps(self): return [] - + def print(self): """ Print TC's @@ -142,72 +150,75 @@ def print(self): for tc_s in self.data: for _tc in tc_s: print(_tc) - + class TRCKR_Forecast(TC_Forecast): """ Reference TC data from CSV """ - - required_fields = ["name", "step", "lat_p", "lon_p"] - - def __init__( - self, - reference_tc_path, - min_wind_speed=None, # 34 knots = 17.47 m/s - search_steps=None, - ): + + required_fields = [ + "name", + "step", + "lat_p", + "lon_p" + ] + + def __init__(self, + reference_tc_path, + min_wind_speed=None, # 34 knots = 17.47 m/s + search_steps=None): + # Reference TC predictions read from CSV self.df = pd.read_csv(reference_tc_path) - + if min_wind_speed is not None: self._filter_out_low_wind_tc(min_wind_speed) - + # Check data self._check_csv_data() - + if search_steps is not None: self.search_steps = search_steps else: self.search_steps = sorted(set(self.df.step)) - + super().__init__() - + def _filter_out_low_wind_tc(self, min_wind_speed): - self.df = self.df.loc[self.df["wind"] >= min_wind_speed] - + self.df = self.df.loc[self.df['wind'] >= min_wind_speed] + def _check_csv_data(self): """ Check that required fields are in CSV """ - + for req in self.required_fields: assert req in self.df, f"Error, field {req} not found in CSV!" - + def _parse(self): + # Collect TC tracker prediction data tc_predictions = {} for step in self.search_steps: - tc_predictions[step] = [ - TropicalCyclone(name, lat, lon, wind=w, p=p, step=step) - for name, lat, lon, w, p in self._tc_step_prediction(step) - ] - + tc_predictions[step] = [TropicalCyclone(name, lat, lon, wind=w, p=p, step=step) + for name, lat, lon, w, p in self._tc_step_prediction(step)] + return tc_predictions def _tc_step_prediction(self, step): """ Single step-data """ - - tc_id = self.df.loc[self.df["step"] == step].name - lats = self.df.loc[self.df["step"] == step].lat_p - lons = self.df.loc[self.df["step"] == step].lon_p - wind = self.df.loc[self.df["step"] == step].wind - pres = self.df.loc[self.df["step"] == step].pres - + + tc_id = self.df.loc[self.df['step'] == step].name + lats = self.df.loc[self.df['step'] == step].lat_p + lons = self.df.loc[self.df['step'] == step].lon_p + wind = self.df.loc[self.df['step'] == step].wind + pres = self.df.loc[self.df['step'] == step].pres + step_lats_lons = list(zip(tc_id, lats, lons, wind, pres)) - + return step_lats_lons @@ -215,54 +226,62 @@ class TCYCL_Forecast(TRCKR_Forecast): """ Predicted TC's from TCYCL tool """ - - required_fields = ["name", "step", "lat", "lon"] - + + required_fields = [ + "name", + "step", + "lat", + "lon" + ] + additional_fields = [ "P_min", "P_min_lat", "P_min_lon", "V10_max", "V10_max_lat", - "V10_max_lon", + "V10_max_lon" ] - - def __init__(self, reference_tc_path, min_wind_speed=None, search_steps=None): - super().__init__( - reference_tc_path, min_wind_speed=min_wind_speed, search_steps=search_steps - ) - + + def __init__(self, + reference_tc_path, + min_wind_speed=None, + search_steps=None): + + super().__init__(reference_tc_path, + min_wind_speed=min_wind_speed, + search_steps=search_steps) + def _filter_out_low_wind_tc(self, min_wind_speed): - self.df = self.df.loc[self.df["V10_max"] >= min_wind_speed] + self.df = self.df.loc[self.df['V10_max'] >= min_wind_speed] def _parse(self): # Collect TC tracker prediction data tc_predictions = {} for step in self.search_steps: - tc_predictions[step] = [ - TropicalCyclone(name, lat, lon, wind=w, p=p, step=step) - for name, lat, lon, w, p in self._tc_step_prediction(step) - ] - + tc_predictions[step] = [TropicalCyclone(name, lat, lon, wind=w, p=p, step=step) + for name, lat, lon, w, p in self._tc_step_prediction(step)] + return tc_predictions def _tc_step_prediction(self, step): """ Single step-data """ - - tc_id = self.df.loc[self.df["step"] == step].name - lats = self.df.loc[self.df["step"] == step].lat - lons = self.df.loc[self.df["step"] == step].lon - wind = self.df.loc[self.df["step"] == step].V10_max - pres = self.df.loc[self.df["step"] == step].P_min - + + tc_id = self.df.loc[self.df['step'] == step].name + lats = self.df.loc[self.df['step'] == step].lat + lons = self.df.loc[self.df['step'] == step].lon + wind = self.df.loc[self.df['step'] == step].V10_max + pres = self.df.loc[self.df['step'] == step].P_min + step_lats_lons = list(zip(tc_id, lats, lons, wind, pres)) - + return step_lats_lons class IBTKS_Data(TC_Observation): + required_fields = [ "ISO_TIME", "SID", @@ -276,10 +295,13 @@ class IBTKS_Data(TC_Observation): "wind", "pres", ] - + additional_fields = [] - def __init__(self, reference_tc_path, min_wind_speed=None): + def __init__(self, + reference_tc_path, + min_wind_speed=None): + self.df = pd.read_csv(reference_tc_path) if min_wind_speed is not None: @@ -287,34 +309,33 @@ def __init__(self, reference_tc_path, min_wind_speed=None): # Check data self._check_csv_data() - + super().__init__() def _filter_out_low_wind_tc(self, min_wind_speed): - self.df = self.df.loc[self.df["wind"] >= min_wind_speed] + self.df = self.df.loc[self.df['wind'] >= min_wind_speed] def _check_csv_data(self): """ Check that required fields are in CSV """ - + for req in self.required_fields: assert req in self.df, f"Error, field {req} not found in CSV!" def _parse(self): + # Collect TC tracker prediction data - tc_data = [ - TropicalCyclone(name, lat, lon, wind=w, p=p) - for name, lat, lon, w, p in self._tc_step_prediction() - ] - + tc_data = [TropicalCyclone(name, lat, lon, wind=w, p=p) + for name, lat, lon, w, p in self._tc_step_prediction()] + return tc_data def _tc_step_prediction(self): """ Single step-data """ - + # here we take ALL the values in the df (step not usable as # ibtracks are historical data and not FC). Also, it is assumed # that ibtracks summary contains ONLY the data we want to compare @@ -323,9 +344,9 @@ def _tc_step_prediction(self): lons = self.df.LON wind = self.df.wind pres = self.df.pres - + step_lats_lons = list(zip(tc_id, lats, lons, wind, pres)) - + return step_lats_lons @@ -333,16 +354,16 @@ class Scorer: """ Gives a score to TC prediction(s) """ - + def __init__(self, *args, **kwargs): self._score = None - + def run(self): raise NotImplementedError - + def score(self): return self._score - + def summary(self): raise NotImplementedError @@ -352,7 +373,7 @@ class ConfusionMatrix(Scorer): Calculates confusion matrix from reference and TCYCL data by approximating a match between real and predicted TC """ - + # ====== Confusion matrix ======== # # ___________________ # # _________| P_pred | N_pred | # @@ -361,228 +382,227 @@ class ConfusionMatrix(Scorer): # ---------------------------- # # # # ================================ # - - def __init__(self, ref_data, tcycl_data, threshold, compare_at_steps=None): + + def __init__(self, + ref_data, + tcycl_data, + threshold, + compare_at_steps=None): + self.ref_data = ref_data self.tcycl_data = tcycl_data self.threshold = threshold - + if compare_at_steps is None: self.compare_at_steps = self.tcycl_data.steps else: self.compare_at_steps = compare_at_steps - + super().__init__() - + def summary(self): """ Print a summary """ - + sums = {k: len(v) for k, v in self._score.items()} - avgs = {k: len(v) / len(self.compare_at_steps) for k, v in self._score.items()} + avgs = {k: len(v)/len(self.compare_at_steps) for k, v in self._score.items()} - print("\n") - print("#################################") - print("##### Summary #####") - print("#################################") - print("\n") + print(f"\n") + print(f"#################################") + print(f"##### Summary #####") + print(f"#################################") + print(f"\n") self._print_score() - print("") - print(" ================ SUM ================") + print(f"") + print(f" ================ SUM ================") if sums: self._print_matrix(sums) else: print("No predictions found.") - print(" ================ AVG ================") + print(f" ================ AVG ================") if avgs: self._print_matrix(avgs) else: print("No predictions found.") - print("") + print(f"") @staticmethod def _print_matrix(vals): """ Print a confusion matrix """ - + tp = f"{vals['true-positives']:^12.2f}" fp = f"{vals['false-positives']:^12.2f}" fn = f"{vals['false-negatives']:^12.2f}" - na = " N/A " - - print("") - print(" --------------------------- ") - print(" | P_pred | N_pred | ") - print(" -----------------------------------| ") + na = f" N/A " + + print(f"") + print(f" --------------------------- ") + print(f" | P_pred | N_pred | ") + print(f" -----------------------------------| ") print(f" | P_real |{tp}|{fn}| ") - print(" |----------------------------------| ") + print(f" |----------------------------------| ") print(f" | N_real |{fp}|{na}| ") - print(" ------------------------------------ ") - print("") - + print(f" ------------------------------------ ") + print(f"") + def _print_score(self): + if self._score is None: - print("Score cannot be printed. Invoke Run first.") + print(f"Score cannot be printed. Invoke Run first.") raise ValueError - + # print the score for k, v in self._score.items(): print(f"{k} [{len(v)}]:") - print(*[str(t) for t in v], sep="\n") - + print(*[str(t) for t in v], sep='\n') + def run(self): - print("\n") - print("#################################") - print("##### Starting evaluation.. #####") - print("#################################") - print("\n") - + + print(f"\n") + print(f"#################################") + print(f"##### Starting evaluation.. #####") + print(f"#################################") + print(f"\n") + # Calculate confusion matrix for all the steps self._score = {} for step in self.compare_at_steps: + s_trckr = self.ref_data[step] s_tcycl = self.tcycl_data[step] print(f"#### Step {step}:") - print( - f"--> TRACK-cyclones ({len(s_trckr)}):", - *[str(t) for t in s_trckr], - sep="\n", - ) - print( - f"--> TCYCL-cyclones ({len(s_tcycl)}):", - *[str(t) for t in s_tcycl], - sep="\n", - ) - + print(f"--> TRACK-cyclones ({len(s_trckr)}):", *[str(t) for t in s_trckr], sep='\n') + print(f"--> TCYCL-cyclones ({len(s_tcycl)}):", *[str(t) for t in s_tcycl], sep='\n') + step_scores = self._run_step(s_trckr, s_tcycl, self.threshold) - + # Extend tp, fp, fn for k, v in step_scores.items(): self._score.setdefault(k, []).extend(v) @staticmethod def _run_step(ref_step_data, tcycl_data_step, threshold): + matched = [] if len(ref_step_data): - print("\n# Matching TC's..") - + print(f"\n# Matching TC's..") + for trckr_tc in ref_step_data: + print(f"Processing TRACKR cyclone:\n{trckr_tc}") - + min_dist = 1e10 closest_tcycl = None for tcycl_tc in tcycl_data_step: dist = trckr_tc.distance_from(tcycl_tc) - + print(f"TCYCL cyclone: [{tcycl_tc}] is {dist:.2f} Km away.") if dist < min_dist: min_dist = dist closest_tcycl = tcycl_tc - + if min_dist < threshold and closest_tcycl not in [p[1] for p in matched]: matched.append((trckr_tc, closest_tcycl)) if len(matched): print(f"\n# {len(matched)} TC's matched") - + for tcr, tcp in matched: print("--------------") print(f"REAL: {tcr}") print(f"PRED: {tcp}") print("--------------") - + true_positives = [p[0] for p in matched] false_negatives = [tc for tc in ref_step_data if tc not in true_positives] - + tcycl_matched = [p[1] for p in matched] false_positives = [tc for tc in tcycl_data_step if tc not in tcycl_matched] - + # tp, fp, fn scores = { "true-positives": true_positives, "false-positives": false_positives, "false-negatives": false_negatives, } - + return scores - - + + class TCPlotter(Scorer): """ Compares and plots a TCYCL vs TRCKR predictions """ - def __init__( - self, trckr_pred, tcycl_pred, plot_steps_str, output_dir, ibtracks=None - ): + def __init__(self, + trckr_pred, + tcycl_pred, + plot_steps_str, + output_dir, + ibtracks=None): + self.trckr_prediction = trckr_pred self.tcycl_prediction = tcycl_pred self.plot_steps = [int(s) for s in plot_steps_str.split(",")] self.output_dir = output_dir self.ibtracks = ibtracks - + super().__init__() def run(self): """Run the actual plotting""" import matplotlib - - matplotlib.use("Agg") + matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.colors as plt_cols - + this_dir = os.path.dirname(os.path.realpath(__file__)) - + marker_size = 100 - trckr_cmap = plt.cm.get_cmap("plasma") + trckr_cmap = plt.cm.get_cmap('plasma') p_min, p_max = 900, 1000 - + # create output dir if not os.path.exists(self.output_dir): os.makedirs(self.output_dir) - + # make plots for each step for step in self.plot_steps: + plt.figure(step, figsize=(12, 6)) title_str = f"TC-Tracker and TCYCL data (step {step})" if self.ibtracks: title_str += " + IBtracks" plt.title(title_str) - trckr_style = { - "c": [tc.params["p"] for tc in self.trckr_prediction[step]], - "cmap": trckr_cmap, - "s": int(marker_size * 2), - "marker": "o", - "vmin": p_min, - "vmax": p_max, - } - - tcycl_style = {"c": "k", "s": marker_size, "marker": "x"} - - ibtks_style = { - "c": "k", - "s": marker_size, - "marker": "+", - "facecolors": "none", - } + trckr_style = {"c": [tc.params["p"] for tc in self.trckr_prediction[step]], + "cmap": trckr_cmap, + "s": int(marker_size*2), + "marker": "o", + "vmin": p_min, + "vmax": p_max} + + tcycl_style = {"c": "k", + "s": marker_size, + "marker": "x"} + + ibtks_style = {"c": "k", + "s": marker_size, + "marker": "+", + "facecolors": "none" + } # background map - bk_cmap = plt_cols.ListedColormap( - [[0.3, 0.4, 0.2, 0.8], [0.7, 0.7, 0.9, 0.9]] - ) - plt.imshow( - np.load(os.path.join(this_dir, "map.npy")), - extent=[0, 360, -90, 90], - cmap=bk_cmap, - ) - + bk_cmap = plt_cols.ListedColormap([[0.3, 0.4, 0.2, 0.8], [0.7, 0.7, 0.9, 0.9]]) + plt.imshow(np.load(os.path.join(this_dir, "map.npy")), extent=[0, 360, -90, 90], cmap=bk_cmap) + plt.xlim([0, 360]) plt.ylim([-90, 90]) plt.grid() @@ -590,90 +610,67 @@ def run(self): # plot TC's trckr_lats = [coords.lat for coords in self.trckr_prediction[step]] trckr_lons = [coords.lon for coords in self.trckr_prediction[step]] - + tcycl_lats = [coords.lat for coords in self.tcycl_prediction[step]] - tcycl_lons = [ - coords.lon if coords.lon >= 0 else coords.lon + 360 - for coords in self.tcycl_prediction[step] - ] - - im_trckr = plt.scatter( - trckr_lons, trckr_lats, label="TC-tracker", **trckr_style - ) - _ = plt.scatter(tcycl_lons, tcycl_lats, label="TCYCL", **tcycl_style) + tcycl_lons = [coords.lon if coords.lon >= 0 else coords.lon+360 + for coords in self.tcycl_prediction[step]] + im_trckr = plt.scatter(trckr_lons, trckr_lats, label="TC-tracker", **trckr_style) + _ = plt.scatter(tcycl_lons, tcycl_lats, label="TCYCL", **tcycl_style) + if self.ibtracks: ibtks_lats = [coords.lat for coords in self.ibtracks[step]] - ibtks_lons = [ - coords.lon if coords.lon >= 0 else coords.lon + 360 - for coords in self.ibtracks[step] - ] - _ = plt.scatter( - ibtks_lons, ibtks_lats, label="IB-Tracks", **ibtks_style - ) - + ibtks_lons = [coords.lon if coords.lon >= 0 else coords.lon+360 + for coords in self.ibtracks[step]] + _ = plt.scatter(ibtks_lons, ibtks_lats, label="IB-Tracks", **ibtks_style) + cbar = plt.colorbar(im_trckr, shrink=0.75) cbar.set_ticks(np.linspace(p_min, p_max, 6)) cbar.set_ticklabels(np.linspace(p_min, p_max, 6)) cbar.set_label("$P_{min}$") - + # axes - plt.gca().set_aspect("equal") + plt.gca().set_aspect('equal') plt.xticks(list(range(0, 361, 40))) plt.xlabel("Lon") plt.yticks(list(range(-90, 91, 20))) plt.ylabel("Lat") - + plt.legend() - + save_path = os.path.join(self.output_dir, f"plot_step_{step:03}.png") - + print(f"Saving plot in {save_path}") plt.savefig(save_path) plt.close() - + def score(self): return None def summary(self): pass + - -def main(): +def main(): parser = argparse.ArgumentParser() - parser.add_argument("trckr_summary_path", help="Path to CSV with Tracker summary") - parser.add_argument("tcycl_summary_path", help="Path to CSV with Tcycl summary") - - parser.add_argument( - "--dist_threshold", help="TC distance threshold [Km]", type=int, default=300 - ) - - parser.add_argument( - "--trckr_w_min", help="TC-Tracker TC's with wind speed >= threshold", type=float - ) - parser.add_argument( - "--tcycl_w_min", help="TC-Tracker TC's with wind speed >= threshold", type=float - ) - - parser.add_argument( - "--plot_steps", - help="Make plots for steps (comma-separated list - e.g. '6,12,18')", - ) - parser.add_argument( - "--output_dir", help="Directory where plots are saved", default="/var/tmp/plots" - ) - - parser.add_argument("--ibtracks_summary_path", help="Path to IBTracks CSV summary") - + parser.add_argument("trckr_summary_path", help=f"Path to CSV with Tracker summary") + parser.add_argument("tcycl_summary_path", help=f"Path to CSV with Tcycl summary") + + parser.add_argument("--dist_threshold", help=f"TC distance threshold [Km]", type=int, default=300) + + parser.add_argument("--trckr_w_min", help=f"TC-Tracker TC's with wind speed >= threshold", type=float) + parser.add_argument("--tcycl_w_min", help=f"TC-Tracker TC's with wind speed >= threshold", type=float) + + parser.add_argument("--plot_steps", help=f"Make plots for steps (comma-separated list - e.g. '6,12,18')") + parser.add_argument("--output_dir", help=f"Directory where plots are saved", default="/var/tmp/plots") + + parser.add_argument("--ibtracks_summary_path", help=f"Path to IBTracks CSV summary") + args = parser.parse_args() - + # # TC tracker and TCYCL data - trckr_prediction = TRCKR_Forecast( - args.trckr_summary_path, min_wind_speed=args.trckr_w_min - ) - tcycl_prediction = TCYCL_Forecast( - args.tcycl_summary_path, min_wind_speed=args.tcycl_w_min - ) + trckr_prediction = TRCKR_Forecast(args.trckr_summary_path, min_wind_speed=args.trckr_w_min) + tcycl_prediction = TCYCL_Forecast(args.tcycl_summary_path, min_wind_speed=args.tcycl_w_min) # print confusion matrix (TC tracker and TCYCL data) scorer = ConfusionMatrix(trckr_prediction, tcycl_prediction, args.dist_threshold) @@ -683,33 +680,28 @@ def main(): # Compare TCYCL VS IBTRACKS if requested ibtks_data = None if args.ibtracks_summary_path: - ibtks_data = IBTKS_Data( - args.ibtracks_summary_path, min_wind_speed=args.tcycl_w_min - ) + + ibtks_data = IBTKS_Data(args.ibtracks_summary_path, min_wind_speed=args.tcycl_w_min) # compare at first step only compare_step = tcycl_prediction.steps[0] - scorer = ConfusionMatrix( - ibtks_data, - tcycl_prediction, - args.dist_threshold, - compare_at_steps=[compare_step], - ) + scorer = ConfusionMatrix(ibtks_data, + tcycl_prediction, + args.dist_threshold, + compare_at_steps=[compare_step]) scorer.run() scorer.summary() # make plots if args.plot_steps: - plotter = TCPlotter( - trckr_prediction, - tcycl_prediction, - args.plot_steps, - args.output_dir, - ibtracks=ibtks_data, - ) + plotter = TCPlotter(trckr_prediction, + tcycl_prediction, + args.plot_steps, + args.output_dir, + ibtracks=ibtks_data) plotter.run() plotter.summary() if __name__ == "__main__": - sys.exit(main()) + sys.exit(main()) \ No newline at end of file diff --git a/pproc/src/pproc/tcycl/tcycl_run.py b/pproc/src/pproc/tcycl/tcycl_run.py index 2efa4587..f99482a8 100644 --- a/pproc/src/pproc/tcycl/tcycl_run.py +++ b/pproc/src/pproc/tcycl/tcycl_run.py @@ -7,6 +7,7 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. +import os import sys import json import copy @@ -26,7 +27,7 @@ class Utils: """ A collection of generic TC utils """ - + @staticmethod def ifs_steps(max_step): """ @@ -34,53 +35,51 @@ def ifs_steps(max_step): :param max_step: :return: """ - - return ( - list(range(1, min(90, max_step + 1), 1)) - + list(range(90, min(144, max_step + 1), 3)) - + list(range(144, min(246, max_step + 1), 6)) - ) - + + return list(range(1, min(90, max_step + 1), 1)) + \ + list(range(90, min(144, max_step + 1), 3)) + \ + list(range(144, min(246, max_step + 1), 6)) + @staticmethod def pxl_2_lat_lon(pixel_indexes, fields_metadata): """ From pixel indexes (+ fields info) to lat/lon coordinates """ - + coords = [] field_shape = fields_metadata["field_shape"] lat_min, lat_max = fields_metadata["latitude_range"] lon_min, lon_max = fields_metadata["longitude_range"] - + for tc in pixel_indexes: lat = lat_max - tc[0] / field_shape[0] * (lat_max - lat_min) lon = lon_min + tc[1] / field_shape[1] * (lon_max - lon_min) lon = lon - lon // 180 * 360 coords.append((lat, lon)) - + return coords - + @staticmethod def lat_lon_2_pxl(lat_lon, fields_metadata): """ Function that maps lat/lon to pixel indexes (according to size and area range) """ - + shape_y, shape_x = fields_metadata["field_shape"] lat_min, lat_max = fields_metadata["latitude_range"] lon_min, lon_max = fields_metadata["longitude_range"] - + pxl_idxs = [] for lat, lon in lat_lon: pxl_x = int((lon - lon_min) / (lon_max - lon_min) * shape_x) pxl_x = min(max(0, pxl_x), shape_x - 1) - + pxl_y = int((lat_max - lat) / (lat_max - lat_min) * shape_y) pxl_y = min(max(0, pxl_y), shape_y - 1) - + pxl_idxs.append((pxl_y, pxl_x)) - + return pxl_idxs @@ -88,55 +87,56 @@ class JSONConfigurable: """ A class configurable by JSON """ - + # default config _default_config = {} _required_config_params = [] - + def __init__(self, *args, **kwargs): + # class own copy of config params self._config = copy.deepcopy(self._default_config) self._config.update(kwargs.get("config")) - + # check required params self.check_required_params() - + # Attribute first-level key/values for k, v in self._config.items(): setattr(self, k, v) - + @classmethod def from_json(cls, json_file): + if json_file is None: return cls({}) - + try: with open(json_file, "r") as f: json_data = json.load(f) except FileNotFoundError: print(f"Json file {json_file} not found!") raise FileNotFoundError - + return cls(json_data) - + def check_required_params(self): """ Check for needed parameters """ - + for p in self._required_config_params: - assert p in self._config.keys(), ( - f"Parameter {p} needed by {self.__class__}, " + assert p in self._config.keys(), \ + f"Parameter {p} needed by {self.__class__}, " \ f"but NOT found in configuration!" - ) - + def save(self, file_path): """ Save the configuration """ with open(file_path, "w") as f: json.dump(self._config, f, indent=2, sort_keys=True) - + def summary(self): """ Print a summary @@ -148,59 +148,62 @@ class TCYCLConfig(JSONConfigurable): """ Tcycl default configuration """ - + _required_config_params = [ "data_fetching", "annotations", "pre_processing", "inference", - "cyclone_localizer", + "cyclone_localizer" ] - + _default_config = { - "data_fetching": { - "retriever": "fdb", - "variables": ["tcw", "100u", "100v", "sp", "sst", "lat", "lon"], - "grid_resolution": [0.25, 0.25], - "n_prev_steps": 3, - }, - "annotations": { - "retriever": "fdb", - "variables": ["10u", "10v", "sp"], - "grid_resolution": [0.25, 0.25], - "n_prev_steps": 1, - "search_radius": 10, - }, - "pre_processing": { - "lon_crop_pxl": 40, - "lat_crop_pxl": 16, - "norm_factor": { - "tcw": 55, - "100u": 25, - "100v": 25, - "sp": 100000, - "sst": 300, - "lat": 90, - "lon": 180, - }, - "shift_factor": { - "tcw": 55, - "100u": 0, - "100v": 0, - "sp": 100000, - "sst": 150, - "lat": 0, - "lon": 0, - }, - }, - "inference": { - "model_path": "model.tflite", - "model_type": "tflite", - "model_output_shape": [1, 640, 1408, 1], + "data_fetching": { + "retriever": "fdb", + "variables": ["tcw", "100u", "100v", "sp", "sst", "lat", "lon"], + "grid_resolution": [0.25, 0.25], + "n_prev_steps": 3 + }, + "annotations": { + "retriever": "fdb", + "variables": ["10u", "10v", "sp"], + "grid_resolution": [0.25, 0.25], + "n_prev_steps": 1, + "search_radius": 10 + }, + "pre_processing": { + "lon_crop_pxl": 40, + "lat_crop_pxl": 16, + "norm_factor": { + "tcw": 55, + "100u": 25, + "100v": 25, + "sp": 100000, + "sst": 300, + "lat": 90, + "lon": 180 }, - "cyclone_localizer": {"label_threshold": 0.6, "label_radius": 25}, + "shift_factor": { + "tcw": 55, + "100u": 0, + "100v": 0, + "sp": 100000, + "sst": 150, + "lat": 0, + "lon": 0 + } + }, + "inference": { + "model_path": "model.tflite", + "model_type": "tflite", + "model_output_shape": [1, 640, 1408, 1] + }, + "cyclone_localizer": { + "label_threshold": 0.6, + "label_radius": 25 + } } - + def __init__(self, config): super().__init__(config=config) @@ -209,7 +212,7 @@ class FieldData: """ Single-field Data """ - + required_keys = [ "name", "date", @@ -218,24 +221,25 @@ class FieldData: "values", "resolution", ] - + def __init__(self, **kwargs): + self._dict = kwargs - + for k in self.required_keys: try: setattr(self, k, kwargs[k]) except KeyError: print(f"Key {k} is required but not found in {kwargs}!") raise KeyError - + @classmethod def from_dict(cls, dict_entry): """ From a dictionary """ return FieldData(**dict_entry) - + def to_dict(self): return self._dict @@ -244,7 +248,7 @@ class FieldsData: """ A list of FieldData with equal shape and resolution """ - + # All fields MUST comply with the metadata metadata_fields = [ "resolution", @@ -252,71 +256,69 @@ class FieldsData: "latitude_range", "longitude_range", ] - + def __init__(self, fields, metadata): self.fields = fields self.metadata = metadata self._check_metadata() - + def _check_metadata(self): """ Check for required metadata """ for p in self.metadata_fields: assert p in self.metadata, f"Parameter {p} missing from metadata!" - + def _check_data(self): """ Check data against corresponding metadata """ - + for field in self.fields: assert field.values.shape == self.metadata["field_shape"] assert field.resolution == self.metadata["resolution"] - + def to_numpy(self): """ Returns the concatenated fields as numpy """ - + n = np.zeros((*self.metadata["field_shape"], len(self.fields))) for ff, field_data in enumerate(self.fields): n[:, :, ff] = field_data.values - + return n - + def update_metadata(self): """ Attempt to update metadata after operating on values """ - + # update field shape self.metadata["field_shape"] = self.fields[0].values.shape - + # update lat/lon range (if known) for f in self.fields: if f.name == "lat": self.metadata["latitude_range"] = np.min(f.values), np.max(f.values) if f.name == "lon": self.metadata["longitude_range"] = np.min(f.values), np.max(f.values) - + # check again all fields for consistency self._check_data() - + def get_fields(self, **kwargs): """ Get fields with matching params """ for k in kwargs.keys(): - assert ( - k in FieldData.required_keys - ), f"Searching field by non-existent param {k}" - + assert k in FieldData.required_keys, f"Searching field by non-existent param {k}" + fields = [] for f in self.fields: if all([f.to_dict()[k] == v for k, v in kwargs.items()]): fields.append(f) - + return fields @@ -324,12 +326,16 @@ class DataRetriever(JSONConfigurable): """ Retrieve data """ - - _required_config_params = ["variables", "grid_resolution", "n_prev_steps"] - + + _required_config_params = [ + "variables", + "grid_resolution", + "n_prev_steps" + ] + def __init__(self, config): super().__init__(config=config) - + def get_data(self, request): """ Get data @@ -341,7 +347,7 @@ class FDBDataRetriever(DataRetriever): """ Retrieve data from an FDB """ - + # parameter name-id map p_map = { "tcw": "136", @@ -350,9 +356,9 @@ class FDBDataRetriever(DataRetriever): "100u": "228246", "100v": "228247", "sp": "134", - "sst": "34", + "sst": "34" } - + # request template _req_template_base = { "date": None, @@ -363,77 +369,96 @@ class FDBDataRetriever(DataRetriever): "step": None, "stream": None, "type": None, - "domain": "g", + "domain": "g" } - - _req_template_hres = {"stream": "oper", "type": "fc"} - - _req_template_ens_pf = {"number": None, "stream": "enfo", "type": "pf"} - - _req_template_ens_cf = {"stream": "enfo", "type": "cf"} - + + _req_template_hres = { + "stream": "oper", + "type": "fc" + } + + _req_template_ens_pf = { + "number": None, + "stream": "enfo", + "type": "pf" + } + + _req_template_ens_cf = { + "stream": "enfo", + "type": "cf" + } + # required keys in GRIB message - required_grib_keys = ["shortName", "Ni", "Nj", "dataDate", "dataTime", "stepRange"] - + required_grib_keys = [ + "shortName", + "Ni", + "Nj", + "dataDate", + "dataTime", + "stepRange" + ] + # required keys in user request - _required_user_req_params = ["date", "time", "ens", "step"] - + _required_user_req_params = [ + "date", + "time", + "ens", + "step" + ] + def __init__(self, config): super().__init__(config) - + # add necessary config params to request template - self._req_template_base["param"] = [ - self.p_map.get(p) for p in config["variables"] if self.p_map.get(p) - ] - + self._req_template_base["param"] = [self.p_map.get(p) + for p in config["variables"] + if self.p_map.get(p)] + @classmethod def _check_user_request(cls, request): """ Check request params """ for p in cls._required_user_req_params: - assert p in request.keys(), ( - f"Parameter {p} needed by {cls}, " + assert p in request.keys(), \ + f"Parameter {p} needed by {cls}, " \ f"but NOT found in request {request}!" - ) - + def get_data_from_json_request(self, request_path): """ Get data, from json request file name """ with open(request_path, "r") as f: request = json.load(f) - + return self.get_data(request) - + def _compose_fdb_request(self, user_request): """ Compose full FDB request """ - + self._check_user_request(user_request) request = copy.deepcopy(self._req_template_base) - + assert isinstance(user_request["ens"], int), "ens field must be an int!" - assert -1 <= user_request["ens"] <= 51, ( - "Request ens must be in range [-1,50]. " " Legend (-1:HRES, 0:cf, 1,50:pf)!" - ) - + assert -1 <= user_request["ens"] <= 51, "Request ens must be in range [-1,50]. " \ + " Legend (-1:HRES, 0:cf, 1,50:pf)!" + # date and time request["date"] = user_request["date"] request["time"] = user_request["time"] - + # fill-in required steps - assert int(user_request["step"]) >= 3, ( - f"Min step is 3." f"Requested step {user_request['step']}!" - ) - + assert int(user_request["step"]) >= 3, f"Min step is 3." \ + f"Requested step {user_request['step']}!" + steps = Utils.ifs_steps(int(user_request["step"])) - + # We might need to request few other steps before the selected steps # this is what the "self.n_prev_steps" parameter is for - request["step"] = [str(s) for s in steps[-self.n_prev_steps :]] - + request["step"] = [str(s) for s in steps[-self.n_prev_steps:]] + # -1 means HRES if user_request["ens"] == -1: request.update(self._req_template_hres) @@ -442,106 +467,107 @@ def _compose_fdb_request(self, user_request): else: request.update(self._req_template_ens_pf) request["number"] = str(user_request["ens"]) - + # No None fields must be left for k, v in request.items(): assert v is not None, f"Request field {k} is None!" - + return request - + def get_data(self, user_request): """ Get data, from json request """ - + print("Retrieving data..") - + # generate full FDB request request = self._compose_fdb_request(user_request) print(f"Executing FDB request:\n{json.dumps(request, indent=2)}") - + # Expected N messages n_messages = len(request["param"]) * len(request["step"]) _data = [] - + fdb = pyfdb.FDB() reader = fdb.retrieve(request) - + grid_res_str = "/".join([str(v) for v in self.grid_resolution]) stream = BytesIO() - + job = mir.Job(grid=str(grid_res_str)) job.execute(reader, stream) - + stream.seek(0) ecc_reader = eccodes.StreamReader(stream) - + # # ====== With no MIR (for testing only) ====== # fdb = pyfdb.FDB() # result = fdb.retrieve(request) # ecc_reader = eccodes.StreamReader(result) # # ============================================ - + metadata = {} for mm, message in enumerate(range(n_messages)): + try: message = next(ecc_reader) except StopIteration: print("ERROR: Failed to get the expected messages from FDB!") raise StopIteration - + _msg_data = self._grib_msg_to_field_data(message) _data.append(_msg_data) - + # append lat/lon at last if mm == n_messages - 1: lat_msg, lon_msg = self._grib_msg_to_latlon_data(message) _data.append(lat_msg) _data.append(lon_msg) - + metadata = { "resolution": self.grid_resolution, "field_shape": lat_msg.values.shape, "latitude_range": (np.min(lat_msg.values), np.max(lat_msg.values)), - "longitude_range": (np.min(lon_msg.values), np.max(lon_msg.values)), + "longitude_range": (np.min(lon_msg.values), np.max(lon_msg.values)) } - + # Compose FieldsData data = FieldsData(_data, metadata) - + return data - + def _grib_msg_to_field_data(self, grib_msg): """ Read data from a GRIB message and return a FieldData object """ - + value_shape = grib_msg.get("Nj"), grib_msg.get("Ni") val = grib_msg.get_array("values") field_values = np.asarray(val).reshape(value_shape) - + data_entry_dict = { "name": grib_msg.get("shortName"), "date": grib_msg.get("dataDate"), "time": grib_msg.get("dataTime"), "step": grib_msg.get("stepRange"), "values": field_values, - "resolution": self.grid_resolution, + "resolution": self.grid_resolution } - + return FieldData.from_dict(data_entry_dict) - + def _grib_msg_to_latlon_data(self, grib_msg): """ Read lat/lon from a GRIB message and return 2 FieldData objects """ - + _data = grib_msg.get_data_points() - + value_shape = grib_msg.get("Nj"), grib_msg.get("Ni") - + lat, lon = zip(*[(elem["lat"], elem["lon"]) for elem in _data]) lat_values = np.asarray(lat).reshape(value_shape) lon_values = np.asarray(lon).reshape(value_shape) @@ -553,9 +579,9 @@ def _grib_msg_to_latlon_data(self, grib_msg): "time": grib_msg.get("dataTime"), "step": grib_msg.get("stepRange"), "values": lat_values, - "resolution": self.grid_resolution, + "resolution": self.grid_resolution } - + # lon dict lon_entry_dict = { "name": "lon", @@ -563,64 +589,64 @@ def _grib_msg_to_latlon_data(self, grib_msg): "time": grib_msg.get("dataTime"), "step": grib_msg.get("stepRange"), "values": lon_values, - "resolution": self.grid_resolution, + "resolution": self.grid_resolution } - + lat_field_data = FieldData.from_dict(lat_entry_dict) lon_field_data = FieldData.from_dict(lon_entry_dict) - + return lat_field_data, lon_field_data # factory of data retrievers -data_retrievers = {"fdb": FDBDataRetriever} +data_retrievers = { + "fdb": FDBDataRetriever +} class PreProcessor(JSONConfigurable): """ Preprocess data """ - + _required_config_params = [ "lon_crop_pxl", "lat_crop_pxl", "norm_factor", - "shift_factor", + "shift_factor" ] - + def __init__(self, config): super().__init__(config=config) - + def run(self, input_data): print("Pre-processing data..") - + nj, ni = input_data.metadata["field_shape"] - + # field boundaries after cropping y0, y1 = self.lat_crop_pxl, ni - self.lat_crop_pxl x0, x1 = self.lon_crop_pxl, nj - self.lon_crop_pxl - 1 - + # Crop fields fields = [] for mm, field_data in enumerate(input_data.fields): processed_field = copy.deepcopy(field_data) processed_field.values = processed_field.values[x0:x1, y0:y1] fields.append(processed_field) - + # Update metadata for new shape and lat/lon range processed_metadata = copy.deepcopy(input_data.metadata) processed_data = FieldsData(fields, processed_metadata) processed_data.update_metadata() - + # Finally apply normalization/shift factors for mm, field_data in enumerate(processed_data.fields): param_name = field_data.name norm_factor = self.norm_factor[param_name] shift_factor = self.shift_factor[param_name] - processed_data.fields[mm].values = ( - field_data.values - shift_factor - ) / norm_factor - + processed_data.fields[mm].values = (field_data.values - shift_factor) / norm_factor + return processed_data @@ -628,31 +654,35 @@ class Inference(JSONConfigurable): """ Handle the execution of ML inference """ - - _required_config_params = ["model_path", "model_type", "model_output_shape"] - + + _required_config_params = [ + "model_path", + "model_type", + "model_output_shape" + ] + def __init__(self, config): super().__init__(config=config) - + def run(self, input_data, save_to=None): """ Runs Infero for inference """ - + # add the outer (batch) dimension to tensor input_tensor = input_data.to_numpy() input_tensor = input_tensor[np.newaxis, ...] - + # inference infero = pyinfero.Infero(self.model_path, self.model_type) infero.initialise() output_tensor = infero.infer(input_tensor, self.model_output_shape) infero.finalise() - + # save when required if save_to is not None: np.save(save_to, output_tensor) - + return output_tensor @@ -660,53 +690,58 @@ class CycloneLocalizer_DBSCAN(JSONConfigurable): """ Uses DBSCAN algorithm """ - - _required_config_params = ["label_threshold", "label_radius"] - + + _required_config_params = [ + "label_threshold", + "label_radius" + ] + def __init__(self, config): super().__init__(config=config) - + def find(self, prediction_data, metadata, save_to=None): """ Apply kmeans to find cyclone centers """ - + # remove 1-dimensions from prediction tensor prediction_data = np.squeeze(prediction_data) - + # points above threshold eye_mask = np.argwhere(prediction_data > self.label_threshold) if eye_mask.shape[0] <= 1: + print("not enough points to attempt clustering..") clusters_lat_lon = [] - + # save if required if save_to is not None: self._write_json(clusters_lat_lon, save_to) - + return clusters_lat_lon - + # Attempt clustering eye_weights = prediction_data[eye_mask[:, 0], eye_mask[:, 1]] dbscan = DBSCAN(self.label_radius).fit(eye_mask, sample_weight=eye_weights) - + clusters = [] for label in set(dbscan.labels_): + if label != -1: label_idxs = np.where(dbscan.labels_ == label) cluster_x = np.mean(eye_mask[label_idxs, 0]) cluster_y = np.mean(eye_mask[label_idxs, 1]) clusters.append((cluster_x, cluster_y)) - + # transform to lat/lon clusters_lat_lon = Utils.pxl_2_lat_lon(clusters, metadata) - + # save when required if save_to is not None: self._write_json(clusters_lat_lon, save_to) - + return clusters_lat_lon - + @staticmethod def _write_json(clusters, save_path): with open(save_path, "w") as f: @@ -718,87 +753,86 @@ class TCAnnotator(JSONConfigurable): Produce annotations to TCYCL predictions (e.g. P_min, UV_max within a radius, etc..) """ - + _required_config_params = [ "retriever", "variables", "grid_resolution", "n_prev_steps", - "search_radius", + "search_radius" ] - - required_vars = ["10u", "10v", "sp"] - + + required_vars = [ + "10u", + "10v", + "sp" + ] + def __init__(self, config): super().__init__(config=config) - + # Variables required for annotation for var in self.required_vars: assert var in self.variables - + def run(self, predictions, data, save_to=None): """ Find P_min and U_10 max within self.search_radius from TC's """ - + tc_annotations = [] predictions_pxl = Utils.lat_lon_2_pxl(predictions, data.metadata) - + values_sp = self._get_field(data, "sp") values_10u = self._get_field(data, "10u") values_10v = self._get_field(data, "10v") values_lat = self._get_field(data, "lat") values_lon = self._get_field(data, "lon") - + y_len, x_len = data.metadata["field_shape"] mesh_grid = np.meshgrid(np.arange(x_len), np.arange(y_len)) mesh_zipped = np.stack((mesh_grid[0], mesh_grid[1]), axis=2) - + for pred in predictions_pxl: p = np.flip(np.asarray(pred)).reshape((1, 1, 2)) # pt coords - diff = mesh_zipped - np.tile( - p, (*data.metadata["field_shape"], 1) - ) # coord diff - - d2 = np.sum(diff**2, axis=2) # square distance - mask_idxs = np.where(d2 < self.search_radius**2) # within-circle mask - + diff = mesh_zipped - np.tile(p, (*data.metadata["field_shape"], 1)) # coord diff + + d2 = np.sum(diff ** 2, axis=2) # square distance + mask_idxs = np.where(d2 < self.search_radius ** 2) # within-circle mask + lats_in_mask = values_lat[mask_idxs] lons_in_mask = values_lon[mask_idxs] u10_in_mask = values_10u[mask_idxs] v10_in_mask = values_10v[mask_idxs] - vabs_in_mask = (u10_in_mask**2 + v10_in_mask**2) ** 0.5 + vabs_in_mask = (u10_in_mask ** 2 + v10_in_mask ** 2) ** 0.5 sp_in_mask = values_sp[mask_idxs] - + # P_min p_min_idx = np.argmin(sp_in_mask) p_min = sp_in_mask[p_min_idx] p_min_lat = lats_in_mask[p_min_idx] p_min_lon = lons_in_mask[p_min_idx] print(f"p_min {p_min:.2f} (in lat:{p_min_lat:.2f}, lon:{p_min_lon:.2f})") - + # U10_max vabs_max_idx = np.argmax(vabs_in_mask) vabs_max = vabs_in_mask[vabs_max_idx] vabs_max_lat = lats_in_mask[vabs_max_idx] vabs_max_lon = lons_in_mask[vabs_max_idx] - print( - f"v_max {vabs_max:.2f} (in lat:{vabs_max_lat:.2f}, lon:{vabs_max_lon:.2f})" - ) - - tc_annotations.append( - [p_min, p_min_lat, p_min_lon, vabs_max, vabs_max_lat, vabs_max_lon] - ) - + print(f"v_max {vabs_max:.2f} (in lat:{vabs_max_lat:.2f}, lon:{vabs_max_lon:.2f})") + + tc_annotations.append([p_min, p_min_lat, p_min_lon, vabs_max, vabs_max_lat, vabs_max_lon]) + # save when required if save_to is not None: with open(save_to, "w") as f: json.dump(tc_annotations, f, indent=2, sort_keys=True) - + return tc_annotations - + @staticmethod def _get_field(data, name): + fields = data.get_fields(name=name) assert len(fields) == 1, "only 1 field expected!" return np.asarray(fields[0].values) @@ -806,50 +840,44 @@ def _get_field(data, name): def main(): parser = argparse.ArgumentParser() - parser.add_argument("json_request", help="Path to JSON data request") - - parser.add_argument("--config", help="JSON of tcycl user-configuration") - parser.add_argument("--save_ml_output", help="Path to numpy ML prediction file") - parser.add_argument("--save_prediction", help="Path to JSON prediction file") - parser.add_argument("--annotate_prediction", help="Path to JSON annotation file") - + parser.add_argument("json_request", help=f"Path to JSON data request") + + parser.add_argument("--config", help=f"JSON of tcycl user-configuration") + parser.add_argument("--save_ml_output", help=f"Path to numpy ML prediction file") + parser.add_argument("--save_prediction", help=f"Path to JSON prediction file") + parser.add_argument("--annotate_prediction", help=f"Path to JSON annotation file") + args = parser.parse_args() - + # Tcycl configuration config = TCYCLConfig.from_json(args.config) config.summary() - + # Get input data retriever_type = data_retrievers[config.data_fetching["retriever"]] retriever = retriever_type(config.data_fetching) retrieved_data = retriever.get_data_from_json_request(args.json_request) - + # Pre-process input data pre_processor = PreProcessor(config.pre_processing) pre_proc_data = pre_processor.run(retrieved_data) - + # Run Inference inference_runner = Inference(config.inference) output_data = inference_runner.run(pre_proc_data, save_to=args.save_ml_output) - + # Run Clustering localizer = CycloneLocalizer_DBSCAN(config.cyclone_localizer) - prediction = localizer.find( - output_data, pre_proc_data.metadata, save_to=args.save_prediction - ) - + prediction = localizer.find(output_data, pre_proc_data.metadata, save_to=args.save_prediction) + # Annotate prediction if args.annotate_prediction: - annotation_data_retriever = data_retrievers[config.data_fetching["retriever"]]( - config.annotations - ) - annotation_data = annotation_data_retriever.get_data_from_json_request( - args.json_request - ) + annotation_data_retriever = data_retrievers[config.data_fetching["retriever"]](config.annotations) + annotation_data = annotation_data_retriever.get_data_from_json_request(args.json_request) annotator = TCAnnotator(config.annotations) - annotator.run(prediction, annotation_data, save_to=args.annotate_prediction) - - print("All done.") + annotations = annotator.run(prediction, annotation_data, save_to=args.annotate_prediction) + + print(f"All done.") if __name__ == "__main__": diff --git a/pproc/src/pproc/tcycl/tcycl_summarise_ibtks.py b/pproc/src/pproc/tcycl/tcycl_summarise_ibtks.py index b1aaa74c..82cc3bce 100644 --- a/pproc/src/pproc/tcycl/tcycl_summarise_ibtks.py +++ b/pproc/src/pproc/tcycl/tcycl_summarise_ibtks.py @@ -26,7 +26,7 @@ class IBtracksSummary: ibtracks_file = "ibtracs.last3years.list.v04r00.csv" ibtracks_url = os.path.join(noaa_url, ibtracks_sub_url, ibtracks_file) - + winds = [ "WMO_WIND", "USA_WIND", @@ -41,7 +41,7 @@ class IBtracksSummary: "NEUMANN_WIND", "MLC_WIND", ] - + pres = [ "WMO_PRES", "USA_PRES", @@ -72,9 +72,9 @@ class IBtracksSummary: "LAT", "LON", "wind", - "pres", + "pres" ] - + def __init__(self, df): self.df = df @@ -92,7 +92,7 @@ def download(cls, download_path): def from_file(cls, file_name): df = cls.readIBTracs(file_name) return cls(df) - + @classmethod def readIBTracs(cls, file): """ @@ -113,9 +113,9 @@ def readIBTracs(cls, file): # sort fields by time df.sort_values(by=["ISO_TIME"]) - + return df - + @classmethod def has_numbers(cls, input_string): return any(char.isdigit() for char in input_string) @@ -136,7 +136,7 @@ def bestWind(cls, row): break return pd.Series(dict(wind=result)) - + @classmethod def bestPres(cls, row): """ @@ -153,7 +153,7 @@ def bestPres(cls, row): break return pd.Series(dict(pres=result)) - + def save(self, csv_filename, only_time=None): """ Saves to CSV @@ -161,27 +161,18 @@ def save(self, csv_filename, only_time=None): if only_time: time_ = pd.to_datetime(only_time) - self.df.loc[pd.to_datetime(self.df["ISO_TIME"]) == time_].to_csv( - csv_filename, index=None, header=True - ) + self.df.loc[pd.to_datetime(self.df['ISO_TIME']) == time_].to_csv(csv_filename, index=None, header=True) else: self.df.to_csv(csv_filename, index=None, header=True) - -def main(): + +def main(): parser = argparse.ArgumentParser() - parser.add_argument( - "--ibtracks_file", help="Path to downloaded CSV file", default="ibtracks.csv" - ) - parser.add_argument( - "--output", help="Path to summary CSV file", default="ibtracks-summary.csv" - ) - parser.add_argument( - "--only_time", - help="Data only at date/time (format 'YYYYMMDD TT', e.g. '20211004 00')", - ) + parser.add_argument("--ibtracks_file", help=f"Path to downloaded CSV file", default="ibtracks.csv") + parser.add_argument("--output", help=f"Path to summary CSV file", default="ibtracks-summary.csv") + parser.add_argument("--only_time", help=f"Data only at date/time (format 'YYYYMMDD TT', e.g. '20211004 00')") args = parser.parse_args() - + # Make summary file IBtracksSummary.download(args.ibtracks_file) IBtracksSummary.from_file(args.ibtracks_file).save(args.output, args.only_time) diff --git a/pproc/src/pproc/tcycl/tcycl_summarise_tcycl.py b/pproc/src/pproc/tcycl/tcycl_summarise_tcycl.py index cc9c19a6..43caea71 100644 --- a/pproc/src/pproc/tcycl/tcycl_summarise_tcycl.py +++ b/pproc/src/pproc/tcycl/tcycl_summarise_tcycl.py @@ -18,14 +18,14 @@ class SummaryWriter: Combine TCycl predictions and annotations in a human-readable Summary format (e.g. CSV file) """ - + fields_base = [ "name", "step", "lat", "lon", ] - + fields_annot = [ "P_min", "P_min_lat", @@ -34,7 +34,7 @@ class SummaryWriter: "V10_max_lat", "V10_max_lon", ] - + def __init__(self, prediction_files, annotation_files=None): """ Writes a easily readable CSV summary with Tcycl prediction data @@ -45,26 +45,23 @@ def __init__(self, prediction_files, annotation_files=None): # prediction data self.prediction_titles = self.fields_base - predictions_files_dict = { - int(pred_name.split(".")[1].split("step")[1]): pred_name - for pred_name in prediction_files.split(";") - } + predictions_files_dict = {int(pred_name.split(".")[1].split("step")[1]): pred_name + for pred_name in prediction_files.split(";")} # annotation data (if available) annotations_files_dict = {} if annotation_files is not None: self.prediction_titles += self.fields_annot - annotations_files_dict = { - int(anno_name.split(".")[1].split("step")[1]): anno_name - for anno_name in annotation_files.split(";") - } + annotations_files_dict = {int(anno_name.split(".")[1].split("step")[1]): anno_name + for anno_name in annotation_files.split(";")} # compose overall data structure self.prediction_data = {} for step, pred_name in predictions_files_dict.items(): + with open(pred_name, "r") as f: prediction_content = json.load(f) - + if annotation_files is not None: with open(annotations_files_dict[step], "r") as f: annotation_content = json.load(f) @@ -76,7 +73,7 @@ def __init__(self, prediction_files, annotation_files=None): if annotation_files is not None: tc_content.extend(annotation_content[tc_idx]) step_content.append(tc_content) - + # step: [name, step, lat, lon] self.prediction_data.update({step: step_content}) @@ -84,36 +81,26 @@ def write(self, output=None): """ Write summary output """ - + print(f"Writing output CSV file {output}") - - with open(output, "w") as f: + + with open(output, 'w') as f: _writer = csv.writer(f) _writer.writerow(self.prediction_titles) for step, pred in self.prediction_data.items(): for tc in pred: _writer.writerow(tc) - + def main(): parser = argparse.ArgumentParser() - parser.add_argument( - "prediction_files", - help=";-separated list of prediction files (as prediction.step.json)", - ) - parser.add_argument( - "--annotation_files", - help=";-separated list of annotation files (as annotation.step.json)", - ) - parser.add_argument( - "--output", help="Path to output CSV file", default="output.csv" - ) + parser.add_argument("prediction_files", help=f";-separated list of prediction files (as prediction.step.json)") + parser.add_argument("--annotation_files", help=f";-separated list of annotation files (as annotation.step.json)") + parser.add_argument("--output", help=f"Path to output CSV file", default="output.csv") args = parser.parse_args() - + # Make summary file - writer = SummaryWriter( - args.prediction_files, annotation_files=args.annotation_files - ) + writer = SummaryWriter(args.prediction_files, annotation_files=args.annotation_files) writer.write(output=args.output) diff --git a/pproc/src/pproc/tcycl/tcycl_summarise_trckr.py b/pproc/src/pproc/tcycl/tcycl_summarise_trckr.py index 9760529a..f03d45e2 100644 --- a/pproc/src/pproc/tcycl/tcycl_summarise_trckr.py +++ b/pproc/src/pproc/tcycl/tcycl_summarise_trckr.py @@ -22,8 +22,17 @@ class Experiment: for which we need to retrieve TC data """ - basin_list = ["wnp", "spc", "sin", "nin", "enp", "cnp", "aus", "atl"] - + basin_list = [ + 'wnp', + 'spc', + 'sin', + 'nin', + 'enp', + 'cnp', + 'aus', + 'atl' + ] + name = None exp_version = "" exp_class = None @@ -31,122 +40,115 @@ class Experiment: exp_stream = None max_member = None max_step = None - + # tar file retrieved from ECFS ecfs_tar_file = "tcyc.tar" - + def __init__(self, out_dir): self.out_dir = out_dir self.tmp_dir = os.path.join(self.out_dir, "tmp") self.outdir = os.path.join(self.out_dir, self.exp_version) - + def get_data(self, date_from, date_to): """ Get Experiment data """ - + date_a = pd.to_datetime(date_from) date_b = pd.to_datetime(date_to) by_day = 0.5 - - dates = pd.date_range(date_a, date_b, freq=str(by_day) + "D") - + + dates = pd.date_range(date_a, date_b, freq=str(by_day) + 'D') + if not os.path.exists(self.outdir): print(f"Creating dir: {self.outdir}") os.system(f"mkdir -p {self.outdir}") - + # get data self._get_tar_data(dates) - + # write a summary CSV file self._write_csv(date_from, date_to) - + def _get_tar_data(self, dates): """ Retrieve the tar file from ECFS """ - + for _date in dates: - yyyy = _date.strftime("%Y") - mm = _date.strftime("%m") - dd = _date.strftime("%d") - hh = _date.strftime("%H") - + yyyy = _date.strftime('%Y') + mm = _date.strftime('%m') + dd = _date.strftime('%d') + hh = _date.strftime('%H') + # ECFS path - ecfs_dir = "/emos/tc/" + self.exp_version + "/" + yyyy + mm + "/" + dd + hh + ecfs_dir = '/emos/tc/' + self.exp_version + '/' + yyyy + mm + '/' + dd + hh ecfs_path = os.path.join(ecfs_dir, self.ecfs_tar_file) - + # target path target_path = os.path.join(self.tmp_dir, self.ecfs_tar_file) - + print(f"Copying {ecfs_path} from ECFS..") os.system(f"ecp -n ec:{ecfs_path} {self.tmp_dir + '/'}") - + print(f"Un-tarring {target_path} in {self.tmp_dir}") os.system(f"tar -xf {target_path} -C {self.tmp_dir + '/'}") - + print(f"Tar finished. Cleaning up {target_path}") # os.system(f"rm -f {target_path}") - + self._extract_inner_tar(_date) - + def _extract_inner_tar(self, date): """ Un-tar the data file within the ecfs tar """ - + data_tar = self._data_tar_file(date) - + print(f"Un-tarring {data_tar} in {self.outdir}") os.system(f"tar -xf {data_tar} -C {self.outdir + '/'}") - + def _data_tar_file(self, date): """ Path of datafile tar (inside the retrieved tar) Each experiment type has its own path/names.. """ - + raise NotImplementedError def _write_csv(self, date_from, date_to): - print("Generating summary CSV..") - + + print(f"Generating summary CSV..") + dd_from = pd.to_datetime(date_from) dd_to = pd.to_datetime(date_to) by_day = 1 - - datelist_all = pd.date_range(dd_from, dd_to, freq=str(by_day) + "D") - + + datelist_all = pd.date_range(dd_from, dd_to, freq=str(by_day) + 'D') + df = pd.DataFrame() for basin in self.basin_list: for date1 in datelist_all: - filename = ( - self.out_dir - + "/" - + self.exp_version - + "/" - + self.exp_version - + date1.strftime("%Y%m%d%H") - + "_" - + self.exp_stream - + "_000" - + str(self.max_step) - + "_" - + basin - ) + + filename = self.out_dir + "/" \ + + self.exp_version + "/" \ + + self.exp_version + \ + date1.strftime('%Y%m%d%H') + \ + "_" + self.exp_stream + \ + "_000" + str(self.max_step) + \ + "_" + basin # NB obsfile must be set to "none" # => no tc-name matching allowed ["vitals", "bt", "ib"] df1 = read_oper_fc(filename, date1, basin, True, obsfile="none") - + for ind in df1: # df = df.append(df1[ind]) df = pd.concat([df, df1[ind]]) - csv_summary_path = os.path.join( - self.out_dir, f"tc_tracker_data_{self.name}.csv" - ) - + csv_summary_path = os.path.join(self.out_dir, f"tc_tracker_data_{self.name}.csv") + print(f"Writing summary CSV file {csv_summary_path}") df.to_csv(csv_summary_path) @@ -155,7 +157,7 @@ class HRES_Experiment(Experiment): """ HRES experiment """ - + name = "HRES" exp_version = "0001" exp_class = "od" @@ -163,44 +165,26 @@ class HRES_Experiment(Experiment): exp_stream = "da" max_member = 1 max_step = 240 - + def __init__(self, out_dir): super().__init__(out_dir) - + def _data_tar_file(self, date): - yyyy = date.strftime("%Y") - mm = date.strftime("%m") - dd = date.strftime("%d") - hh = date.strftime("%H") - - tar_dir = ( - self.tmp_dir - + "/tcyc_" - + str(self.max_step) - + "/" - + self.exp_version - + "/" - + yyyy - + mm - + dd - + hh - + "/" - + self.exp_type - ) - - tar_file = ( - self.exp_version - + yyyy - + mm - + dd - + hh - + "_" - + self.exp_type - + "_" - + "000" - + str(self.max_step) - ) - + yyyy = date.strftime('%Y') + mm = date.strftime('%m') + dd = date.strftime('%d') + hh = date.strftime('%H') + + tar_dir = self.tmp_dir + \ + '/tcyc_' + str(self.max_step) + \ + '/' + self.exp_version + \ + '/' + yyyy + mm + dd + hh + \ + '/' + self.exp_type + + tar_file = self.exp_version + yyyy + mm + dd + hh + \ + '_' + self.exp_type + \ + '_' + '000' + str(self.max_step) + return os.path.join(tar_dir, tar_file) @@ -208,7 +192,7 @@ class CF_Experiment(Experiment): """ CF experiment """ - + name = "CF" exp_version = "0001" exp_class = "od" @@ -216,44 +200,28 @@ class CF_Experiment(Experiment): exp_stream = "000" max_member = 1 max_step = 240 - + def __init__(self, out_dir): super().__init__(out_dir) - + def _data_tar_file(self, date): - yyyy = date.strftime("%Y") - mm = date.strftime("%m") - dd = date.strftime("%d") - hh = date.strftime("%H") - - tar_dir = ( - self.tmp_dir - + "/tcyc_" - + str(self.max_step) - + "/" - + self.exp_version - + "/" - + yyyy - + mm - + dd - + hh - + "/" - + self.exp_type - ) - - tar_file = ( - self.exp_version - + yyyy - + mm - + dd - + hh - + "_" - + "000" - + "_" - + "000" - + str(self.max_step) - ) - + yyyy = date.strftime('%Y') + mm = date.strftime('%m') + dd = date.strftime('%d') + hh = date.strftime('%H') + + tar_dir = self.tmp_dir + \ + '/tcyc_' + str(self.max_step) + \ + '/' + self.exp_version + \ + '/' + yyyy + mm + dd + hh + \ + '/' + self.exp_type + + tar_file = self.exp_version + \ + yyyy + mm + dd + hh + \ + '_' + "000" + \ + '_' + '000' + \ + str(self.max_step) + return os.path.join(tar_dir, tar_file) @@ -261,7 +229,7 @@ class PF_Experiment(Experiment): """ PF experiment """ - + name = "PF" exp_version = "0001" exp_class = "od" @@ -269,75 +237,52 @@ class PF_Experiment(Experiment): exp_stream = "001" max_member = 50 max_step = 240 - + def __init__(self, out_dir): super().__init__(out_dir) - + def _extract_inner_tar(self, date): - yyyy = date.strftime("%Y") - mm = date.strftime("%m") - dd = date.strftime("%d") - hh = date.strftime("%H") - + yyyy = date.strftime('%Y') + mm = date.strftime('%m') + dd = date.strftime('%d') + hh = date.strftime('%H') + for number in np.arange(1, self.max_member + 1): - ens_number = "{:03}".format(number) - - tar_dir = ( - self.tmp_dir - + "/tcyc_" - + str(self.max_step) - + "/" - + self.exp_version - + "/" - + yyyy - + mm - + dd - + hh - + "/" - + self.exp_type - + "/" - + ens_number - + "/" - ) - - tar_file = ( - self.exp_version - + yyyy - + mm - + dd - + hh - + "_" - + ens_number - + "_000" - + str(self.max_step) - ) - + ens_number = '{:03}'.format(number) + + tar_dir = self.tmp_dir + \ + '/tcyc_' + str(self.max_step) + \ + '/' + self.exp_version + \ + '/' + yyyy + mm + dd + hh + \ + '/' + self.exp_type + \ + '/' + ens_number + '/' + + tar_file = self.exp_version + \ + yyyy + mm + dd + hh + \ + '_' + ens_number + \ + '_000' + str(self.max_step) + tar_file_path = os.path.join(tar_dir, tar_file) - + print(f"Un-tarring {tar_file_path} in {self.outdir}") os.system(f"tar -xf {tar_file_path} -C {self.outdir + '/'}") -exp_types = {"hres": HRES_Experiment, "pf": PF_Experiment, "cf": CF_Experiment} +exp_types = { + "hres": HRES_Experiment, + "pf": PF_Experiment, + "cf": CF_Experiment +} def main(): parser = argparse.ArgumentParser() - parser.add_argument( - "date_from", - help="Requested data from (format 'YYYYMMDD TT', e.g. '20211004 00')", - ) - parser.add_argument( - "date_to", help="Requested data to (format 'YYYYMMDD TT', e.g. '20211004 12')" - ) - parser.add_argument( - "--output_dir", help="Output directory", default="/var/tmp/tc_tracker_data" - ) - parser.add_argument( - "--data_types", help="Data types requested (e.g. hres,pf,cf)", default="hres" - ) + parser.add_argument("date_from", help=f"Requested data from (format 'YYYYMMDD TT', e.g. '20211004 00')") + parser.add_argument("date_to", help=f"Requested data to (format 'YYYYMMDD TT', e.g. '20211004 12')") + parser.add_argument("--output_dir", help=f"Output directory", default="/var/tmp/tc_tracker_data") + parser.add_argument("--data_types", help=f"Data types requested (e.g. hres,pf,cf)", default="hres") args = parser.parse_args() - + for t in args.data_types.split(","): print(f"Retrieving data for {t} - from {args.date_from} to {args.date_to}") exp = exp_types[t](args.output_dir) diff --git a/pproc/src/pproc/tcycl/tcycl_tools.py b/pproc/src/pproc/tcycl/tcycl_tools.py index a5a01712..66e3c630 100644 --- a/pproc/src/pproc/tcycl/tcycl_tools.py +++ b/pproc/src/pproc/tcycl/tcycl_tools.py @@ -14,26 +14,28 @@ def calc_dist(latdiff, londiff, lat): + radius = 6371000 dlat = np.radians(latdiff) dlon = np.radians(londiff) - a = np.sin(dlat / 2) * np.sin(dlat / 2) + np.cos(np.radians(lat)) * np.cos( - np.radians(lat + latdiff) - ) * np.sin(dlon / 2) * np.sin(dlon / 2) + a = (np.sin(dlat / 2) * np.sin(dlat / 2) + + np.cos(np.radians(lat)) * np.cos(np.radians(lat+latdiff)) * + np.sin(dlon / 2) * np.sin(dlon / 2)) c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1 - a)) dist = radius * c - + return dist def calc_speed3(my_pd): + latdiff = my_pd["lat_p"].diff() londiff = my_pd["lon_p"].diff() lat = my_pd["lat_p"] - + dist = calc_dist(latdiff, londiff, lat) speed = dist / (my_pd["step"].diff() * 3600) # in m/s - speedcum = dist.cumsum() / 1000.0 # km + speedcum = dist.cumsum() / 1000. # km return [speed, speedcum] @@ -49,22 +51,22 @@ def check_name(pd_fc, pd_bt, n_tc, tol=5): def read_oper_fc(filename, date1, basin, Pall, obsfile="none"): + # here "read_oper_fc" can only be used with no obsfile! - assert obsfile == "none", ( - "Error, for tcycl validation purposes " "obsfile must be set to 'none'" - ) - + assert obsfile == "none", "Error, for tcycl validation purposes " \ + "obsfile must be set to 'none'" + dict_of_tc = {} - recon = date1.strftime("%Y") - + recon = date1.strftime('%Y') + if obsfile != "none": - read_besttrack_date(date1, obsfile) - + df_bt = read_besttrack_date(date1, obsfile) + if (basin == "aus") or (basin == "spc") or (basin == "sin"): - lat_mult = -1.0 + lat_mult = -1. else: lat_mult = 1 - fp = open(filename, "r") + fp = open(filename, 'r') line = fp.readline() cnt = 1 ar = [] # Array for properties from file @@ -77,12 +79,12 @@ def read_oper_fc(filename, date1, basin, Pall, obsfile="none"): month = line[11:13] day = line[14:16] time = line[17:19] - lat1 = lat_mult * float(line[20:23]) / 10.0 + 0.05 - lon1 = float(line[23:27]) / 10.0 + 0.05 + lat1 = lat_mult * float(line[20:23]) / 10. + 0.05 + lon1 = float(line[23:27]) / 10. + 0.05 wind = float(line[28:31]) pres = float(line[32:36]) - lat2 = lat_mult * float(line[37:40]) / 10.0 + 0.05 - lon2 = float(line[40:44]) / 10.0 + 0.05 + lat2 = lat_mult * float(line[37:40]) / 10. + 0.05 + lon2 = float(line[40:44]) / 10. + 0.05 # print([year,month,day,time]) # if time=="00" or time=="12": ard.append([year, month, day, time]) @@ -91,26 +93,15 @@ def read_oper_fc(filename, date1, basin, Pall, obsfile="none"): # print("Finish TC",s1[0]) np_ard = np.asarray(ard) np_ar = np.asarray(ar) - my_dates = pd.to_datetime( - { - "year": np_ard[:, 0], - "month": np_ard[:, 1], - "day": np_ard[:, 2], - "hour": np_ard[:, 3], - } - ) # - d = { - "datetime": my_dates, - "lat_p": np_ar[:, 0], - "lon_p": np_ar[:, 1], - "wind": np_ar[:, 2], - "pres": np_ar[:, 3], - "lat_w": np_ar[:, 4], - "lon_w": np_ar[:, 5], - } + my_dates = pd.to_datetime({'year': np_ard[:, 0], + 'month': np_ard[:, 1], + 'day': np_ard[:, 2], + 'hour': np_ard[:, 3]}) # + d = {"datetime": my_dates, "lat_p": np_ar[:, 0], "lon_p": np_ar[:, 1], "wind": np_ar[:, 2], + "pres": np_ar[:, 3], "lat_w": np_ar[:, 4], "lon_w": np_ar[:, 5]} df1 = pd.DataFrame(d) # print(df1) - + # ============================================================== # Check if the cyclone is observed at the initialisation time, # and extract name from observation file in that case @@ -124,17 +115,12 @@ def read_oper_fc(filename, date1, basin, Pall, obsfile="none"): # No name matching used name1 = str(n_tc) # ============================================================== - + # Calculate additional diagnostics - df1["step"] = ( - (df1["datetime"] - date1).values.astype("timedelta64[h]").astype(int) - ) - df1["windrad"] = ( - calc_dist(df1.lat_p - df1.lat_w, df1.lon_p - df1.lon_w, df1.lat_p) - / 1000.0 - ) + df1["step"] = (df1["datetime"] - date1).values.astype("timedelta64[h]").astype(int) + df1["windrad"] = calc_dist(df1.lat_p - df1.lat_w, df1.lon_p - df1.lon_w, df1.lat_p) / 1000. df1["wind"] = df1["wind"] * 0.514444 - + speed = calc_speed3(df1) df1["speed"] = speed[0] df1["accdist"] = speed[1] @@ -151,17 +137,17 @@ def read_oper_fc(filename, date1, basin, Pall, obsfile="none"): df1["name"] = nameTmp if Pall: dict_of_tc[nameTmp] = df1 - + # Add DataFrame to Dictionary only if the cyclone is in observation file. Can be changed. - + # if str(n_tc)!=name1: # dict_of_tc[name1] = df1 - + n_tc += 1 ar = [] ard = [] - + line = fp.readline() cnt += 1 - + return dict_of_tc diff --git a/pproc/src/pproc/thermal_indices.py b/pproc/src/pproc/thermal_indices.py index e0fa9a63..b22f3a82 100755 --- a/pproc/src/pproc/thermal_indices.py +++ b/pproc/src/pproc/thermal_indices.py @@ -24,20 +24,19 @@ import sys import functools import signal -from typing import Optional import earthkit.data +from earthkit.data.readers.grib.metadata import GribFieldMetadata import numpy as np import thermofeel as thermofeel from meters import metered from conflator import Conflator -from ppruntime.thermo import helpers +from pproc.common.accumulation import Accumulator from pproc.common.accumulation_manager import AccumulationManager from pproc.common.parallel import create_executor, sigterm_handler -from pproc.common.io import write_grib from pproc.config.types import ThermoConfig, ThermoParamConfig -from pproc.config.targets import Target +from pproc.thermo import helpers from pproc.thermo.indices import ComputeIndices logger = logging.getLogger(__name__) @@ -80,24 +79,6 @@ def is_target_param(out_params: list[str], valid_names: set[str]) -> bool: return bool(set(out_params) & valid_names) -def write( - target: Target, - ds: "earthkit.data.FieldList | earthkit.data.core.fieldlist.Field", - metadata: Optional[dict] = None, -): - if isinstance(ds, earthkit.data.core.fieldlist.Field): - ds = [ds] - metadata = metadata or {} - for f in ds: - field_metadata = f.metadata() - updates = metadata.copy() - # Handle wrapped metadata - if hasattr(field_metadata, "extra"): - updates.update(field_metadata.extra) - message = f.metadata()._handle - write_grib(target, message, f.values, updates) - - @metered("Process step", out=logger.info) def process_step( config: ThermoConfig, @@ -121,7 +102,7 @@ def process_step( # Mean Radiant Temperature - shortName mrt - ECMWF product if is_target_param(param.out_params, {"mrt", 261002}): mrt = indices.calc_field("mrt", indices.calc_mrt, fields) - write(indices_target, mrt) + helpers.write(indices_target, mrt) # Univeral Thermal Climate Index - shortName utci - ECMWF product if is_target_param(param.out_params, {"utci", 261001}): @@ -132,58 +113,58 @@ def process_step( print_misses=config.utci_misses, validate=config.validateutci, ) - write(indices_target, utci) + helpers.write(indices_target, utci) # Heat Index (adjusted) - shortName heatx - ECMWF product if is_target_param(param.out_params, {"heatx", 260004}): heatx = indices.calc_field("heatx", indices.calc_heatx, fields) - write(indices_target, heatx) + helpers.write(indices_target, heatx) # Wind Chill factor - shortName wcf - ECMWF product if is_target_param(param.out_params, {"wcf", 260005}): wcf = indices.calc_field("wcf", indices.calc_wcf, fields) - write(indices_target, wcf) + helpers.write(indices_target, wcf) # Apparent Temperature - shortName aptmp - ECMWF product if is_target_param(param.out_params, {"aptmp", 260255}): aptmp = indices.calc_field("aptmp", indices.calc_aptmp, fields) - write(indices_target, aptmp) + helpers.write(indices_target, aptmp) # Relative humidity percent at 2m - shortName 2r - ECMWF product if is_target_param(param.out_params, {"2r", 260242}): rhp = indices.calc_field("2r", indices.calc_rhp, fields) - write(indices_target, rhp) + helpers.write(indices_target, rhp) # Humidex - shortName hmdx if is_target_param(param.out_params, {"hmdx", 261016}): hmdx = indices.calc_field("hmdx", indices.calc_hmdx, fields) - write(indices_target, hmdx) + helpers.write(indices_target, hmdx) # Normal Effective Temperature - shortName nefft if is_target_param(param.out_params, {"nefft", 261018}): nefft = indices.calc_field("nefft", indices.calc_nefft, fields) - write(indices_target, nefft) + helpers.write(indices_target, nefft) # Globe Temperature - shortName gt if is_target_param(param.out_params, {"gt", 261015}): gt = indices.calc_field("gt", indices.calc_gt, fields) - write(indices_target, gt) + helpers.write(indices_target, gt) # Wet-bulb temperature - shortName wbt if is_target_param(param.out_params, {"wbt", 261023}): wbt = indices.calc_field("wbt", indices.calc_wbt, fields) - write(indices_target, wbt) + helpers.write(indices_target, wbt) # Wet Bulb Globe Temperature - shortName wbgt if is_target_param(param.out_params, {"wbgt", 261014}): # wbgt = indices.calc_field("wbgt", indices.calc_wbgt, fields) - write(indices_target, wbgt) + helpers.write(indices_target, wbgt) # Write out intermediate fields for field in ["10si", "cossza", "dsrp"]: sel = indices.results.sel(param=field) if len(sel) != 0: - write( + helpers.write( config.outputs.intermediate.target, sel, metadata=config.outputs.intermediate.metadata, @@ -246,7 +227,7 @@ def main(): for x in accum_fields.metadata() ], ) - write( + helpers.write( cfg.outputs.accum.target, accum_fields, metadata=cfg.outputs.accum.metadata, diff --git a/pproc/src/pproc/thermo/__init__.py b/pproc/src/pproc/thermo/__init__.py index e69de29b..6d947223 100644 --- a/pproc/src/pproc/thermo/__init__.py +++ b/pproc/src/pproc/thermo/__init__.py @@ -0,0 +1,9 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + diff --git a/pproc/src/pproc/thermo/helpers.py b/pproc/src/pproc/thermo/helpers.py new file mode 100644 index 00000000..f89b011f --- /dev/null +++ b/pproc/src/pproc/thermo/helpers.py @@ -0,0 +1,194 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import earthkit.data +from earthkit.data.encoders import grib +import logging +import numpy as np +import thermofeel +from meters import metered +from typing import Optional + +from pproc.common.io import write_grib +from pproc.config.targets import Target + +logger = logging.getLogger(__name__) + +# Constants +UTCI_MIN_VALUE = thermofeel.celsius_to_kelvin(-80) +UTCI_MAX_VALUE = thermofeel.celsius_to_kelvin(90) + +MRT_DIFF_HIGH = 150 +MRT_DIFF_LOW = -30 + +# parameter to units +units = { + "cossza": "", + "2t": "K", + "2d": "K", + "wcf": "K", + "aptmp": "K", + "hmdx": "K", + "nefft": "K", + "wbgt": "K", + "wbt": "K", + "gt": "K", + "2r": "%", + "10si": "m/s", + "mrt": "K", + "utci": "K", + "heatx": "K", + "dsrp": "W/m2", + "ssrd": "W/m2", + "ssr": "W/m2", + "fdir": "W/m2", + "strd": "W/m2", + "str": "W/m2", +} + + +def compute_ehPa_(rh_pc, svp): + return svp * rh_pc * 0.01 # / 100.0 + + +@metered("ehPa", out=logger.debug) +def compute_ehPa(t2m, t2d): + rh_pc = thermofeel.calculate_relative_humidity_percent(t2m, t2d) + svp = thermofeel.calculate_saturation_vapour_pressure(t2m) + ehPa = compute_ehPa_(rh_pc, svp) + return ehPa + + +def find_utci_missing_values(t2m, va, mrt, ehPa, utci, print_misses=True): + e_mrt = np.subtract(mrt, t2m) + + misses = np.where(t2m >= thermofeel.celsius_to_kelvin(70)) + nt2high = len(misses[0]) + t = np.where(t2m <= thermofeel.celsius_to_kelvin(-70)) + nt2low = len(t[0]) + misses = np.union1d(t, misses) + + t = np.where(va >= 25.0) # 90kph + nhighwind = len(t[0]) + misses = np.union1d(t, misses) + + t = np.where(ehPa > 50.0) + nehpa = len(t[0]) + misses = np.union1d(t, misses) + + t = np.where(e_mrt >= MRT_DIFF_HIGH) + ndiffmrt = len(t[0]) + misses = np.union1d(t, misses) + + t = np.where(e_mrt <= MRT_DIFF_LOW) + ndiffmrtneg = len(t[0]) + misses = np.union1d(t, misses) + + t = np.where(np.isnan(utci)) + nnan = len(t[0]) + misses = np.union1d(t, misses) + + nmisses = len(misses) + + if print_misses: + print( + f"UTCI nmisses {nmisses} NANs {nnan} T2>70C {nt2high} T2<-70 {nt2low} highwind {nhighwind}" + + f"nehpa {nehpa} MRT-T2>{MRT_DIFF_HIGH} {ndiffmrt} MRT-T2<{MRT_DIFF_LOW} {ndiffmrtneg}" + ) + + return misses + + +def validate_utci(utci, misses, lats, lons): + + out_of_bounds = 0 + nans = 0 + for i in range(len(utci)): + v = utci[i] + if v < UTCI_MIN_VALUE or v > UTCI_MAX_VALUE: + out_of_bounds += 1 + logger.info("UTCI [", i, "] = ", utci[i], " : lat/lon ", lats[i], lons[i]) + if np.isnan(v): + nans += 1 + logger.info("UTCI [", i, "] = ", utci[i], " : lat/lon ", lats[i], lons[i]) + + nmisses = len(misses) + if nmisses > 0 or out_of_bounds > 0 or nans > 0: + logger.info( + f"UTCI => nmisses {nmisses} out_of_bounds {out_of_bounds} NANs {nans}" + ) + + +def get_datetime(fields: earthkit.data.FieldList): + dt = fields[0].datetime() + base_time = dt["base_time"] + valid_time = dt["valid_time"] + assert all( + x == valid_time for x in fields.datetime()["valid_time"] + ), f"Obtained different valid times {[x for x in fields.datetime()['valid_time']]}" # verify valid time all same + return base_time, valid_time + + +def latlon(fields: earthkit.data.FieldList): + latlon = fields[0].to_latlon(flatten=True) + lat = latlon["lat"] + lon = latlon["lon"] + assert lat.size == lon.size + assert fields[0].values.size == lat.size + return lat, lon + + +def field_values(fields: earthkit.data.FieldList, param: str) -> np.ndarray: + sel = fields.sel(param=param) + if len(sel) == 0: + raise ValueError( + f"Field {param} not found in fields {fields.ls(namespace='mars')}" + ) + return sel.to_array() + + +def check_field_sizes(fields: earthkit.data.FieldList): + all(f.values.shape == fields[0].values.shape for f in fields) + + +def step_interval(fields) -> int: + # Derive step interval from de-accumulated fields + accum_field = fields.sel(stepType="diff") + if len(accum_field) == 0: + raise ValueError("No accumulation fields found, can not derive step interval") + delta = ( + accum_field[0].metadata()["endStep"] - accum_field[0].metadata()["startStep"] + ) + check = [ + delta == (f.metadata()["endStep"] - f.metadata()["startStep"]) + for f in accum_field + ] + if not all(check): + raise ValueError( + f"Step intervals are not consistent for accumulated fields {accum_field.ls()}" + ) + return delta + + +def write( + target: Target, + ds: "earthkit.data.FieldList | earthkit.data.core.fieldlist.Field", + metadata: Optional[dict] = None, +): + if isinstance(ds, earthkit.data.core.fieldlist.Field): + ds = [ds] + metadata = metadata or {} + for f in ds: + field_metadata = f.metadata() + updates = metadata.copy() + # Handle wrapped metadata + if hasattr(field_metadata, "extra"): + updates.update(field_metadata.extra) + message = f.metadata()._handle + write_grib(target, message, f.values, updates) diff --git a/pproc/src/pproc/thermo/indices.py b/pproc/src/pproc/thermo/indices.py index 72d77b66..b7a9e369 100644 --- a/pproc/src/pproc/thermo/indices.py +++ b/pproc/src/pproc/thermo/indices.py @@ -18,20 +18,28 @@ import thermofeel from meters import metered -from ppruntime.thermo.helpers import ( +from pproc.thermo.helpers import ( compute_ehPa, field_values, find_utci_missing_values, get_datetime, latlon, step_interval, + units, validate_utci, ) -from ppruntime.thermal_indices import metadata_intensity, metadata_accumulation logger = logging.getLogger(__name__) +def metadata_intensity(fields): + return fields.sel(param="2t").metadata() + + +def metadata_accumulation(fields): + return fields.sel(param="fdir").metadata() + + class ComputeIndices: def __init__(self, out_keys: Optional[dict] = None): self.out_keys = out_keys or {} @@ -59,6 +67,7 @@ def create_surface_output(self, values, template, **overrides): @metered("cossza", out=logger.debug) def calc_cossza_int(self, fields): + lats, lons = latlon(fields) basetime, validtime = get_datetime(fields) @@ -114,6 +123,7 @@ def calc_rhp(self, fields): @metered("heatx", out=logger.debug) def calc_heatx(self, fields): + t2m = field_values(fields, "2t") # Kelvin td = field_values(fields, "2d") # Kelvin @@ -123,6 +133,18 @@ def calc_heatx(self, fields): heatx, metadata_intensity(fields), paramId="260004" ) + def field_stats(self, name, values): + try: + unit = units[name] + except: + raise ValueError(f"No units specified for parameter {name}") + + logger.debug( + f"{name:<8} {unit:<6} min {np.nanmin(values):>16.6f} max {np.nanmax(values):>16.6f} " + f"avg {np.nanmean(values):>16.6f} stddev {np.nanstd(values, dtype=np.float64):>16.6f} " + f"missing {np.count_nonzero(np.isnan(values)):>8}" + ) + @metered("dsrp", out=logger.debug) def calc_dsrp(self, fields): """ @@ -148,6 +170,7 @@ def calc_field(self, name, func, fields, **kwargs): res = func(fields, **kwargs) + self.field_stats(name, res.to_array()) if self.results is None: self.results = res else: @@ -158,6 +181,7 @@ def calc_field(self, name, func, fields, **kwargs): @metered("utci", out=logger.debug) def calc_utci(self, fields, *, print_misses=True, validate=True): + lats, lons = latlon(fields) t2m = field_values(fields, "2t") # Kelvin @@ -270,6 +294,7 @@ def calc_aptmp(self, fields): @metered("mrt", out=logger.debug) def calc_mrt(self, fields): + cossza = self.calc_field("cossza", self.calc_cossza_int, fields).to_array() dsrp = self.calc_field("dsrp", self.calc_dsrp, fields).to_array() @@ -284,10 +309,19 @@ def calc_mrt(self, fields): strr = field_values(fields, "str") # W/m2 ssr = field_values(fields, "ssr") # W/m2 + self.field_stats("ssrd", ssrd) + # remove negative values from deaccumulated solar fields for v in ssrd, fdir, strd, ssr: v[v < 0] = 0 + self.field_stats("dsrp", dsrp) + self.field_stats("ssrd", ssrd) + self.field_stats("fdir", fdir) + self.field_stats("strd", strd) + self.field_stats("str", strr) + self.field_stats("ssr", ssr) + mrt = thermofeel.calculate_mean_radiant_temperature( ssrd * f, ssr * f, dsrp * f, strd * f, fdir * f, strr * f, cossza ) # Kelvin diff --git a/pproc/src/pproc/wind.py b/pproc/src/pproc/wind.py new file mode 100755 index 00000000..78b0c093 --- /dev/null +++ b/pproc/src/pproc/wind.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +# +# (C) Copyright 1996- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation nor +# does it submit to any jurisdiction. +import functools +import sys +import numpy as np +import signal + +import eccodes +from meters import ResourceMeter +from conflator import Conflator + +from pproc import common +from pproc.common.accumulation_manager import AccumulationManager +from pproc.common.parallel import parallel_processing, sigterm_handler +from pproc.common.utils import dict_product +from pproc.common.param_requester import ParamRequester +from pproc.config.param import ParamConfig +from pproc.config.types import WindConfig +from pproc.config.targets import NullTarget + + +def wind_metadata(step: int, **out_keys) -> dict: + grib_sets = { + "bitsPerValue": 24, + "step": step, + **out_keys, + } + if step == 0: + grib_sets["timeRangeIndicator"] = 1 + elif step > 255: + grib_sets["timeRangeIndicator"] = 10 + else: + grib_sets["timeRangeIndicator"] = 0 + + return grib_sets + + +def wind_iteration( + config: WindConfig, + param: ParamConfig, + dims: dict, +): + requester = ParamRequester( + param, + config.inputs, + src_name="fc", + total=param.total_fields, + ) + metadata, ens = requester.retrieve_data(**dims) + template = metadata[0] + with ResourceMeter(f"Param {param.name}, {dims}"): + if not isinstance(config.outputs.ws.target, NullTarget): + for number in range(ens.shape[0]): + marstype = ( + "pf" + if number > 0 and template.get("type") in ["cf", "fc"] + else template.get("type") + ) + metadata = wind_metadata( + **dims, + number=number, + type=marstype, + **config.outputs.ws.metadata, + **param.metadata, + ) + common.io.write_grib( + config.outputs.ws.target, template, ens[number], metadata + ) + + mean_keys = wind_metadata( + **dims, + **config.outputs.mean.metadata, + **param.metadata, + ) + common.io.write_grib( + config.outputs.mean.target, template, np.mean(ens, axis=0), mean_keys + ) + + std_keys = wind_metadata( + **dims, + **config.outputs.std.metadata, + **param.metadata, + ) + common.io.write_grib( + config.outputs.std.target, template, np.std(ens, axis=0), std_keys + ) + + for name in config.outputs.names: + getattr(config.outputs, name).target.flush() + config.recovery.add_checkpoint(param=param.name, **dims) + + +def main(): + sys.stdout.reconfigure(line_buffering=True) + signal.signal(signal.SIGTERM, sigterm_handler) + + cfg = Conflator(app_name="pproc-wind", model=WindConfig).load() + cfg.initialise() + cfg.print() + + plan = [] + for param in cfg.parameters: + accum_manager = AccumulationManager.create(param.accumulations) + for dims in dict_product(accum_manager.dims): + if cfg.recovery.existing_checkpoint(param=param.name, **dims): + print(f"Recovery: skipping dims: {param.name} {dims}") + continue + plan.append((param, dims)) + + iteration = functools.partial(wind_iteration, cfg) + parallel_processing( + iteration, + plan, + cfg.parallelisation, + ) + + cfg.clean() + + +if __name__ == "__main__": + main() diff --git a/pproc/src/pproc/wind850.py b/pproc/src/pproc/wind850.py new file mode 100755 index 00000000..c77864e9 --- /dev/null +++ b/pproc/src/pproc/wind850.py @@ -0,0 +1,296 @@ +#!/usr/bin/env python3 +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + + +from os import path + +import eccodes +# import pyfdb + + +def parse_range(r: str): + if not r: + return (None,) + + if isinstance(r, list): + return sorted(set(r)) + + l = r.lower().split("/") + if len(l) == 5 and l[1] == "to" and l[3] == "by": + return range(int(l[0]), int(l[2]) + 1, int(l[4])) + + if len(l) == 3 and l[1] == "to": + return range(int(l[0]), int(l[2]) + 1, 1) + + return sorted(set(map(int, l))) + + +class Wind: + def __init__(self, vo, d, u, v) -> None: + self.vo = vo + self.d = d + self.u = u + self.v = v + + +def parse_wind_paramids(param: str, metkit_share_dir) -> Wind: + from pproc.Config import ParamId + + uv = param.split("/") + assert len(uv) == 2 + + paramid = ParamId(metkit_share_dir) + u, v = map(lambda p: paramid.id(int(p) if p.isdigit() else p), uv) + vo, d = paramid.vod((u, v)) + + return Wind(vo, d, u, v) + + +def mars(input: str = ""): + from os import environ + from subprocess import run + + p = run( + "mars", + capture_output=True, + text=True, + input=input, + env=environ, + ) + if p.returncode: + print(f"stdout:\n{p.stdout}\n") + print(f"stderr:\n{p.stderr}\n") + + return p.returncode == 0 + + +def wind_mean_sd_eps(wind, levelist, step, expver, var: dict, pp: dict) -> list: + """ + Calculate ensemble (type=cf/pf) mean and standard deviation of wind speed + """ + + assert var["mars"] + + target = f"param=vo_d,levelist={levelist},step={step}.eps.grib" + request = f""" +retrieve, + date = {var["date"]}, + time = {var["time"]}, + number = {var["number"]}, + stream = enfo, + levelist = {levelist}, + levtype = pl, + expver = {expver}, + type = pf, + step = {step}, + class = {var["class"]}, + param = {"/".join((str(wind.vo), str(wind.d)))}, + target = '{target}' +retrieve, + type = cf, + number = off +""" + from io import BytesIO + import numpy as np + import mir + + print(request) + # assert mars(request) + assert path.exists(target) + + out = BytesIO() + inp = mir.MultiDimensionalGribFileInput(target, 2) + + job = mir.Job(vod2uv="1", **pp) + job.execute(inp, out) + + out.seek(0) + reader = eccodes.StreamReader(out) + messages = list(reader) + + tens = (len(parse_range(var["number"])) + 1) * 2 # (nens + 1)*(vo, d) + assert len(messages) == tens + + u = np.asarray([m.get_array("values") for m in messages if m["paramId"] == wind.u]) + v = np.asarray([m.get_array("values") for m in messages if m["paramId"] == wind.v]) + assert u.shape == v.shape + assert u.shape[0] + v.shape[0] == tens + + ws = np.sqrt(u * u + v * v) + mean = np.mean(ws, axis=0) + stddev = np.std(ws, axis=0, ddof=int(var["std_corrected_sample"])) + + em = messages[0].copy() + em.set("marsType", "em") + em.set("indicatorOfParameter", "010") # FIXME check? + em.set("gribTablesVersionNo", 128) + em.set_array("values", mean) + + es = messages[0].copy() + es.set("marsType", "es") + es.set("indicatorOfParameter", "010") # FIXME check? + es.set("gribTablesVersionNo", 128) + es.set_array("values", stddev) + + return em, es + + +def wind_norm_det(wind, levelist, step, expver, var: dict, pp: dict) -> eccodes.Message: + """ + Calculate deterministic (type=fc) wind speed + """ + from io import BytesIO + import numpy as np + import mir + + assert var["mars"] + + target = f"param=vo_d,levelist={levelist},step={step}.det.grib" + request = f""" +retrieve, + date = {var["date"]}, + time = {var["time"]}, + levelist = {levelist}, + levtype = pl, + expver = {expver}, + type = fc, + step = {step}, + class = {var["class"]}, + param = {"/".join((str(wind.vo), str(wind.d)))}, + target = '{target}' +""" + + print(request) + # assert mars(request) + assert path.exists(target) + + out = BytesIO() + inp = mir.MultiDimensionalGribFileInput(target, 2) + + job = mir.Job(vod2uv="1", **pp) + job.execute(inp, out) + + out.seek(0) + reader = eccodes.StreamReader(out) + messages = list(reader) + + assert len(messages) == 2 + assert messages[0]["paramId"] == wind.u + assert messages[1]["paramId"] == wind.v + + uv = np.asarray([m.get_array("values") for m in messages]) + ws = np.linalg.norm(uv, axis=0) + + ws = messages[0].copy() + ws.set_array("values", ws) + + return ws + + +def calculate_normalized_stddev_last_30_days(): + assert False + + +def main(args=None): + from datetime import datetime + import argparse + + from pproc.Config import VariableTree, postproc_keys + + # arguments + parser = argparse.ArgumentParser( + description="Calculate wind speed mean/standard deviation", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + + parser.add_argument("--config-file", help="Configuration file", required=True) + parser.add_argument( + "--config-node", help="Configuration node", required=True, nargs="+" + ) + + parser.add_argument("--no-mars", action="store_false", dest="mars") + parser.add_argument("--write-grib", action="store_true") + parser.add_argument("--write-fdb", action="store_true") + parser.add_argument( + "--std-corrected-sample", + help="corrected sample standard deviation", + action="store_true", + ) + parser.add_argument( + "--metkit-share-dir", + help="Metkit configuration directory", + default="/usr/local/apps/ecmwf-toolbox/2022.05.0.0/GNU/11.2/share/metkit", + ) + + parser.add_argument("--param", default="u/v") + parser.add_argument("--class", default="od", dest="klass") + parser.add_argument("--expver", default=1) + parser.add_argument("--expver-da", default=None) + parser.add_argument("--date", required=True) + parser.add_argument("--time", choices=(0, 6, 12, 18), default=0, type=int) + parser.add_argument("--number", default="1/to/50") + + parser.add_argument("--grid", default="O640") + parser.add_argument("--resol", default="av") + parser.add_argument("--intgrid", default=None) + parser.add_argument("--truncation", default=None) + + args = parser.parse_args() + print(args) + + date = datetime.strptime(args.date, "%Y%m%d") + + # assert fdb or mars-client + fdb = None # pyfdb.FDB() + assert bool(fdb) != args.mars + + # variables + tree = VariableTree(args.config_file) + var = tree.variables(*map(lambda n: int(n) if n.isdigit() else n, args.config_node)) + var.update(vars(args)) + var["class"] = var.pop("klass") + print(var) + + # wind paramids + wind = parse_wind_paramids(var["param"], args.metkit_share_dir) + + # post-processing keys + pp_keys = postproc_keys(args.metkit_share_dir) + pp = {key: var[key] for key in pp_keys if var.get(key, None)} + + for levelist in parse_range(var["levelist"]): + for step in parse_range(var["step"]): + + # calculate mean/stddev of wind speed for type=pf/cf (eps) + em, es = wind_mean_sd_eps(wind, levelist, step, var["expver"], var, pp) + + # calculate wind speed for type=fc (deterministic) + expver = var.get("expver_da", None) + if not expver: + expver = var["expver"] + + det = wind_norm_det(wind, levelist, step, expver, var, pp) + + for message, filename in zip((em, es, det), ("em.grib", "es.grib", "det.grib")): + if var["write_grib"]: + assert not path.exists(filename) + with open(filename, "wb") as fout: + message.write_to(fout) + + if var["write_fdb"]: + fdb.archive(message.get_buffer()) + +# # fdb.flush() + + +if __name__ == "__main__": + import sys + + main(sys.argv) diff --git a/pproc/src/pproc/wind850.yaml b/pproc/src/pproc/wind850.yaml new file mode 100644 index 00000000..0eadfc70 --- /dev/null +++ b/pproc/src/pproc/wind850.yaml @@ -0,0 +1,28 @@ +--- + +ws: + levelist: [250, 850] + param: u/v + grid: O640 + 12: { step: 0/to/12/by/3 } + 24: { step: 15/to/24/by/3 } + 36: { step: 27/to/36/by/3 } + 48: { step: 39/to/48/by/3 } + 60: { step: 51/to/60/by/3 } + 72: { step: 63/to/72/by/3 } + 84: { step: 75/to/84/by/3 } + 96: { step: 87/to/96/by/3 } + 108: { step: 99/to/108/by/3 } + 120: { step: 111/to/120/by/3 } + 132: { step: 123/to/132/by/3 } + 144: { step: 135/to/144/by/3 } + 168: { step: 150/to/168/by/6 } + 192: { step: 174/to/192/by/6 } + 216: { step: 198/to/216/by/6 } + 240: { step: 222/to/240/by/6 } + 264: { step: 246/to/264/by/6 } + 288: { step: 270/to/288/by/6 } + 312: { step: 394/to/312/by/6 } + 336: { step: 318/to/336/by/6 } + 360: { step: 342/to/360/by/6 } + diff --git a/pproc/tests/common/test_accumulation_manager.py b/pproc/tests/common/test_accumulation_manager.py index f0a9938d..f6a92408 100644 --- a/pproc/tests/common/test_accumulation_manager.py +++ b/pproc/tests/common/test_accumulation_manager.py @@ -11,10 +11,10 @@ import numpy as np import pytest -from ppcore.utils.dicts import dict_product from pproc.common.accumulation import Aggregation, Mean, SimpleAccumulation from pproc.common.accumulation_manager import AccumulationManager +from pproc.common.utils import dict_product CONFIGS = { @@ -248,7 +248,7 @@ def test_create(config, accums, coords): matched = False continue for dim in acc.dims: - if type(dim.accumulation) is not accums[dim.key][0]: + if type(dim.accumulation) != accums[dim.key][0]: matched = False break if dim.accumulation.coords != acc_coords[dim.key]: diff --git a/pproc/tests/common/test_io.py b/pproc/tests/common/test_io.py index bae4d671..bca69093 100644 --- a/pproc/tests/common/test_io.py +++ b/pproc/tests/common/test_io.py @@ -1,154 +1,154 @@ -# # (C) Copyright 2021- ECMWF. -# # -# # This software is licensed under the terms of the Apache Licence Version 2.0 -# # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -# # -# # In applying this licence, ECMWF does not waive the privileges and immunities -# # granted to it by virtue of its status as an intergovernmental organisation -# # nor does it submit to any jurisdiction. - -# import eccodes -# from functools import partial -# import os -# import pytest -# import numpy as np - -# from pproc.common import dataset, io, parallel -# from conftest import DATA_DIR - - -# request = { -# "class": "od", -# "expver": "0001", -# "stream": "enfo", -# "date": "20240507", -# "domain": "g", -# "time": 12, -# "type": "cf", -# "levtype": "pl", -# "levelist": 250, -# "param": [138, 155], -# "step": range(0, 7, 3), -# } - - -# def test_fdb_read(fdb): -# data = io.fdb_read(fdb, request) -# assert len(data.coords["param"]) == 2 -# assert len(data.coords["step"]) == 3 -# assert isinstance(data.grib_template, eccodes.highlevel.message.GRIBMessage) -# assert not np.any(np.isnan(data)) - - -# def test_fdb_read_to_file(tmpdir, fdb): -# io.fdb_read_to_file(fdb, request, f"{tmpdir}/test.grib") -# data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test.grib")] -# assert len(data) == 6 - - -# @pytest.mark.parametrize( -# "func", -# [ -# io.fdb_read, -# io.fdb_read_to_file, -# ], -# ) -# def test_fdb_no_data(tmpdir, fdb, func): -# no_data = request.copy() -# no_data["date"] = "20240508" -# if func == io.fdb_read_to_file: -# func = partial(func, file_out=f"{tmpdir}/test.grib") -# with pytest.raises(RuntimeError): -# func(fdb, no_data) - - -# def test_fdb_missing_values(fdb): -# has_missing = request.copy() -# has_missing.pop("levelist") -# has_missing.update( -# {"stream": "waef", "param": 140232, "step": 12, "levtype": "sfc"} -# ) -# data = io.fdb_read(fdb, has_missing) -# assert np.any(np.isnan(data)) -# assert not np.any(data == 9999) - - -# def test_fdb_target(): -# target = io.target_from_location("fdb:") -# for msg in eccodes.FileReader(f"{DATA_DIR}/wind.grib"): -# msg.set("type", "em") -# target.write(msg) -# target.flush() -# req = request.copy() -# req["type"] = "em" -# data = list(eccodes.StreamReader(target.fdb.retrieve(req))) -# assert len(data) == 6 - - -# def test_file_target(tmpdir): -# target = io.target_from_location(f"file:{tmpdir}/test.grib") -# messages = [ -# msg -# for index, msg in enumerate(eccodes.FileReader(f"{DATA_DIR}/wind.grib")) -# if index < 5 -# ] -# assert len(messages) == 5 -# for msg in messages: -# target.write(msg) -# data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test.grib")] -# assert len(data) == 5 - - -# def test_fileset_target(tmpdir): -# target = io.target_from_location(f"fileset:{tmpdir}" + "/test_{step}.grib") -# for msg in eccodes.FileReader(f"{DATA_DIR}/2t_ens.grib"): -# target.write(msg) -# files = os.listdir(tmpdir) -# assert set(x for x in files if x.endswith(".grib")) == set( -# f"test_{x}.grib" for x in range(12, 37, 6) -# ) -# data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test_12.grib")] -# assert len(data) == 6 - - -# def _write(target, message): -# # Modify parameter to distinguish from data already in FDB -# message.set("paramId", "228") -# target.write(message) -# target.flush() - - -# @pytest.mark.parametrize( -# "loc, out_loc, reqs", -# [ -# ["file:TMPDIR/test.grib", None, [{}]], -# [ -# "fileset:TMPDIR/test_{step}.grib", -# "fileset:test", -# [{"step": x} for x in range(12, 37, 6)], -# ], -# ], -# ) -# def test_target_parallel(tmpdir, fdb, loc, out_loc, reqs): -# loc = loc.replace("TMPDIR", str(tmpdir)) -# if out_loc is None: -# out_loc = loc -# target = io.target_from_location(loc) -# target.enable_parallel() -# parallel.parallel_processing( -# _write, -# [ -# (target, io.GribMetadata(x._handle)) -# for x in eccodes.FileReader(f"{DATA_DIR}/2t_ens.grib") -# ], -# 4, -# ) - -# type_, path = loc.split(":") -# num_messages = 0 -# for req in reqs: -# if type_ == "fileset": -# req["location"] = path -# reader = dataset.open_dataset({type_: {"test": req}}, out_loc) -# num_messages += len(list(reader)) -# assert num_messages == 30 +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import eccodes +from functools import partial +import os +import pytest +import numpy as np + +from pproc.common import dataset, io, parallel +from conftest import DATA_DIR + + +request = { + "class": "od", + "expver": "0001", + "stream": "enfo", + "date": "20240507", + "domain": "g", + "time": 12, + "type": "cf", + "levtype": "pl", + "levelist": 250, + "param": [138, 155], + "step": range(0, 7, 3), +} + + +def test_fdb_read(fdb): + data = io.fdb_read(fdb, request) + assert len(data.coords["param"]) == 2 + assert len(data.coords["step"]) == 3 + assert isinstance(data.grib_template, eccodes.highlevel.message.GRIBMessage) + assert not np.any(np.isnan(data)) + + +def test_fdb_read_to_file(tmpdir, fdb): + io.fdb_read_to_file(fdb, request, f"{tmpdir}/test.grib") + data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test.grib")] + assert len(data) == 6 + + +@pytest.mark.parametrize( + "func", + [ + io.fdb_read, + io.fdb_read_to_file, + ], +) +def test_fdb_no_data(tmpdir, fdb, func): + no_data = request.copy() + no_data["date"] = "20240508" + if func == io.fdb_read_to_file: + func = partial(func, file_out=f"{tmpdir}/test.grib") + with pytest.raises(RuntimeError): + func(fdb, no_data) + + +def test_fdb_missing_values(fdb): + has_missing = request.copy() + has_missing.pop("levelist") + has_missing.update( + {"stream": "waef", "param": 140232, "step": 12, "levtype": "sfc"} + ) + data = io.fdb_read(fdb, has_missing) + assert np.any(np.isnan(data)) + assert not np.any(data == 9999) + + +def test_fdb_target(): + target = io.target_from_location("fdb:") + for msg in eccodes.FileReader(f"{DATA_DIR}/wind.grib"): + msg.set("type", "em") + target.write(msg) + target.flush() + req = request.copy() + req["type"] = "em" + data = list(eccodes.StreamReader(target.fdb.retrieve(req))) + assert len(data) == 6 + + +def test_file_target(tmpdir): + target = io.target_from_location(f"file:{tmpdir}/test.grib") + messages = [ + msg + for index, msg in enumerate(eccodes.FileReader(f"{DATA_DIR}/wind.grib")) + if index < 5 + ] + assert len(messages) == 5 + for msg in messages: + target.write(msg) + data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test.grib")] + assert len(data) == 5 + + +def test_fileset_target(tmpdir): + target = io.target_from_location(f"fileset:{tmpdir}" + "/test_{step}.grib") + for msg in eccodes.FileReader(f"{DATA_DIR}/2t_ens.grib"): + target.write(msg) + files = os.listdir(tmpdir) + assert set(x for x in files if x.endswith(".grib")) == set( + f"test_{x}.grib" for x in range(12, 37, 6) + ) + data = [msg for msg in eccodes.FileReader(f"{tmpdir}/test_12.grib")] + assert len(data) == 6 + + +def _write(target, message): + # Modify parameter to distinguish from data already in FDB + message.set("paramId", "228") + target.write(message) + target.flush() + + +@pytest.mark.parametrize( + "loc, out_loc, reqs", + [ + ["file:TMPDIR/test.grib", None, [{}]], + [ + "fileset:TMPDIR/test_{step}.grib", + "fileset:test", + [{"step": x} for x in range(12, 37, 6)], + ], + ], +) +def test_target_parallel(tmpdir, fdb, loc, out_loc, reqs): + loc = loc.replace("TMPDIR", str(tmpdir)) + if out_loc is None: + out_loc = loc + target = io.target_from_location(loc) + target.enable_parallel() + parallel.parallel_processing( + _write, + [ + (target, io.GribMetadata(x._handle)) + for x in eccodes.FileReader(f"{DATA_DIR}/2t_ens.grib") + ], + 4, + ) + + type_, path = loc.split(":") + num_messages = 0 + for req in reqs: + if type_ == "fileset": + req["location"] = path + reader = dataset.open_dataset({type_: {"test": req}}, out_loc) + num_messages += len(list(reader)) + assert num_messages == 30 diff --git a/pproc/tests/common/test_mars.py b/pproc/tests/common/test_mars.py new file mode 100644 index 00000000..a03cf38d --- /dev/null +++ b/pproc/tests/common/test_mars.py @@ -0,0 +1,51 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +from datetime import date, datetime + +import pytest + +from pproc.common import mars + + +@pytest.mark.parametrize( + "val, expected", + [ + pytest.param("abc", b"abc", id="str"), + pytest.param(b"def", b"def", id="bytes"), + pytest.param(123, b"123", id="int"), + pytest.param(date(2021, 12, 13), b"20211213", id="date"), + pytest.param(datetime(2022, 5, 8, 14, 36, 25), b"20220508", id="datetime"), + pytest.param(range(5), b"0/to/4", id="range1"), + pytest.param(range(2, 8), b"2/to/7", id="range2"), + pytest.param(range(1, 9, 3), b"1/to/7/by/3", id="range3"), + pytest.param(("u", "v", "z"), b"u/v/z", id="tuple"), + pytest.param([1, 3, 4, 9], b"1/3/4/9", id="list"), + ], +) +def test_val_to_mars(val, expected): + assert mars._val_to_mars(val) == expected + + +def test_to_mars(): + req = { + "class": "od", + "expver": "0001", + "stream": "enfo", + "date": datetime(2020, 10, 11), + "time": "0000", + "type": "pf", + "number": range(1, 51), + "step": [24, 36, 72], + "levtype": "pl", + "levelist": 500, + "param": (129, 130), + } + expected = b"retrieve,class=od,expver=0001,stream=enfo,date=20201011,time=0000,type=pf,number=1/to/50,step=24/36/72,levtype=pl,levelist=500,param=129/130" + assert mars.to_mars(b"retrieve", req) == expected diff --git a/pproc/tests/common/test_stepseq.py b/pproc/tests/common/test_stepseq.py new file mode 100644 index 00000000..51f7aa2e --- /dev/null +++ b/pproc/tests/common/test_stepseq.py @@ -0,0 +1,71 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import pytest +from datetime import datetime + +from pproc.common import stepseq + + +@pytest.mark.parametrize( + "date, start, end, interval, num_months, remaining", + [ + ["20241001", 12, 5160, 12, 7, 6], + ["20241001", 6, 5160, 6, 7, 12], + ["20241001", 0, 5160, 6, 7, 12], + ["20241002", 6, 5160, 6, 6, 16], + ["20241002", 6, 800, 6, 0, 0], + ], +) +def test_monthly(date, start, end, interval, num_months, remaining): + steps = list(range(start, end + 1, interval)) + step_ranges = [x for x in stepseq.stepseq_monthly(date, start, end, interval)] + assert len(step_ranges) == num_months + if num_months > 0: + assert len(steps[steps.index(step_ranges[-1][-1]) + 1 :]) == remaining + + +@pytest.mark.parametrize( + "start, end, width, interval, by, expected", + [ + [0, 0, 0, 1, 1, [range(0, 1)]], + [0, 120, 0, 24, 1, [range(x, x + 1) for x in range(0, 121, 24)]], + [ + 0, + 360, + 120, + 120, + 6, + [range(0, 121, 6), range(120, 241, 6), range(240, 361, 6)], + ], + ], +) +def test_ranges(start, end, width, interval, by, expected): + assert [ + x for x in stepseq.stepseq_ranges(start, end, width, interval, by) + ] == expected + + +@pytest.mark.parametrize( + "date, fcmonth, expected", + [ + ["20241001", 1, f"0-{31*24}"], + ["20241001", 7, f"{182*24}-{(182+30)*24}"], + ["20241002", 1, f"{30*24}-{(30+30)*24}"], + ], +) +def test_conversions(date, fcmonth, expected): + assert ( + stepseq.fcmonth_to_steprange(datetime.strptime(date, "%Y%m%d"), fcmonth) + == expected + ) + assert ( + stepseq.steprange_to_fcmonth(datetime.strptime(date, "%Y%m%d"), expected) + == fcmonth + ) diff --git a/pproc/tests/common/test_utils.py b/pproc/tests/common/test_utils.py index a0dc1e77..98ff7bfc 100644 --- a/pproc/tests/common/test_utils.py +++ b/pproc/tests/common/test_utils.py @@ -10,6 +10,32 @@ from pproc.common import utils +def test_dictprod(): + assert list(utils.dict_product({})) == [{}] + + assert list(utils.dict_product({"x": range(3), "empty": []})) == [] + + assert list(utils.dict_product({"foo": [1, 2, 3]})) == [ + {"foo": n} for n in [1, 2, 3] + ] + + dic = {"a": [5, 12], "b": range(3), "c": ("a", "b")} + assert list(utils.dict_product(dic)) == [ + {"a": 5, "b": 0, "c": "a"}, + {"a": 5, "b": 0, "c": "b"}, + {"a": 5, "b": 1, "c": "a"}, + {"a": 5, "b": 1, "c": "b"}, + {"a": 5, "b": 2, "c": "a"}, + {"a": 5, "b": 2, "c": "b"}, + {"a": 12, "b": 0, "c": "a"}, + {"a": 12, "b": 0, "c": "b"}, + {"a": 12, "b": 1, "c": "a"}, + {"a": 12, "b": 1, "c": "b"}, + {"a": 12, "b": 2, "c": "a"}, + {"a": 12, "b": 2, "c": "b"}, + ] + + def test_delayedmap(capsys): def myfunc(x): print(f"p {x}") diff --git a/pproc/tests/config/test_accum.py b/pproc/tests/config/test_accum.py index 209d06f9..699cac57 100644 --- a/pproc/tests/config/test_accum.py +++ b/pproc/tests/config/test_accum.py @@ -742,7 +742,7 @@ ], "name": { "type": "default", - "suffix": "_2", + "suffix": f"_2", "prefix": "", }, "metadata": { @@ -811,7 +811,7 @@ "name": { "type": "default", "prefix": "", - "suffix": "_0", + "suffix": f"_0", }, "metadata": {}, "sequential": True, diff --git a/pproc/tests/config/test_base.py b/pproc/tests/config/test_base.py index d32e9632..27307331 100644 --- a/pproc/tests/config/test_base.py +++ b/pproc/tests/config/test_base.py @@ -13,9 +13,9 @@ import pytest import yaml from conflator import Conflator -from ppcore.utils.dicts import deep_update from pproc.config.base import BaseConfig +from pproc.config.utils import deep_update @pytest.fixture(scope="function") diff --git a/pproc/tests/config/test_factory.py b/pproc/tests/config/test_factory.py index 5604f141..bbb1dd88 100644 --- a/pproc/tests/config/test_factory.py +++ b/pproc/tests/config/test_factory.py @@ -7,13 +7,12 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. +import os import pytest -from ppcore.utils.dicts import deep_update -from ppcore.utils.mars import extract_mars -from ppcore.schema.schema import Schema - +from pproc.schema.schema import Schema from pproc.config import types +from pproc.config.utils import deep_update, extract_mars, expand from pproc.config.factory import ConfigFactory from conftest import schema @@ -57,9 +56,8 @@ def default_config(name: str, param: str): "request": [ { **DEFAULT_REQUEST, - "stream": "oper", "param": param, - "type": "fc", + "type": "cf", }, { **DEFAULT_REQUEST, @@ -85,22 +83,20 @@ def default_config(name: str, param: str): }, "parameters": { "130_pl": { - "total_fields": 202, + "total_fields": 102, "dtype": "float64", "inputs": { "fc": { "request": [ { **DEFAULT_REQUEST, - "stream": "eefo", "type": "cf", "levelist": [250, 500], }, { **DEFAULT_REQUEST, - "stream": "eefo", "type": "pf", - "number": list(range(1, 101)), + "number": list(range(1, 51)), "levelist": [250, 500], }, ], @@ -112,15 +108,7 @@ def default_config(name: str, param: str): "windows": [ { "operation": "mean", - "metadata": { - "bitsPerValue": 16, - "legBaseDate": 0, - "legNumber": 0, - "numberIncludedInAverage": "{num_coords}:int", - "stepType": "avg", - "timeRangeIndicator": 3, - "type": "fcmean", - }, + "metadata": {"type": "fcmean"}, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -132,15 +120,7 @@ def default_config(name: str, param: str): }, { "operation": "standard_deviation", - "metadata": { - "bitsPerValue": 16, - "legBaseDate": 0, - "legNumber": 0, - "numberIncludedInAverage": "{num_coords}:int", - "stepType": "avg", - "timeRangeIndicator": 3, - "type": "fcstdev", - }, + "metadata": {"type": "fcstdev"}, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -152,15 +132,7 @@ def default_config(name: str, param: str): }, { "operation": "minimum", - "metadata": { - "bitsPerValue": 16, - "legBaseDate": 0, - "legNumber": 0, - "numberIncludedInAverage": "{num_coords}:int", - "stepType": "avg", - "timeRangeIndicator": 3, - "type": "fcmin", - }, + "metadata": {"type": "fcmin"}, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -172,15 +144,7 @@ def default_config(name: str, param: str): }, { "operation": "maximum", - "metadata": { - "bitsPerValue": 16, - "legBaseDate": 0, - "legNumber": 0, - "numberIncludedInAverage": "{num_coords}:int", - "stepType": "avg", - "timeRangeIndicator": 3, - "type": "fcmax", - }, + "metadata": {"type": "fcmax"}, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -215,14 +179,8 @@ def default_config(name: str, param: str): "dtype": "float64", "metadata": { "bitsPerValue": 16, - "legBaseDate": 20241001, - "legBaseTime": 0, - "legNumber": 1, - "localDefinitionNumber": 30, "numberOfForecastsInEnsemble": "{num_fields}:int", - "oceanAtmosphereCoupling": 2, "perturbationNumber": 0, - "stream": "enfo", }, "accumulations": { "levelist": {"coords": [[250], [500]]}, @@ -346,8 +304,7 @@ def default_config(name: str, param: str): { **DEFAULT_REQUEST, "expver": "9998", - "stream": "oper", - "type": "fc", + "type": "cf", "levelist": [250, 500], }, { @@ -361,22 +318,13 @@ def default_config(name: str, param: str): } }, "dtype": "float64", - "metadata": {"stream": "enfo"}, "accumulations": { "step": { "type": "legacywindow", "windows": [ { "operation": "mean", - "metadata": { - "bitsPerValue": 16, - "legBaseDate": 0, - "legNumber": 0, - "numberIncludedInAverage": "{num_coords}:int", - "stepType": "avg", - "timeRangeIndicator": 3, - "type": "fcmean", - }, + "metadata": {"type": "fcmean"}, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -388,15 +336,7 @@ def default_config(name: str, param: str): }, { "operation": "standard_deviation", - "metadata": { - "bitsPerValue": 16, - "legBaseDate": 0, - "legNumber": 0, - "numberIncludedInAverage": "{num_coords}:int", - "stepType": "avg", - "timeRangeIndicator": 3, - "type": "fcstdev", - }, + "metadata": {"type": "fcstdev"}, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -408,15 +348,7 @@ def default_config(name: str, param: str): }, { "operation": "minimum", - "metadata": { - "bitsPerValue": 16, - "legBaseDate": 0, - "legNumber": 0, - "numberIncludedInAverage": "{num_coords}:int", - "stepType": "avg", - "timeRangeIndicator": 3, - "type": "fcmin", - }, + "metadata": {"type": "fcmin"}, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -428,15 +360,7 @@ def default_config(name: str, param: str): }, { "operation": "maximum", - "metadata": { - "bitsPerValue": 16, - "legBaseDate": 0, - "legNumber": 0, - "numberIncludedInAverage": "{num_coords}:int", - "stepType": "avg", - "timeRangeIndicator": 3, - "type": "fcmax", - }, + "metadata": {"type": "fcmax"}, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -462,11 +386,10 @@ def default_config(name: str, param: str): [ { **DEFAULT_REQUEST, - "stream": "eefo", "levelist": [250, 500], "step": ["0-168", "24-192"], "type": ["fcmean", "fcstdev", "fcmin", "fcmax"], - "number": list(range(0, 101)), + "number": list(range(0, 51)), }, "130", ], @@ -509,7 +432,7 @@ def test_from_outputs(request, output_request, input_param): overrides, cfg_type, updates = TEST_CASES[request.node.callspec.id] config = ConfigFactory.from_outputs(test_schema, [output_request], **overrides) - assert type(config) is cfg_type + assert type(config) == cfg_type check = default_config(f"{input_param}_{output_request['levtype']}", input_param) deep_update(check, updates) assert config.model_dump(by_alias=True) == cfg_type(**check).model_dump( @@ -542,18 +465,16 @@ def test_from_outputs(request, output_request, input_param): [ { **DEFAULT_REQUEST, - "stream": "eefo", "levelist": [250, 500], "step": list(range(0, 193, 6)), "type": "cf", }, { **DEFAULT_REQUEST, - "stream": "eefo", "levelist": [250, 500], "step": list(range(0, 193, 6)), "type": "pf", - "number": list(range(1, 101)), + "number": list(range(1, 51)), }, ], { @@ -561,15 +482,43 @@ def test_from_outputs(request, output_request, input_param): "windows": [ { "operation": "mean", - "metadata": { - "bitsPerValue": 16, - "legBaseDate": 0, - "legNumber": 0, - "numberIncludedInAverage": "{num_coords}:int", - "stepType": "avg", - "timeRangeIndicator": 3, - "type": "fcmean", + "metadata": {"type": "fcmean"}, + "coords": [ + {"from": 12, "to": 168, "by": 12}, + {"from": 36, "to": 192, "by": 12}, + ], + "name": { + "type": "default", + "length": 168, + }, + }, + { + "operation": "standard_deviation", + "metadata": {"type": "fcstdev"}, + "coords": [ + {"from": 12, "to": 168, "by": 12}, + {"from": 36, "to": 192, "by": 12}, + ], + "name": { + "type": "default", + "length": 168, + }, + }, + { + "operation": "minimum", + "metadata": {"type": "fcmin"}, + "coords": [ + {"from": 12, "to": 168, "by": 12}, + {"from": 36, "to": 192, "by": 12}, + ], + "name": { + "type": "default", + "length": 168, }, + }, + { + "operation": "maximum", + "metadata": {"type": "fcmax"}, "coords": [ {"from": 12, "to": 168, "by": 12}, {"from": 36, "to": 192, "by": 12}, @@ -589,10 +538,9 @@ def test_from_outputs(request, output_request, input_param): [ { **DEFAULT_REQUEST, - "stream": "oper", "levelist": [250, 500], "step": list(range(0, 193, 6)), - "type": "fc", + "type": "cf", }, { **DEFAULT_REQUEST, @@ -683,7 +631,7 @@ def test_from_inputs( config = ConfigFactory.from_inputs( test_schema, entrypoint, input_request, **overrides ) - assert type(config) is cfg_type + assert type(config) == cfg_type param = input_request[0]["param"] levtype = input_request[0]["levtype"] check = default_config(f"{param}_{levtype}", param) @@ -717,10 +665,9 @@ def test_wind(): input_request = [ { **DEFAULT_REQUEST, - "stream": "oper", "levelist": [250, 500], "step": list(range(0, 193, 6)), - "type": "fc", + "type": "cf", "param": [165, 166], }, { @@ -748,7 +695,7 @@ def test_wind(): } for tp in ["em", "es"] ] - for param in [165, 166] + for param in [207, 165, 166] ], [], ), diff --git a/pproc/tests/config/test_io_models.py b/pproc/tests/config/test_io_models.py index f968bdbb..3fb4b494 100644 --- a/pproc/tests/config/test_io_models.py +++ b/pproc/tests/config/test_io_models.py @@ -150,7 +150,7 @@ def test_targets(tmpdir, config, cli, expected, target_type): with patch("sys.argv", ["", "-f", f"{tmpdir}/config.yaml"] + cli): cfg = Conflator(app_name="targets", model=targets_model).load() assert cfg.model_dump(by_alias=True) == expected - assert type(cfg.test.target) is target_type + assert type(cfg.test.target) == target_type @pytest.mark.parametrize( diff --git a/pproc/tests/config/test_log.py b/pproc/tests/config/test_log.py new file mode 100644 index 00000000..43343de3 --- /dev/null +++ b/pproc/tests/config/test_log.py @@ -0,0 +1,82 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import logging +from unittest.mock import patch + +import pytest +from conflator import Conflator +from pydantic import ValidationError + +from pproc.config.log import LoggingConfig + + +def test_logging_model_default(): + """Test that the logging configuration is applied after validation.""" + model = LoggingConfig() + assert model.level == "INFO" + + # Check logging level + assert logging.getLogger().getEffectiveLevel() == logging.INFO + + +def test_logging_app_default(): + """Test that the default values are correctly set.""" + + with patch("sys.argv", ["test_script.py"]): + conflator = Conflator("pproc", LoggingConfig, nested={}) + config = conflator.load() + + assert config.level == "INFO" + assert config.format == "%(asctime)s; %(name)s; %(levelname)s - %(message)s" + + # Check logging level + assert logging.getLogger().getEffectiveLevel() == logging.INFO + + +def test_logging_model_set(): + """Test that the logging configuration is applied after validation.""" + model = LoggingConfig(level="DEBUG") + assert model.level == "DEBUG" + + # Check logging level + assert logging.getLogger().getEffectiveLevel() == logging.DEBUG + + +def test_logging_model_env_var(monkeypatch): + """Test that environment variable overrides are applied.""" + + monkeypatch.setenv("PPROC_LOG", "WARNING") + with patch("sys.argv", ["test_script.py"]): + conflator = Conflator("pproc", LoggingConfig, nested={}) + config = conflator.load() + + assert config.level == "WARNING" + + # Check logging level + assert logging.getLogger().getEffectiveLevel() == logging.WARNING + + +def test_logging_model_cli_arg(): + """Test that CLI arguments override defaults.""" + + with patch("sys.argv", ["test_script.py"] + ["--log", "ERROR"]): + conflator = Conflator("pproc", LoggingConfig, nested={}) + config = conflator.load() + + assert config.level == "ERROR" + + # Check logging level + assert logging.getLogger().getEffectiveLevel() == logging.ERROR + + +def test_invalid_logging_level(): + """Test that invalid logging levels raise an error.""" + with pytest.raises(ValidationError): + LoggingConfig(level="INVALID") diff --git a/pproc/tests/config/test_param.py b/pproc/tests/config/test_param.py index 65b0bf1b..d15c3003 100644 --- a/pproc/tests/config/test_param.py +++ b/pproc/tests/config/test_param.py @@ -11,7 +11,7 @@ from pproc.config.param import ParamConfig from pproc.config.io import BaseInputModel -from ppcore.utils.mars import extract_mars +from pproc.config.utils import extract_mars base_config = { "name": "2t", diff --git a/pproc/tests/config/types/test_extreme.py b/pproc/tests/config/types/test_extreme.py index 65130477..b00565b6 100644 --- a/pproc/tests/config/types/test_extreme.py +++ b/pproc/tests/config/types/test_extreme.py @@ -1,7 +1,7 @@ import pytest from pproc.config import types -from ppcore.utils.requests import deep_update +from pproc.config.utils import deep_update BASE_OUTPUT = { "target": "fdb", diff --git a/pproc/tests/config/types/test_flightlevels.py b/pproc/tests/config/types/test_flightlevels.py index 3d8fe114..fc74d982 100644 --- a/pproc/tests/config/types/test_flightlevels.py +++ b/pproc/tests/config/types/test_flightlevels.py @@ -2,9 +2,8 @@ import pytest from contextlib import nullcontext -from ppcore.utils.dicts import deep_update - from pproc.config.types import FlightLevelsConfig +from pproc.config.utils import deep_update @pytest.mark.parametrize( @@ -47,14 +46,14 @@ { "stream": "oper", "type": "fc", - "param": "260290", + "param": 260290, "levtype": "ml", "levelist": list(range(1, 138)), }, { "stream": "enfo", "type": "pf", - "param": "260290", + "param": 260290, "levtype": "ml", "levelist": list(range(1, 138)), "number": [1, 2, 3], @@ -66,14 +65,14 @@ { "stream": "oper", "type": "fc", - "param": "152", + "param": 152, "levtype": "ml", "levelist": 1, }, { "stream": "enfo", "type": "pf", - "param": "152", + "param": 152, "levtype": "ml", "levelist": 1, "number": [1, 2, 3], @@ -92,7 +91,7 @@ "parameters": { "cat": { "inputs": { - "fc": {"request": {"param": "130"}}, + "fc": {"request": {"param": 130}}, } } } @@ -107,14 +106,14 @@ { "stream": "oper", "type": "fc", - "param": "260290", + "param": 260290, "levtype": "ml", "levelist": list(range(1, 138)), }, { "stream": "oper", "type": "fc", - "param": "130", + "param": 130, "levtype": "ml", "levelist": list(range(1, 138)), }, @@ -125,7 +124,7 @@ { "stream": "oper", "type": "fc", - "param": "152", + "param": 152, "levtype": "ml", "levelist": 1, }, @@ -164,7 +163,7 @@ def test_merge(configs, merged_or_error): "request": { "stream": "oper", "type": "fc", - "param": "260290", + "param": 260290, "levtype": "ml", "levelist": list(range(1, 138)), }, @@ -173,7 +172,7 @@ def test_merge(configs, merged_or_error): "request": { "stream": "oper", "type": "fc", - "param": "152", + "param": 152, "levtype": "ml", "levelist": 1, }, @@ -213,7 +212,7 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": ["260290"], + "param": [260290], "levtype": "ml", "levelist": list(range(1, 138)), }, @@ -222,7 +221,7 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": ["260290"], + "param": [260290], "levtype": "fl", "levelist": [110, 200, 300, 340, 380], "target": "fdb", @@ -234,14 +233,14 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": ["260290"], + "param": [260290], "levtype": "ml", "levelist": list(range(1, 138)), }, { "stream": "enfo", "type": "pf", - "param": ["260290"], + "param": [260290], "levtype": "ml", "levelist": list(range(1, 138)), "number": [1, 2, 3], @@ -251,7 +250,7 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": ["260290"], + "param": [260290], "levtype": "fl", "levelist": [110, 200, 300, 340, 380], "target": "fdb", @@ -259,7 +258,7 @@ def test_merge(configs, merged_or_error): { "stream": "enfo", "type": "pf", - "param": ["260290"], + "param": [260290], "levtype": "fl", "levelist": [110, 200, 300, 340, 380], "number": [1, 2, 3], @@ -272,14 +271,14 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": ["130", "260290"], + "param": [130, 260290], "levtype": "ml", "levelist": list(range(1, 138)), }, { "stream": "enfo", "type": "pf", - "param": ["130", "260290"], + "param": [130, 260290], "levtype": "ml", "levelist": list(range(1, 138)), "number": [1, 2, 3], @@ -289,7 +288,7 @@ def test_merge(configs, merged_or_error): { "stream": "oper", "type": "fc", - "param": ["130", "260290"], + "param": [130, 260290], "levtype": "fl", "levelist": [110, 200, 300, 340, 380], "target": "fdb", @@ -297,7 +296,7 @@ def test_merge(configs, merged_or_error): { "stream": "enfo", "type": "pf", - "param": ["130", "260290"], + "param": [130, 260290], "levtype": "fl", "levelist": [110, 200, 300, 340, 380], "number": [1, 2, 3], @@ -316,9 +315,7 @@ def test_outputs(inputs, expected): "inputs": { "fc": {"request": inputs}, "lnsp": { - "request": [ - {**x, "param": "152", "levelist": 1} for x in inputs - ] + "request": [{**x, "param": 152, "levelist": 1} for x in inputs] }, }, "num_inputs": 1, @@ -336,7 +333,7 @@ def test_outputs(inputs, expected): for param in inputs[0]["param"] ], [], - ) + [{**x, "param": "152", "levelist": 1, "source": "fdb"} for x in inputs] == list( + ) + [{**x, "param": 152, "levelist": 1, "source": "fdb"} for x in inputs] == list( config.in_mars(sources=["fdb"]) ) outputs = list(config.out_mars(targets=["fdb"])) @@ -350,14 +347,14 @@ def test_from_schema(): { "stream": "oper", "type": "fc", - "param": "260290", + "param": 260290, "levtype": "ml", "levelist": list(range(1, 138)), }, { "stream": "oper", "type": "fc", - "param": "152", + "param": 152, "levtype": "ml", "levelist": 1, }, @@ -374,7 +371,7 @@ def test_from_schema(): "request": { "stream": "oper", "type": "fc", - "param": "260290", + "param": 260290, "levtype": "ml", "levelist": list(range(1, 138)), }, @@ -383,7 +380,7 @@ def test_from_schema(): "request": { "stream": "oper", "type": "fc", - "param": "152", + "param": 152, "levtype": "ml", "levelist": 1, }, diff --git a/pproc/tests/conftest.py b/pproc/tests/conftest.py index 5440d71e..43c1046c 100644 --- a/pproc/tests/conftest.py +++ b/pproc/tests/conftest.py @@ -21,12 +21,13 @@ TEST_DIR = os.path.dirname(os.path.realpath(__file__)) DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "data") NEXUS = "https://sites.ecmwf.int/repository/pproc/test-data/test-data" -SCHEMA = os.path.join(TEST_DIR, "schema.yaml") +SCHEMA = os.path.join(TEST_DIR, "schema", "schema.yaml") def download_test_data( test_files: List[str], dir_url: str = NEXUS, local_dir: str = DATA_DIR ) -> List[str]: + local_files = [] for file in test_files: if not os.path.exists(local_dir): diff --git a/pproc/tests/ecpt/test_predictors.py b/pproc/tests/ecpt/test_predictors.py index f2c65bc6..9d7f3bc7 100644 --- a/pproc/tests/ecpt/test_predictors.py +++ b/pproc/tests/ecpt/test_predictors.py @@ -1,3 +1,4 @@ +import datetime import pytest import numpy as np diff --git a/pproc/tests/prob/test_prob_accumulation_manager.py b/pproc/tests/prob/test_prob_accumulation_manager.py index c5b8e7c7..dacaa70a 100644 --- a/pproc/tests/prob/test_prob_accumulation_manager.py +++ b/pproc/tests/prob/test_prob_accumulation_manager.py @@ -273,7 +273,7 @@ def test_create_threshold(config, expected, exp_coords): assert accum.name == name assert len(accum.dims) == 1 assert accum.dims[0].key == "step" - assert type(accum.dims[0].accumulation) is expected[name][0] + assert type(accum.dims[0].accumulation) == expected[name][0] assert acc_mgr._thresholds[name] == expected[name][1] assert set(acc_mgr.coords.keys()) == {"step"} assert acc_mgr.coords["step"] == exp_coords @@ -428,7 +428,7 @@ def test_create_anomaly(config, expected, exp_coords): assert accum.name == name assert len(accum.dims) == 1 assert accum.dims[0].key == "step" - assert type(accum.dims[0].accumulation) is expected[name][0] + assert type(accum.dims[0].accumulation) == expected[name][0] assert acc_mgr._thresholds[name] == expected[name][1] assert set(acc_mgr.coords.keys()) == {"step"} assert acc_mgr.coords["step"] == exp_coords diff --git a/pproc/tests/schema.yaml b/pproc/tests/schema/schema.yaml similarity index 66% rename from pproc/tests/schema.yaml rename to pproc/tests/schema/schema.yaml index ca1bfa52..cce4b3a4 100644 --- a/pproc/tests/schema.yaml +++ b/pproc/tests/schema/schema.yaml @@ -8,7 +8,7 @@ config: filter:param: "*": {} "10": - preprocessing: + preprocessing: - operation: reshape shape: 2 - operation: norm @@ -17,14 +17,12 @@ config: filter:type: taem/taes: {} cf/pf/fc/fcmean/fcstdev/fcmax/fcmin: - filter:levtype: - pl: - metadata_from_output: ["stream", "date"] - vod2uv: true - "121/122/123/228026/228027": + metadata_from_output: ["stream", "date"] + vod2uv: true + "121/122/228026/228027": filter:type: em/es/pb: - metadata: + metadata: timeRangeIndicator: 2 accumulations: step: @@ -33,16 +31,33 @@ config: type: default length: "{steplength}:int" "*": {} - "207": - filter:stream: - msmm: + "131068/131069": + filter:type: + ep: preprocessing: - operation: norm - "*": - forecast: - inputs: - request: - param: "{param}" + "132044": + filter:type: + efi/efic/sot: + preprocessing: + - operation: mask + select: {param: "228036"} + mask: [{param: "228035"}, "<=", 10] + "132059": + filter:type: + efi/efic/sot: + preprocessing: + - operation: mask + select: {param: "228035"} + mask: [{param: "228035"}, "<=", 10] + "132045": + filter:type: + efi/efic/sot: + preprocessing: + - operation: norm + "207/228249": + preprocessing: + - operation: norm "140249": filter:type: fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: @@ -71,7 +86,7 @@ config: step: deaccumulate: true taem/taes: {} - "260033/260053": + "260033/260053": preprocessing: - operation: sum metadata: @@ -89,82 +104,49 @@ config: timeRangeIndicator: 5 stepType: diff "234167": - metadata: + metadata: bitsPerValue: 24 "234228": preprocessing: - operation: scale value: 604800000 filter:type: - pf/cf/fc: - filter:levtype: - fl: - entrypoint: pproc-flight-levels - target_flight_levels: "{levelist}" - metadata: - edition: 2 - bitsPerValue: 16 - filter:type: - fc: + pf/cf/fc: + filter:param: + "261016/260242/260004/260005/261018/260255/261023": + entrypoint: pproc-thermal-indices + outputs: + indices: metadata: - productDefinitionTemplateNumber: 1 - typeOfGeneratingProcess: 4 - typeOfProcessedData: 3 - typeOfEnsembleForecast: 5 - perturbationNumber: 0 - numberOfForecastsInEnsemble: 51 # TODO: Remove in 50r2 when oper/fc encodes this correctly - localTablesVersion: 1 - deletePV: 1 - pf: + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + "261001/261002/261014/261015": + entrypoint: pproc-thermal-indices + outputs: + indices: metadata: - grib2LocalSectionNumber: 1 - typeOfEnsembleForecast: 6 - localTablesVersion: 1 - deletePV: 1 - accumulations: - step: {} - number: {} + edition: 2 + bitsPerValue: 16 + packingType: "grid_ccsds" + typeOfGeneratingProcess: 2 + accumulations: + step: + operation: difference "*": - filter:param: - "261016/260242/260004/260005/261018/260255/261023": - entrypoint: pproc-thermal-indices - outputs: - indices: - metadata: - edition: 2 - bitsPerValue: 16 - packingType: "grid_ccsds" - typeOfGeneratingProcess: 2 - "261001/261002/261014/261015": - entrypoint: pproc-thermal-indices - outputs: - indices: - metadata: - edition: 2 - bitsPerValue: 16 - packingType: "grid_ccsds" - typeOfGeneratingProcess: 2 + entrypoint: pproc-accumulate + filter:stream: + "enfh/enwh/eefh/weeh": accumulations: - step: - operation: difference - "*": - entrypoint: pproc-accumulate - filter:stream: - "enfh/enwh/eefh/weeh": - accumulations: - hdate: {} - "*": {} + hdate: {} + "*": {} em/es: entrypoint: pproc-ensms filter:stream: enfo/waef/eefo/weef: dtype: float64 - metadata: - localDefinitionNumber: 30 - oceanAtmosphereCoupling: 2 - legBaseDate: "{date}:int" - legBaseTime: "{time}:int" - legNumber: 1 + metadata: perturbationNumber: 0 bitsPerValue: 16 numberOfForecastsInEnsemble: "{num_fields}:int" @@ -206,6 +188,12 @@ config: dataDate: "{date}:int" accumulations: step: {} + hdate: + operation: aggregation + metadata: + legBaseDate: "{end_coord}:int" + climateDateFrom: "{start_coord}:int" + climateDateTo: "{end_coord}:int" filter:param: "129": metadata: @@ -221,50 +209,18 @@ config: type: default length: "{steplength}:int" filter:param: - "132044": - eps: 1e-4 - preprocessing: - - operation: mask - select: {param: "228036"} - mask: [{param: "228035"}, "<=", 10] - accumulations: - step: - operation: maximum - metadata: - typeOfStatisticalProcessing: 1 - edition: 1 - bitsPerValue: 12 - indicatorOfTypeOfLevel: 1 - localDefinitionNumber: 19 - "132059": + 132044/132059: eps: 1e-4 - preprocessing: - - operation: mask - select: {param: "228035"} - mask: [{param: "228035"}, "<=", 10] accumulations: step: operation: maximum - metadata: - typeOfStatisticalProcessing: 1 + metadata: + typeOfStatisticalProcessing: 1 edition: 1 bitsPerValue: 12 indicatorOfTypeOfLevel: 1 localDefinitionNumber: 19 - "132045": - eps: -1e-4 - preprocessing: - - operation: norm - accumulations: - step: - operation: mean - metadata: - edition: 1 - localDefinitionNumber: 19 - bitsPerValue: 12 - timeRangeIndicator: 3 - stepType: avg - 132165/132167: + 132045/132165/132167: eps: -1e-4 accumulations: step: @@ -275,7 +231,7 @@ config: bitsPerValue: 12 timeRangeIndicator: 3 stepType: avg - 132049/132201: + 132049/132201/132216: eps: -1e-4 accumulations: step: @@ -284,19 +240,6 @@ config: edition: 1 localDefinitionNumber: 19 bitsPerValue: 12 - "132216": - eps: 1e-4 - preprocessing: - - operation: mask - select: {param: "140229"} - mask: [{param: "140229"}, "<=", 0.1] - accumulations: - step: - operation: maximum - metadata: - edition: 1 - localDefinitionNumber: 19 - bitsPerValue: 12 "132144": eps: 1e-4 accumulations: @@ -331,26 +274,59 @@ config: filter:stream: "*": {} "eefo": - preprocessing: + preprocessing: - operation: scale value: 604800000 ep: entrypoint: pproc-probabilities dtype: float64 - filter:steptype: - instantaneous: + accumulations: + step: + type: legacywindow + name: + type: default + length: "{steplength}:int" + filter:param: + "131060": accumulations: step: - type: legacywindow - range: + operation: difference + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + timeRangeIndicator: 5 + stepType: diff + threshold: + comparison: ">=" + value: 0.001 + local_scale_factor: 3 + "131061": accumulations: step: - type: legacywindow - name: - type: default - length: "{steplength}:int" - filter:param: - "131060/131061/131062/131063/131064": + operation: difference + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + timeRangeIndicator: 5 + stepType: diff + threshold: + comparison: ">=" + value: 0.005 + local_scale_factor: 3 + "131062": + accumulations: + step: + operation: difference + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + timeRangeIndicator: 5 + stepType: diff + threshold: + comparison: ">=" + value: 0.01 + local_scale_factor: 3 + "131063": accumulations: step: operation: difference @@ -358,8 +334,32 @@ config: localDefinitionNumber: 5 bitsPerValue: 8 timeRangeIndicator: 5 - stepType: diff - "131098/131099/131085": + stepType: diff + threshold: + comparison: ">=" + value: 0.02 + local_scale_factor: 3 + "131098": + accumulations: + step: + operation: difference + metadata: + localDefinitionNumber: 5 + stepType: "accum" + stepRange: "0-0" + edition: 2 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 12 + packingType: "grid_ccsds" + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 0.025 + local_scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131099": accumulations: step: operation: difference @@ -373,7 +373,46 @@ config: timeIncrement: 12 packingType: "grid_ccsds" bitsPerValue: 8 - "131065/131066/131067": + threshold: + comparison: ">=" + value: 0.05 + local_scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131085": + accumulations: + step: + operation: difference + metadata: + localDefinitionNumber: 5 + stepType: "accum" + stepRange: "0-0" + edition: 2 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + timeIncrement: 12 + packingType: "grid_ccsds" + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 0.1 + local_scale_factor: 3 + metadata: + scaleFactorOfLowerLimit: 0 + "131064": + accumulations: + step: + operation: difference + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + timeRangeIndicator: 5 + stepType: diff + threshold: + comparison: '<' + value: 0.0001 + local_scale_factor: 4 + "131065": accumulations: step: operation: difference_rate @@ -382,32 +421,91 @@ config: localDefinitionNumber: 5 bitsPerValue: 8 timeRangeIndicator: 5 - stepType: diff - "131068/131069": - preprocessing: - - operation: norm + stepType: diff + threshold: + comparison: '<' + value: 0.001 + local_scale_factor: 4 + "131066": accumulations: step: - operation: maximum + operation: difference_rate + factor: 0.041666666666666664 metadata: localDefinitionNumber: 5 bitsPerValue: 8 - "131070/131071/131072/131074/131075/131076/131077/131078/131079/131080/131081": + timeRangeIndicator: 5 + stepType: diff + threshold: + comparison: '>=' + value: 0.003 + local_scale_factor: 4 + "131067": accumulations: + step: + operation: difference_rate + factor: 0.041666666666666664 + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + timeRangeIndicator: 5 + stepType: diff + threshold: + comparison: '>=' + value: 0.005 + local_scale_factor: 4 + "131068": + accumulations: step: operation: maximum metadata: localDefinitionNumber: 5 bitsPerValue: 8 - "131073": - accumulations: + threshold: + comparison: ">=" + value: 10 + "131069": + accumulations: step: - operation: minimum + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 15 + "131070": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 15 + "131071": + accumulations: + step: + operation: maximum metadata: localDefinitionNumber: 5 bitsPerValue: 8 + threshold: + comparison: ">=" + value: 20 + "131072": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 25 "131100": - accumulations: + accumulations: step: operation: maximum metadata: @@ -420,266 +518,283 @@ config: typeOfTimeIncrement: 2 packingType: "grid_ccsds" bitsPerValue: 8 - 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: - config: anomaly - filter:param: - "131020/131021": - accumulations: - step: - operation: "mean" - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 - "131022/131023": - accumulations: - step: - operation: minimum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 - "131024/131025": - accumulations: - step: - operation: maximum - metadata: - localDefinitionNumber: 5 - bitsPerValue: 24 - "133093/133094/133095": - accumulations: - step: - operation: maximum - std_anomaly: true - metadata: - localDefinitionNumber: 30 - edition: 2 - productDefinitionTemplateNumber: 9 - oceanAtmosphereCoupling: 2 - legBaseDate: "{date}:int" - legBaseTime: "{time}:int" - legNumber: 1 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: "grid_ccsds" - bitsPerValue: 24 - "133096/133097/133098": - accumulations: - step: - operation: minimum - std_anomaly: true - metadata: - localDefinitionNumber: 30 - edition: 2 - productDefinitionTemplateNumber: 9 - oceanAtmosphereCoupling: 2 - legBaseDate: "{date}:int" - legBaseTime: "{time}:int" - legNumber: 1 - typeOfGeneratingProcess: 5 - indicatorOfUnitForTimeIncrement: 1 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: "grid_ccsds" - bitsPerValue: 24 - "260290": - metadata: - edition: 2 - productDefinitionTemplateNumber: 5 - typeOfGeneratingProcess: 5 - filter:selection: - "default": - filter:param: - "131060": - threshold: - comparison: ">=" - value: 0.001 - scale_factor: 3 - "131061": - threshold: - comparison: ">=" - value: 0.005 - scale_factor: 3 - "131062": - threshold: - comparison: ">=" - value: 0.01 - scale_factor: 3 - "131063": - threshold: - comparison: ">=" - value: 0.02 - scale_factor: 3 - "131098": - threshold: - comparison: ">=" - value: 0.025 - scale_factor: 3 - metadata: - scaleFactorOfLowerLimit: 0 - "131099": - threshold: - comparison: ">=" - value: 0.05 - scale_factor: 3 - metadata: - scaleFactorOfLowerLimit: 0 - "131085": - threshold: - comparison: ">=" - value: 0.1 - scale_factor: 3 - metadata: - scaleFactorOfLowerLimit: 0 - "131064": - threshold: - comparison: '<' - value: 0.0001 - scale_factor: 4 - "131065": - threshold: - comparison: '<' - value: 0.001 - scale_factor: 4 - "131066": - threshold: - comparison: '>=' - value: 0.003 - scale_factor: 4 - "131067": - threshold: - comparison: '>=' - value: 0.005 - scale_factor: 4 - "131068": - threshold: - comparison: ">=" - value: 10 - "131069": - threshold: - comparison: ">=" - value: 15 - "131070": - threshold: - comparison: ">=" - value: 15 - "131071": - threshold: - comparison: ">=" - value: 20 - "131072": - threshold: - comparison: ">=" - value: 25 - "131100": - threshold: - comparison: ">=" - value: 10 - "131074": - threshold: - comparison: ">=" - value: 2 - "131075": - threshold: - comparison: ">=" - value: 4 - "131076": - threshold: - comparison: ">=" - value: 6 - "131077": - threshold: - comparison: ">=" - value: 8 - "131078": - threshold: - comparison: ">=" - value: 8 - "131079": - threshold: - comparison: ">=" - value: 10 - "131080": - threshold: - comparison: ">=" - value: 12 - "131081": - threshold: - comparison: ">=" - value: 15 - "131073": - threshold: - comparison: "<=" - value: 273.15 - scale_factor: 2 - "131020": - threshold: - comparison: "<" - value: -2 - "131021": - threshold: - comparison: ">=" - value: 2 - "131022": - threshold: - comparison: "<" - value: -8 - "131023": - threshold: - comparison: "<" - value: -4 - "131024": - threshold: - comparison: ">" - value: 4 - "131025": - threshold: - comparison: ">" - value: 8 - "133093": - threshold: - comparison: '>' - value: 1 - "133094": - threshold: - comparison: '>' - value: 1.5 - scale_factor: 1 - metadata: - scaleFactorOfLowerLimit: 1 - "133095": - threshold: - comparison: '>' - value: 2 - "133096": - threshold: - comparison: '<' - value: -1 - limit_type: lower - "133097": - threshold: - comparison: '<' - value: -1.5 - scale_factor: 1 - limit_type: lower - metadata: - scaleFactorOfLowerLimit: 1 - "133098": - threshold: - comparison: '<' - value: -2 - limit_type: lower - "eccharts": - filter:param: - "131060": - threshold: - comparison: ">=" - value: "{threshold}:float" - scale_factor: 3 - "260290": - threshold: "{threshold}" + threshold: + comparison: ">=" + value: 10 + "131074": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 2 + "131075": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 4 + "131076": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 6 + "131077": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 8 + "131078": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 8 + "131079": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 10 + "131080": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 12 + "131081": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: ">=" + value: 15 + "131073": + accumulations: + step: + operation: minimum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + threshold: + comparison: "<=" + value: 273.15 + local_scale_factor: 2 + "131020": + accumulations: + step: + operation: "mean" + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + threshold: + comparison: "<" + value: -2 + "131021": + accumulations: + step: + operation: "mean" + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + threshold: + comparison: ">=" + value: 2 + "131022": + accumulations: + step: + operation: minimum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + threshold: + comparison: "<" + value: -8 + "131023": + accumulations: + step: + operation: minimum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + threshold: + comparison: "<" + value: -4 + "131024": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + threshold: + comparison: ">" + value: 4 + "131025": + accumulations: + step: + operation: maximum + metadata: + localDefinitionNumber: 5 + bitsPerValue: 24 + threshold: + comparison: ">" + value: 8 + "133093": + accumulations: + step: + operation: maximum + std_anomaly: true + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 + threshold: + comparison: '>' + value: 1 + "133094": + accumulations: + step: + operation: maximum + std_anomaly: true + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 + threshold: + comparison: '>' + value: 1.5 + local_scale_factor: 1 + metadata: + scaleFactorOfLowerLimit: 1 + "133095": + accumulations: + step: + operation: maximum + std_anomaly: true + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 + threshold: + comparison: '>' + value: 2 + "133096": + accumulations: + step: + operation: minimum + std_anomaly: true + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 + threshold: + comparison: '<' + value: -1 + limit_type: lower + "133097": + accumulations: + step: + operation: minimum + std_anomaly: true + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 + threshold: + comparison: '<' + value: -1.5 + local_scale_factor: 1 + limit_type: lower + metadata: + scaleFactorOfLowerLimit: 1 + "133098": + accumulations: + step: + operation: minimum + std_anomaly: true + metadata: + localDefinitionNumber: 30 + edition: 2 + productDefinitionTemplateNumber: 9 + typeOfGeneratingProcess: 5 + indicatorOfUnitForTimeIncrement: 1 + paramId: 0 + timeIncrement: 12 + typeOfStatisticalProcessing: 10 + packingType: "grid_ccsds" + bitsPerValue: 24 + threshold: + comparison: '<' + value: -2 + limit_type: lower fcmean: filter:param: 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: @@ -687,7 +802,7 @@ config: eefo: entrypoint: pproc-anomaly dtype: float64 - metadata: + metadata: bitsPerValue: 24 accumulations: step: @@ -698,16 +813,14 @@ config: metadata: timeRangeIndicator: 3 stepType: avg - clim: + clim: accumulations: - step: {} - levelist: {} date: operation: mean "*": dtype: float64 filter:stream: - enfo/waef/eefo/weef: + enfo/waef/eefo/weef: entrypoint: pproc-accumulate accumulations: step: @@ -717,34 +830,21 @@ config: length: "{steplength}:int" operation: mean metadata: - bitsPerValue: 16 - legBaseDate: 0 - legNumber: 0 - stepType: avg - type: fcmean + type: fcmean filter:param: - "*": - accumulations: - step: - metadata: - timeRangeIndicator: 3 - numberIncludedInAverage: "{num_coords}:int" + "*": {} "201": metadata_from_output: ["stream", "date"] accumulations: step: metadata: paramId: 201 - timeRangeIndicator: 3 - numberIncludedInAverage: "{num_coords}:int" "202": metadata_from_output: ["stream", "date"] accumulations: step: metadata: paramId: 202 - timeRangeIndicator: 3 - numberIncludedInAverage: "{num_coords}:int" "235117": metadata_from_output: ["stream", "date"] accumulations: @@ -759,10 +859,10 @@ config: typeOfStatisticalProcessing: 0 indicatorOfUnitForTimeIncrement: 1 timeIncrement: 6 - "enfh/enwh/eefh/weeh": + "enfh/enwh/eefh/weeh": entrypoint: pproc-accumulate - filter:selection: - mclimate: + filter:selection: + mclimate: dtype: float32 accumulations: step: @@ -770,24 +870,11 @@ config: name: type: default length: "{steplength}:int" - levelist: {} hdate: {} filter:param: - "140229": - preprocessing: - - operation: mask - select: {param: "140229"} - mask: [{param: "140229"}, "<=", 0.1] - accumulations: - step: - metadata: - bitsPerValue: 12 - type: fcmean - timeRangeIndicator: 2 - stepType: max - "123": + "123/140229": vmin: 0. - accumulations: + accumulations: step: metadata: bitsPerValue: 12 @@ -805,7 +892,7 @@ config: "162071": preprocessing: - operation: norm - accumulations: + accumulations: step: metadata: edition: 1 @@ -824,7 +911,7 @@ config: timeRangeIndicator: 3 stepType: avg "167": - accumulations: + accumulations: step: metadata: bitsPerValue: 12 @@ -834,14 +921,14 @@ config: "228/144": vmin: 0. accumulations: - step: + step: metadata: bitsPerValue: 12 type: fcmean timeRangeIndicator: 5 stepType: diff "121": - accumulations: + accumulations: step: metadata: bitsPerValue: 12 @@ -849,7 +936,7 @@ config: timeRangeIndicator: 2 stepType: max "122": - accumulations: + accumulations: step: metadata: bitsPerValue: 12 @@ -859,7 +946,7 @@ config: vmin: 0. preprocessing: - operation: norm - accumulations: + accumulations: step: metadata: bitsPerValue: 12 @@ -875,7 +962,7 @@ config: accumulations: step: metadata: - typeOfStatisticalProcessing: 1 + typeOfStatisticalProcessing: 1 edition: 1 bitsPerValue: 12 indicatorOfTypeOfLevel: 1 @@ -891,7 +978,7 @@ config: accumulations: step: metadata: - typeOfStatisticalProcessing: 1 + typeOfStatisticalProcessing: 1 edition: 1 bitsPerValue: 12 indicatorOfTypeOfLevel: 1 @@ -906,37 +993,38 @@ config: step: operation: difference metadata: - numberIncludedInAverage: "{num_coords}:int" + numberIncludedInAverage: "{num_coords}:int" "123/140229/121/228044/59": accumulations: step: - operation: maximum + operation: maximum metadata: - numberIncludedInAverage: "{num_coords}:int" + numberIncludedInAverage: "{num_coords}:int" "122": accumulations: step: - operation: minimum + operation: minimum metadata: - numberIncludedInAverage: "{num_coords}:int" + numberIncludedInAverage: "{num_coords}:int" "164/167/162071/207": accumulations: step: - operation: mean + operation: mean metadata: - numberIncludedInAverage: "{num_coords}:int" + numberIncludedInAverage: "{num_coords}:int" "140249": accumulations: step: operation: aggregation metadata: - numberIncludedInAverage: "{num_coords}:int" + numberIncludedInAverage: "{num_coords}:int" "168": - accumulations: + accumulations: step: operation: aggregation filter:param: "228": + metadata_from_output: ["stream", "date"] preprocessing: - operation: scale value: 604800000 @@ -944,7 +1032,6 @@ config: "*": accumulations: hdate: {} - levelist: {} step: type: legacywindow operation: mean @@ -952,11 +1039,7 @@ config: type: default length: "{steplength}:int" metadata: - bitsPerValue: 16 - legBaseDate: 0 - legNumber: 0 - stepType: avg - type: fcmean + type: fcmean filter:param: "*": accumulations: @@ -992,9 +1075,9 @@ config: parameterCategory: 7 parameterNumber: 6 typeOfFirstFixedSurface: 17 - typeOfStatisticalProcessing: 0 + typeOfStatisticalProcessing: 0 indicatorOfUnitForTimeIncrement: 1 - timeIncrement: 6 + timeIncrement: 6 msmm/swmm: entrypoint: pproc-monthly-stats accumulations: @@ -1018,7 +1101,6 @@ config: hdate: {} "*": {} accumulations: - levelist: {} step: type: legacywindow operation: standard_deviation @@ -1027,35 +1109,20 @@ config: length: "{steplength}:int" metadata: type: fcstdev - bitsPerValue: 16 - legBaseDate: 0 - legNumber: 0 filter:param: - "*": - accumulations: - step: - metadata: - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" + "*": {} "201": metadata_from_output: ["stream", "date"] accumulations: step: metadata: paramId: 201 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" "202": metadata_from_output: ["stream", "date"] accumulations: step: metadata: paramId: 202 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" "239117": metadata_from_output: ["stream", "date"] accumulations: @@ -1094,7 +1161,6 @@ config: hdate: {} "*": {} accumulations: - levelist: {} step: type: legacywindow operation: minimum @@ -1103,35 +1169,20 @@ config: length: "{steplength}:int" metadata: type: fcmin - bitsPerValue: 16 - legBaseDate: 0 - legNumber: 0 filter:param: - "*": - accumulations: - step: - metadata: - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" + "*": {} "201": metadata_from_output: ["stream", "date"] accumulations: step: metadata: paramId: 201 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" "202": metadata_from_output: ["stream", "date"] accumulations: step: metadata: paramId: 202 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" "238117": metadata_from_output: ["stream", "date"] accumulations: @@ -1170,7 +1221,6 @@ config: hdate: {} "*": {} accumulations: - levelist: {} step: type: legacywindow operation: maximum @@ -1179,35 +1229,20 @@ config: length: "{steplength}:int" metadata: type: fcmax - bitsPerValue: 16 - legBaseDate: 0 - legNumber: 0 filter:param: - "*": - accumulations: - step: - metadata: - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" + "*": {} "201": metadata_from_output: ["stream", "date"] accumulations: step: metadata: paramId: 201 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" "202": metadata_from_output: ["stream", "date"] accumulations: step: metadata: paramId: 202 - timeRangeIndicator: 3 - stepType: avg - numberIncludedInAverage: "{num_coords}:int" "237117": metadata_from_output: ["stream", "date"] accumulations: @@ -1239,7 +1274,7 @@ config: entrypoint: pproc-quantiles filter:stream: enfo/waef: - metadata: + metadata: localDefinitionNumber: 30 "*": {} taem/taes: @@ -1249,7 +1284,7 @@ config: 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: entrypoint: pproc-anomaly dtype: float64 - metadata: + metadata: bitsPerValue: 24 accumulations: step: @@ -1260,7 +1295,7 @@ config: metadata: timeRangeIndicator: 3 stepType: avg - clim: + clim: accumulations: date: operation: mean @@ -1290,16 +1325,16 @@ config: entrypoint: pproc-ensms dtype: float64 outputs: - default: + mean: metadata: edition: 2 productDefinitionTemplateNumber: 12 - mean: - metadata: derivedForecast: 0 type: taem std: metadata: + edition: 2 + productDefinitionTemplateNumber: 12 derivedForecast: 4 type: taes metadata: @@ -1309,14 +1344,14 @@ config: timeIncrement: 6 bitsPerValue: 16 packingType: "grid_ccsds" - "*": + "*": entrypoint: pproc-ensms - outputs: - mean: + outputs: + mean: metadata: type: taem std: - metadata: + metadata: type: taes dtype: float64 metadata: @@ -1329,7 +1364,6 @@ config: dtype: float64 accumulations: step: {} - levelist: {} hdate: operation: aggregation metadata: @@ -1338,15 +1372,15 @@ config: filter:param: "235117": outputs: - default: + mean: metadata: edition: 2 productDefinitionTemplateNumber: 11 - mean: - metadata: type: taem std: metadata: + edition: 2 + productDefinitionTemplateNumber: 11 type: taes metadata: perturbationNumber: 0 @@ -1358,12 +1392,12 @@ config: bitsPerValue: 16 packingType: "grid_ccsds" "*": - outputs: - mean: + outputs: + mean: metadata: type: taem std: - metadata: + metadata: type: taes metadata: perturbationNumber: 0 @@ -1378,7 +1412,7 @@ config: entrypoint: pproc-quantiles total_fields: 220 outputs: - quantiles: + default: metadata: localDefinitionNumber: 19 type: cd @@ -1391,11 +1425,6 @@ config: filter:param: "140249": entrypoint: pproc-histogram - outputs: - histogram: - metadata: - localDefinitionNumber: 19 - type: cd total_fields: 880 bins: [-22.5, 22.5, 67.5, 112.5, 157.5, 202.5, 247.5, 292.5, 337.5] mod: 360. @@ -1408,13 +1437,6 @@ config: date: operation: "sum" "*": - filter:param: - "140200": # TODO: Remove after 50r1 - preprocessing: - - operation: mask - select: {param: "229.140"} - mask: [{param: "229.140"}, "<=", 0.1] - "*": {} accumulations: date: operation: "aggregation" @@ -1426,33 +1448,6 @@ config: metadata: numberOfDaysInClimateSamplingWindow: 7 pfc: - entrypoint: pproc-quantiles - outputs: - quantiles: - metadata: - edition: 2 - productDefinitionTemplateNumber: 90 - type: pfc - typeOfGeneratingProcess: 13 - typeOfPostProcessing: 206 - filter:class: - od: - outputs: - quantiles: - metadata: - typeOfProcessedData: 5 - accumulations: - step: {} - number: - operation: aggregation - ea: - outputs: - quantiles: - metadata: - typeOfProcessedData: 1 - total_fields: 100 - gwt: - metadata_from_output: ["param", "date"] entrypoint: pproc-ecpoint outputs: default: @@ -1460,418 +1455,99 @@ config: edition: 2 bitsPerValue: 24 generatingProcessIdentifier: 3 - bias_corrected: + bs: metadata: type: gbf - weather_types: - metadata: + wt: + metadata: type: gwt - filter:class: - od: - outputs: - bias_corrected: - metadata: - numberOfForecastsInEnsemble: 51 # TODO: Remove in 50r2 when oper/fc encodes this correctly - weather_types: - metadata: - numberOfForecastsInEnsemble: 51 - members: - metadata: - grib2LocalSectionNumber: 1 - type: fcmean - filter:stream: - oper: - outputs: - members: - metadata: - stream: enfo - enfo: {} - filter:param: - "228": - predictant: tp - min_predictant: 0.04 - scale_outputs: 0.001 - interp_keys: - legendre-loader: "shmem" - matrix-loader: "file-io" - interpolation: grid-box-average + perc: + metadata: + type: pfc + quantiles: [0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.4, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.6, 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.7, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.8, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99] + predictant: tp + min_predictant: 0.04 + scale_outputs: 0.001 + interp_keys: + interpolation: grid-box-average + outputs: + default: + metadata: + paramId: 228 + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + type: legacywindow + operation: difference + name: + type: default + length: "{steplength}:int" + metadata: + stepType: accum + filter:steplength: + "6": + num_inputs: 7 + predictors: ["cp_ratio", "tp", "cdir", "local_solar_time", "sdfor", "ws", "mucape"] + dependencies: + wind: + vod2uv: true + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + cp: preprocessing: - - operation: scale - value: 1000 + - operation: scale + value: 1000 accumulations: step: - type: legacywindow operation: difference - name: - type: default - length: "{steplength}:int" - metadata: - stepType: accum - filter:steplength: - "6": - num_inputs: 7 - predictors: ["cp_ratio", "tp", "mxcape6", "2t", "local_solar_time", "ws", "cdir"] - dependencies: - wind: - vod2uv: true - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - cp: - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - operation: difference - cdir: - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - operation: difference - cape: - accumulations: - step: - type: legacywindow - operation: maximum - 2t: - preprocessing: - - operation: expression - expr: t2_k - d2_k - expr_data: - t2_k: - param: '167' - d2_k: - param: '168' - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - "12": - num_inputs: 7 - predictors: ["cp_ratio", "tp", "mxcape6", "2t", "ws", "cdir"] - dependencies: - wind: - vod2uv: true - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - cp: - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - operation: difference - cdir: - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - operation: difference - cape: - accumulations: - step: - type: legacywindow - operation: maximum - 2t: - preprocessing: - - operation: expression - expr: t2_k - d2_k - expr_data: - t2_k: - param: '167' - d2_k: - param: '168' - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - "24": - num_inputs: 7 - predictors: ["cp_ratio", "tp", "mxcape6", "2t", "ws", "cdir"] - dependencies: - wind: - vod2uv: true - accumulations: - step: - operation: weighted_mean - weights: [0.25, 0.5, 0.25] - cp: - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - operation: difference - cdir: - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - operation: difference - cape: - accumulations: - step: - type: legacywindow - operation: maximum - 2t: - preprocessing: - - operation: expression - expr: t2_k - d2_k - expr_data: - t2_k: - param: '167' - d2_k: - param: '168' - accumulations: - step: - operation: weighted_mean - weights: [0.125, 0.25, 0.25, 0.25, 0.125] - ea: - outputs: - default: - metadata: - productionStatusOfProcessedData: 3 - typeOfTimeIncrement: 1 - bias_corrected: - metadata: - productDefinitionTemplateNumber: 72 - weather_types: - metadata: - productDefinitionTemplateNumber: 72 - filter:param: - "228": - predictant: tp - min_predictant: 0.04 - scale_outputs: 0.001 + cdir: preprocessing: - - operation: scale - value: 1000 + - operation: scale + value: 0.00001157407 accumulations: step: - type: legacywindow - operation: sum - name: - type: default - length: "{steplength}:int" - metadata: - stepType: accum - filter:steplength: - "12/24": - num_inputs: 8 - predictors: ["cp_ratio", "lsm", "sdfor", "tp", "ws", "cape", "cdir", "2r"] - dependencies: - wind: - preprocessing: - actions: - - operation: norm - output: - paramId: 10 - accumulations: - step: - type: legacywindow - operation: mean - cp: - preprocessing: - - operation: scale - value: 1000 - accumulations: - step: - type: legacywindow - operation: sum - cdir: - preprocessing: - - operation: scale - value: 0.00001157407 - accumulations: - step: - type: legacywindow - operation: sum - cape: - accumulations: - step: - type: legacywindow - operation: maximum - r2: - preprocessing: - actions: - - operation: expression - expr: (100 * (((112 - (0.1 * (t2_k - 273.17)) + ( d2_k - 273.15)) / (112 + (0.9 * (t2_k - 273.17)))) ** 8)) + 0.5 - expr_data: - t2_k: - param: '167.128' - d2_k: - param: '168.128' - dtype: "int64" - output: - edition: 2 - paramId: 260242 - accumulations: - step: - type: legacywindow - operation: maximum - sdfor: - accumulations: null - lsm: - accumulations: null - "201": - predictant: mx2t - min_predictant: null - scale_outputs: null + operation: difference + cape: accumulations: step: - type: legacywindow - operation: maximum - name: - type: default - length: "{steplength}:int" - metadata: - stepType: max - filter:steplength: - "24": - num_inputs: 11 - predictors: - - lsm - - sdfor - - vegdiff - - cdir - - mx2t - - tp - - {expr: "((sd * 1000)/rsn)*100", expr_data: {sd: {param: sd}, rsn: {param: rsn}}} - - rsn - - {expr: "swv * 1000", expr_data: {swv: {param: swvl1}}} - - 100si - dependencies: - tp: - accumulations: - step: - type: legacywindow - operation: filter - filter_op: max - filter_index: -1 - preprocessing: - actions: - - operation: scale - value: 1000 - - operation: reshape - shape: 1 - filtered: - accumulations: - step: - operation: filter - filter_op: max - filter_index: -1 - neighbours: [-1] - neighbours_op: mean - preprocessing: - actions: - - operation: reshape - shape: 1 - cdir: - preprocessing: - actions: - - operation: scale - value: 1.157407e-05 - accumulations: - step: - type: legacywindow - operation: sum - sdfor: - accumulations: null - lsm: - accumulations: null - urbanfrac: - accumulations: null - "202": - predictant: mn2t - min_predictant: null - scale_outputs: null + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + sdfor: + accumulations: + step: {} + "12/24": + num_inputs: 6 + predictors: ["cp_ratio", "tp", "ws", "mxcape6", "cdir"] + dependencies: + wind: + vod2uv: true + accumulations: + step: + operation: weighted_mean + weights: [0.25, 0.5, 0.25] + cp: + preprocessing: + - operation: scale + value: 1000 + accumulations: + step: + operation: difference + cdir: + preprocessing: + - operation: scale + value: 0.00001157407 + accumulations: + step: + operation: difference + cape: accumulations: step: type: legacywindow - operation: minimum - name: - type: default - length: "{steplength}:int" - metadata: - stepType: min - filter:steplength: - "24": - num_inputs: 15 - predictors: - - lsm - - sdfor - - vegdiff - - mn2t - - {expr: "((sd * 1000)/rsn)*100", expr_data: {sd: {param: sd}, rsn: {param: rsn}}} - - lai - - {expr: "t2m - skt", expr_data: {t2m: {param: 2t}, skt: {param: skt}}} - - 100si - - lcc - dependencies: - filtered: - accumulations: - step: - operation: filter - filter_op: min - filter_index: -1 - neighbours: [-1] - neighbours_op: mean - preprocessing: - actions: - - operation: reshape - shape: 1 - sdfor: - accumulations: null - lsm: - accumulations: null - urbanfrac: - accumulations: null - lai: - preprocessing: - actions: - - operation: reshape - shape: 1 - accumulations: null - cm/cr: - entrypoint: pproc-clustereps - step_del: 12 - bbox: - lat_n: 75.0 - lat_s: 30.0 - lon_w: 340.0 - lon_e: 40.0 - max_anom: 10000. - num_components: 50 - var_th: 80.0 - ncl_max: 6 - init: sector - npass: 100 - nrsamples: 500 - max_sig: 95.0 - med_sig: 90.0 - min_sig: 55.0 - sig_tol: 3.0 - ncl_clim: 4 - clim_means: "{season}_means.grd" - clim_pcs: "{season}_pcs.gts" - clim_sdv: "{season}_sdv.gts" - clim_eof: "{season}_eof.grd" - clim_cluster_index: "era_clind_{season}.gts" - clim_cluster_centroids_eof: "era_clcen_eof_{season}.gts" - seasons: - - [5, 9] - - [10, 4] - generate_dummy: true - deterministic_is_control: true - compute_spread: true + operation: maximum windows: defs: width6: @@ -1903,7 +1579,7 @@ windows: start: 144 filter:stream: oper/wave: - filter:time: + filter:time: "0000/1200": &mr_steps in_steps: - from: 0 @@ -1914,7 +1590,7 @@ windows: by: 3 - from: 144 to: 360 - by: 6 + by: 6 "0600/1800": &bc_steps in_steps: - from: 0 @@ -1923,6 +1599,9 @@ windows: - from: 90 to: 144 by: 3 + scda/scwv: + filter:time: + "0600/1800": *bc_steps enfo/waef: filter:time: "0000/1200": *mr_steps @@ -1932,7 +1611,7 @@ windows: - from: 0 to: 1104 by: 6 - msmm/swmm: + msmm/swmm: in_steps: - from: 0 to: 5160 @@ -1967,7 +1646,7 @@ windows: efhs/wehs/eehs: out_steps: type: instantaneous - interval: 6 + interval: 12 fc/cf/pf: filter:stream: "*": @@ -1984,7 +1663,7 @@ windows: "enfo/eefo/oper/eefh/weef": out_steps: type: range - interval: 24 + interval: 24 width: 168 "enfh/enwh": out_steps: @@ -2011,13 +1690,13 @@ windows: type: range end: 168 width: 24 - interval: 24 + interval: 24 "eefh/weeh": filter:param: "*": out_steps: type: range - interval: 24 + interval: 24 width: 168 "msmm": out_steps: @@ -2028,11 +1707,11 @@ windows: "enfo/eefo/oper/efhs/eehs": out_steps: type: range - interval: 24 + interval: 24 width: 168 ep: filter:stream: - enfo: + enfo: filter:param: 131060/131061/131062/131063/131098/131099/131085/131070/131071/131072/131100: out_steps: @@ -2052,21 +1731,7 @@ windows: type: instantaneous start: 12 interval: 12 - "260290": - out_steps: - - type: instantaneous - start: 0 - end: 90 - interval: 1 - - type: instantaneous - start: 91 - end: 144 - interval: 3 - - type: instantaneous - start: 150 - end: 360 - interval: 6 - waef: + waef: filter:param: 131074/131075/131076/131077/131078/131079/131080/131081: out_steps: @@ -2086,7 +1751,7 @@ windows: "eefo/weef": out_steps: type: range - interval: 24 + interval: 24 width: 168 "enfo/waef": filter:param: @@ -2154,7 +1819,7 @@ windows: type: range end: 168 width: 24 - interval: 24 + interval: 24 "0600/1800": out_steps: - type: range @@ -2206,42 +1871,30 @@ windows: out_steps: type: range width: 24 - interval: 12 + interval: 12 eehs: out_steps: type: range width: 168 - interval: 24 - gwt/pfc: + interval: 24 + pfc: filter:param: "228/201/202": out_steps: type: range width: 12 interval: 6 - cm/cr: - filter:stream: - enfo: - in_steps: - - from: 0 - to: 360 - by: 12 - out_steps: - - "72-96" - - "120-168" - - "192-240" - - "240-360" inputs: filter:stream: - oper: + oper: filter:type: - fc/fcmean/fcstdev/fcmin/fcmax/pfc/gwt: + fc/fcmean/fcstdev/fcmin/fcmax/pfc: forecast: inputs: request: &oper_fc stream: oper type: fc - wave: + wave: filter:type: fc/fcmean/fcstdev/fcmin/fcmax: forecast: @@ -2249,141 +1902,220 @@ inputs: request: &wave_fc stream: wave type: fc + scda: + filter:time: + 0600/1800: + filter:type: + fc/fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: &scda_fc + stream: scda + time: "{time}" + type: fc + scwv: + filter:time: + 0600/1800: + filter:type: + fc/fcmean/fcstdev/fcmin/fcmax: + forecast: + inputs: + request: &scwv_fc + stream: scwv + time: "{time}" + type: fc enfo: - filter:type: - "em/pb/efi/sot/ep": - forecast: - inputs: - - request: *oper_fc - - request: &enfo_pf - stream: enfo - type: "pf" - members: &enfo_members - start: 1 - end: 50 - "es": - filter:selection: - "*": + filter:time: + "0000/1200": + filter:type: + "em/es/pb/efi/sot/pfc": forecast: inputs: - - request: *oper_fc - - request: *enfo_pf - members: *enfo_members - "clust-warmup-50r1-bc": - filter:time: - "0600/1800": - from_inputs: false + - request: &enfo_cf + stream: enfo + type: "cf" + time: "{time}" + - request: &enfo_pf + stream: enfo + type: "pf" + time: "{time}" + members: &enfo_members + start: 1 + end: 50 + "cf/efic": + forecast: + inputs: + request: *enfo_cf + "pf": + forecast: + inputs: + request: *enfo_pf + members: *enfo_members + "ep": + filter:param: + 131060/131061/131062/131063/131064/131065/131066/131067/131068/131069/131070/131071/131072/131073/131074/131075/131076/131077131078/131079/131080/131081//131098/131099/131100/131085: forecast: inputs: - - request: - stream: scda - type: fc + request: *enfo_pf + members: *enfo_members + 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + forecast: + inputs: + - request: *enfo_cf - request: *enfo_pf members: *enfo_members - cm/cr: - forecast: - inputs: - - request: - <<: *oper_fc - domain: "g" - target_grid: 1.5/1.5 - derive_step: - type: default - include_start: true - - request: - <<: *enfo_pf - domain: "g" - target_grid: 1.5/1.5 - derive_step: - type: default - include_start: true - members: *enfo_members - climatology: - inputs: - - request: - domain: "g" - stream: enfo - type: "es" - "efic": - forecast: - inputs: - request: *oper_fc - "pf/gwt": - forecast: - inputs: - request: *enfo_pf - members: *enfo_members - fcmean/fcstdev/fcmin/fcmax: - filter:members: - only_zero: + fcmean/fcstdev/fcmin/fcmax: + filter:members: + only_zero: + forecast: + inputs: + request: *enfo_cf + members: null + no_zero: + forecast: + inputs: + request: *enfo_pf + members: *enfo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *enfo_cf + - request: *enfo_pf + members: *enfo_members + "0600/1800": + filter:type: + "em/es/pb/efi/sot/pfc": forecast: inputs: - request: *oper_fc - no_zero: + - request: *scda_fc + - request: *enfo_pf + members: *enfo_members + "efic": forecast: inputs: - request: *enfo_pf - members: *enfo_members - contains_zero: - from_inputs: false + request: *scda_fc + "pf": forecast: inputs: - - request: *oper_fc - - request: *enfo_pf - members: *enfo_members - pfc: - forecast: - inputs: - request: - stream: enfo - type: fcmean - members: - start: 0 - end: 50 - climatology: + request: *enfo_pf + members: *enfo_members + "ep": + filter:param: + 131060/131061/131062/131063/131064/131065/131066/131067/131068/131069/131070/131071/131072/131073/131074/131075/131076/131077131078/131079/131080/131081//131098/131099/131100/131085: + forecast: + inputs: + request: *enfo_pf + members: *enfo_members + 131020/131021/131022/131023/131024/131025/133093/133094/133095/133096/133097/133098: + forecast: + inputs: + - request: *scda_fc + - request: *enfo_pf + members: *enfo_members + fcmean/fcstdev/fcmin/fcmax: + filter:members: + only_zero: + forecast: + inputs: + request: *scda_fc + no_zero: + forecast: + inputs: + request: *enfo_pf + members: *enfo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *scda_fc + - request: *enfo_pf + members: *enfo_members + climatology: inputs: request: - stream: "efhs" + stream: "efhs" time: "0000" scheme: ecmwf-4days waef: - filter:type: - em/es/pb/efi/sot/ep: - forecast: - inputs: - - request: *wave_fc - - request: &waef_pf - stream: waef - type: "pf" - members: *enfo_members - "efic": - forecast: - inputs: - request: *wave_fc - "pf": - forecast: - inputs: - request: *waef_pf - members: *enfo_members - fcmean/fcstdev/fcmin/fcmax: - filter:members: - only_zero: + filter:time: + "0000/1200": + filter:type: + em/es/pb/efi/sot: forecast: inputs: - request: *wave_fc - no_zero: + - request: &waef_cf + stream: waef + type: "cf" + time: "{time}" + - request: &waef_pf + stream: waef + type: "pf" + time: "{time}" + members: *enfo_members + "cf/efic": + forecast: + inputs: + request: *waef_cf + "pf/ep": forecast: inputs: request: *waef_pf members: *enfo_members - contains_zero: - from_inputs: false + fcmean/fcstdev/fcmin/fcmax: + filter:members: + only_zero: + forecast: + inputs: + request: *waef_cf + no_zero: + forecast: + inputs: + request: *waef_pf + members: *enfo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *waef_cf + - request: *waef_pf + members: *enfo_members + "0600/1800": + filter:type: + em/es/pb/efi/sot: forecast: inputs: - - request: *wave_fc + - request: *scwv_fc - request: *waef_pf members: *enfo_members - climatology: + "efic": + forecast: + inputs: + request: *scwv_fc + "pf/ep": + forecast: + inputs: + request: *waef_pf + members: *enfo_members + fcmean/fcstdev/fcmin/fcmax: + filter:members: + only_zero: + forecast: + inputs: + request: *scwv_fc + no_zero: + forecast: + inputs: + request: *waef_pf + members: *enfo_members + contains_zero: + from_inputs: false + forecast: + inputs: + - request: *scwv_fc + - request: *waef_pf + members: *enfo_members + climatology: inputs: request: stream: "wehs" @@ -2433,7 +2165,7 @@ inputs: - request: *eefo_pf members: *eefo_members 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: - filter:type: + filter:type: fcmean: forecast: inputs: @@ -2452,12 +2184,12 @@ inputs: members: start: 0 end: 100 - derive_step: + derive_step: type: precomputed - climatology: + climatology: inputs: request: - stream: "eehs" + stream: "eehs" time: "0000" scheme: ecmwf-2days weef: @@ -2508,15 +2240,15 @@ inputs: members: start: 0 end: 100 - derive_step: + derive_step: type: precomputed - climatology: + climatology: inputs: request: - stream: "wees" + stream: "wees" time: "0000" scheme: ecmwf-2days - msmm: + msmm: filter:type: "fcmean/fcstdev/fcmin/fcmax": forecast: @@ -2527,7 +2259,7 @@ inputs: members: start: 0 end: 50 - swmm: + swmm: filter:type: "fcmean/fcstdev/fcmin/fcmax": forecast: @@ -2702,65 +2434,42 @@ inputs: end: 10 scheme: *eefh_scheme filter:param: - "*": + "*": filter:type: "fc/cf/pf": from_inputs: False - filter:levtype: - "fl": - forecast: - inputs: - - request: - levtype: ml - levelist: [58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137] - param: "{param}" - - request: - levtype: ml - levelist: 1 - param: 152 - "*": - forecast: - inputs: - request: - param: "{param}" - "em/es/pb/cd/fcmean/fcstdev/fcmin/fcmax/taem/taes/cm/cr": forecast: inputs: - request: + request: param: "{param}" - "ep": - filter:selection: - eccharts: - from_inputs: false - forecast: - inputs: - request: - param: "{param}" - "10": + "em/es/pb/cd/fcmean/fcstdev/fcmin/fcmax/taem/taes": + forecast: + inputs: + request: + param: "{param}" + "10": filter:type: fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: forecast: inputs: request: param: ["138", "155"] - "131/132": + "131/132": filter:type: fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: - filter:levtype: - pl: - forecast: - inputs: - request: - param: ["138", "155"] + forecast: + inputs: + request: + param: ["138", "155"] taem/taes: forecast: inputs: request: - param: "{param}" - "121/122/123": + param: "{param}" + "121/122": forecast: inputs: - request: + request: param: "{param}" filter:type: em/es/pb: @@ -2773,25 +2482,25 @@ inputs: from_inputs: false "228": filter:type: - "pfc/gwt": + "pfc": from_inputs: false "fc/cf/pf/fcmean": from_inputs: False forecast: inputs: - request: + request: param: "{param}" - "em/es/pb/cd": + "em/es/pb/cd": forecast: inputs: - request: + request: param: "{param}" "228026/228027": filter:type: em/es/pb: forecast: inputs: - request: + request: param: "{param}" derive_step: type: default @@ -2803,38 +2512,51 @@ inputs: 131020/131021: forecast: inputs: - request: - param: "130" - derive_step: - type: default - include_start: true - by: 6 + - request: + param: "130" + derive_step: + type: default + include_start: true + by: 12 + members: null + - request: + param: "130" + derive_step: + type: default + include_start: true + by: 12 "*": forecast: inputs: - request: - param: "130" - derive_step: - type: default - by: 6 + - request: + param: "130" + derive_step: + type: default + by: 12 + members: null + - request: + param: "130" + derive_step: + type: default + by: 12 climatology: required: true inputs: - request: param: "130" type: "em" - derive_date: + derive_date: option: previous strict: False - derive_step: + derive_step: type: instantaneous - request: param: "130" type: "es" - derive_date: + derive_date: option: previous strict: False - derive_step: + derive_step: type: instantaneous 131060/131061/131062/131063/131064/131065/131066/131067/131098/131099/131085: filter:type: @@ -2843,14 +2565,14 @@ inputs: inputs: request: param: "228" - derive_step: + derive_step: type: deaccumulate "131068/131069": filter:type: ep: forecast: inputs: - request: + request: param: ["165", "166"] 131070/131071/131072/131100: filter:type: @@ -2879,12 +2601,12 @@ inputs: derive_step: type: default by: 6 - 131074/131075/131076/131077: + 131074/131075/131076/131077: filter:type: ep: - forecast: + forecast: inputs: - request: + request: param: "140229" 131078/131079/131080/131081: filter:type: @@ -2899,7 +2621,7 @@ inputs: forecast: inputs: request: - param: ["228036", "228035"] + param: ["228035", "228036"] climatology: inputs: request: @@ -2970,7 +2692,7 @@ inputs: inputs: request: param: "228004" - "132201": + "132201": filter:type: efi/efic/sot: forecast: @@ -2981,7 +2703,7 @@ inputs: inputs: request: param: "201" - "132202": + "132202": filter:type: efi/efic/sot: forecast: @@ -3221,7 +2943,7 @@ inputs: param: "139" climatology: inputs: - request: + request: param: "139" "171141": filter:type: @@ -3232,7 +2954,7 @@ inputs: param: "141" climatology: inputs: - request: + request: param: "141" "171151": filter:type: @@ -3382,241 +3104,241 @@ inputs: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "8" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172009": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "9" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172142": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "142" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172143": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "143" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172144": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "144" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172146": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "146" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172147": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "147" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172169": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "169" taem/taes: forecast: inputs: - request: + request: param: "{param}" - "172175": + "172175": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "175" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172176": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "176" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172177": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "177" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172178": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "178" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172179": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "179" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172180": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "180" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172181": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "181" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172182": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "182" "172189": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "189" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172205": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "205" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172212": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "212" taem/taes: forecast: inputs: - request: + request: param: "{param}" "172228": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "228" taem/taes: forecast: inputs: - request: + request: param: "{param}" "200142": from_inputs: false forecast: inputs: - request: + request: param: "142" derive_step: type: deaccumulate @@ -3624,7 +3346,7 @@ inputs: from_inputs: false forecast: inputs: - request: + request: param: "143" derive_step: type: deaccumulate @@ -3632,7 +3354,7 @@ inputs: from_inputs: false forecast: inputs: - request: + request: param: "144" derive_step: type: deaccumulate @@ -3640,7 +3362,7 @@ inputs: from_inputs: false forecast: inputs: - request: + request: param: "189" derive_step: type: deaccumulate @@ -3648,7 +3370,7 @@ inputs: from_inputs: false forecast: inputs: - request: + request: param: "228" derive_step: type: deaccumulate @@ -3656,7 +3378,7 @@ inputs: from_inputs: false forecast: inputs: - request: + request: param: "228216" derive_step: type: deaccumulate @@ -3665,30 +3387,30 @@ inputs: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "121" cd/em/es: # This case is handled below filter:stream: efhs/eehs: {} - pfc/gwt: + pfc: from_inputs: false taem/taes: filter:stream: efhs/eehs/eefo: forecast: inputs: - request: + request: param: "{param}" "202": filter:type: fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: "122" - pfc/gwt: + pfc: from_inputs: false - cd/em/es: + cd/em/es: filter:stream: efhs/eehs: {} taem/taes: @@ -3696,117 +3418,118 @@ inputs: efhs/eehs/eefo: forecast: inputs: - request: + request: param: "{param}" - "140249": - from_inputs: false + "207": filter:type: fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: ["165", "166"] - cd: {} - "207": - filter:stream: - msmm: + "140249": + from_inputs: false + filter:type: + fc/cf/pf/em/es/pb/fcmean/fcstdev/fcmin/fcmax: forecast: inputs: - request: + request: param: ["165", "166"] - "*": - forecast: - inputs: - request: - param: "{param}" + cd: {} + "228249": + from_inputs: false + forecast: + inputs: + request: + param: ["228246", "228247"] "234167": filter:type: taem: - forecast: + forecast: inputs: - request: + request: param: "171167" climatology: inputs: - request: + request: param: "167.128" "234139": filter:type: taem: - forecast: + forecast: inputs: - request: + request: param: "171139" climatology: inputs: - request: + request: param: "139.128" "234151": filter:type: taem: - forecast: + forecast: inputs: - request: + request: param: "171151" climatology: inputs: - request: + request: param: "151.128" "234228": filter:type: taem: - forecast: + forecast: inputs: - request: + request: param: "173228" climatology: inputs: - request: + request: param: "228.172" "235117": filter:type: fcmean: forecast: inputs: - request: + request: param: "228235" taem/taes: forecast: inputs: - request: + request: param: "235117" "237117": filter:type: fcmax: forecast: inputs: - request: + request: param: "228235" "238117": filter:type: fcmin: forecast: inputs: - request: + request: param: "228235" "239117": filter:type: fcstdev: forecast: inputs: - request: + request: param: "228235" - "260033": + "260033": from_inputs: false forecast: inputs: - request: + request: param: ["228220", "228218"] "260053": from_inputs: false forecast: inputs: - request: + request: param: ["228220", "228221"] "261001": filter:type: @@ -3819,10 +3542,10 @@ inputs: type: deaccumulate - request: param: ["165", "166", "167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261001" "261014": filter:type: @@ -3835,10 +3558,10 @@ inputs: type: deaccumulate - request: param: ["165", "166", "167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261014" "261015": filter:type: @@ -3851,84 +3574,84 @@ inputs: type: deaccumulate - request: param: ["165", "166", "167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261015" - "260004": + "260004": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "260004" - "260242": + "260242": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "260242" - "261016": + "261016": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261016" - "260005": + "260005": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["165", "166", "167"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "260005" - "260255": + "260255": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["165", "166", "167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "260255" - "261018": + "261018": filter:type: cf/pf/fc: forecast: inputs: - request: + request: param: ["165", "166", "167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261018" - "261002": + "261002": filter:type: cf/pf/fc: forecast: @@ -3939,10 +3662,10 @@ inputs: type: deaccumulate - request: param: "167" # Required for metadata of cossza - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261002" "261023": filter:type: @@ -3951,20 +3674,20 @@ inputs: inputs: request: param: ["167", "168"] - "em/es/pb": + "em/es/pb": forecast: inputs: - request: + request: param: "261023" filter:type: - fcmean: + fcmean/fcstdev/fcmax: filter:stream: enfo/waef/eefo/weef: filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": forecast: inputs: - derive_step: + derive_step: type: default 40/41/42/170/140229/140231/140232/140233/140245: forecast: @@ -3979,7 +3702,7 @@ inputs: type: default include_start: true by: 24 - 1/2/3/54/60/129/130/131/132/133/138/155/203: + 1/2/3/60/129/130/131/132/133/138/155: forecast: inputs: derive_step: @@ -3988,7 +3711,7 @@ inputs: 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: forecast: inputs: - derive_step: + derive_step: type: precomputed climatology: inputs: @@ -3999,7 +3722,7 @@ inputs: - option: bracket num: 2 strict: False - derive_step: + derive_step: type: range required: true enfh/enwh/eefh/weeh: @@ -4008,7 +3731,7 @@ inputs: from_inputs: false forecast: inputs: - derive_step: + derive_step: type: default filter:type: fcmean: @@ -4016,29 +3739,29 @@ inputs: "162071": forecast: inputs: - request: + request: param: ["162071", "162072"] "207": forecast: inputs: - request: + request: param: ["165", "166"] "59": forecast: inputs: - request: + request: param: "228035" "228044": forecast: inputs: - request: - param: ["228036", "228035"] + request: + param: ["228035", "228036"] "167/228/144": filter:steplength: - "*": + "*": filter:param: "228/144": - forecast: + forecast: inputs: derive_step: type: deaccumulate @@ -4046,9 +3769,9 @@ inputs: "168": forecast: inputs: - - request: + - request: type: fcmean - members: + members: start: 0 end: 0 derive_step: @@ -4063,18 +3786,18 @@ inputs: inputs: request: param: "172228" - "167": + "167": forecast: inputs: request: param: "167" "*": {} - "*": + "*": filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": forecast: inputs: - derive_step: + derive_step: type: default 40/41/42/170/140229/140231/140232/140233/140245: forecast: @@ -4089,7 +3812,7 @@ inputs: type: default include_start: true by: 24 - 1/2/3/54/60/129/130/131/132/133/138/155/203: + 1/2/3/60/129/130/131/132/133/138/155: forecast: inputs: derive_step: @@ -4097,10 +3820,10 @@ inputs: by: 12 msmm/swmm: filter:param: - "34/139/151/164/165/166/167/168/168/207/229/230": + "34/139/151/164/165/166/167/168/168/207/229/230": forecast: inputs: - derive_step: + derive_step: type: monthly 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: forecast: @@ -4122,41 +3845,31 @@ inputs: derive_step: type: monthly by: 12 - fcstdev/fcmax/fcmin: + fcmin: filter:stream: enfo/waef/eefo/weef/enfh/enwh/eefh/weeh: filter:param: - "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": + "31/33/34/39/49/78/79/121/122/136/137/139/141/151/151130/151131/151132/151145/151148/151163/151164/151175/159/164/165/166/167/168/201/202/207/228246/228247/235117/237117/238117/239117": forecast: inputs: - derive_step: + derive_step: type: default + 172142/172143/172144/172228: + from_inputs: false 40/41/42/170/140229/140231/140232/140233/140245: forecast: inputs: derive_step: type: default by: 24 - 172008/172009/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212: - forecast: - inputs: - derive_step: - type: default - include_start: true - by: 24 - 172142/172143/172144/172228: - filter:type: - fcmin: - from_inputs: false - "*": {} + 172008/172009/172142/172143/172144/172146/172147/172169/172175/172176/172177/172178/172179/172180/172181/172182/172189/172205/172212/172228: forecast: inputs: derive_step: type: default include_start: true by: 24 - 1/2/3/54/60/129/130/131/132/133/138/155/203: - from_inputs: false + 1/2/3/60/129/130/131/132/133/138/155: forecast: inputs: derive_step: @@ -4164,11 +3877,13 @@ inputs: by: 12 msmm/swmm: filter:param: - "34/139/151/164/165/166/167/168/168/207/229/230": + "34/139/151/164/165/166/167/168/168/207/229/230": forecast: inputs: - derive_step: + derive_step: type: monthly + 172142/172143/172144/172228: + from_inputs: false 31/33/39/40/41/42/49/51/52/78/79/137/141/170/183/186/206/236/243/140220/140221/140229/140231/140232/140233/140244/140245/228008/228014: forecast: inputs: @@ -4183,26 +3898,7 @@ inputs: include_start: true allow_missing_zero: true by: 24 - 172142/172143/172144/172228: - filter:type: - fcmin: - from_inputs: false - "*": {} - forecast: - inputs: - derive_step: - type: monthly - include_start: true - allow_missing_zero: true - by: 24 - 133/203: - forecast: - inputs: - derive_step: - type: monthly - by: 12 - 129/130/138/155: - from_inputs: false + 129/130/133/138/155/203: forecast: inputs: derive_step: @@ -4210,17 +3906,17 @@ inputs: by: 12 efi/efic/sot: filter:stream: - "eefo/weef": + "eefo/weef": filter:param: - 132044/132049/132059/132144/132045/132165/132167/132201/132202/132216/132228: + 132044/132049/132059/132144/132045/132165/132167/132201/132202/132216/132228: climatology: required: true inputs: request: type: cd - derive_date: + derive_date: option: nearest - derive_step: + derive_step: type: range "enfo/waef": climatology: @@ -4228,25 +3924,25 @@ inputs: inputs: request: type: cd - derive_date: + derive_date: - option: next - sequence: + sequence: type: daily - option: previous strict: false - derive_step: + derive_step: type: range filter:param: - "132044/132049/132059/132045/132165/132167/132201/132202/132216": + "132044/132049/132059/132045/132165/132167/132201/132202/132216": forecast: inputs: - derive_step: + derive_step: type: default by: 6 132228/132144: forecast: inputs: - derive_step: + derive_step: type: deaccumulate taem/taes: filter:stream: @@ -4256,7 +3952,7 @@ inputs: 171001/171002/171006/171007/171078/171079/171033/171034/171121/171122/171129/171130/171131/171132/171133/171136/171137/171139/171141/171151/171164/171165/171166/171167/171168/171201/171202/173142/173143/173144/173189/173228: forecast: inputs: - derive_step: + derive_step: type: precomputed climatology: inputs: @@ -4267,13 +3963,13 @@ inputs: - option: bracket num: 2 strict: False - derive_step: + derive_step: type: range required: true 234167/234139/234151/234228: forecast: inputs: - derive_step: + derive_step: type: precomputed climatology: inputs: @@ -4288,7 +3984,7 @@ inputs: - option: bracket num: 1 strict: False - derive_step: + derive_step: type: range - request: type: taem @@ -4297,15 +3993,15 @@ inputs: - option: bracket num: 1 strict: False - derive_step: + derive_step: type: range required: true - efhs/wehs/eehs: + efhs/wehs/eehs: forecast: inputs: - request: type: "fcmean" - members: + members: start: 0 end: 0 derive_step: @@ -4332,7 +4028,7 @@ inputs: inputs: - request: type: "fcmean" - members: + members: start: 0 end: 0 derive_step: @@ -4350,83 +4046,90 @@ inputs: derive_date: - option: bracket num: 4 - strict: False + strict: False "168": forecast: inputs: derive_date: - option: bracket num: 2 - strict: False + strict: False filter:param: "228004": forecast: inputs: - request: + request: param: "167.128" "49": forecast: inputs: - request: + request: param: "123.128" "228005": forecast: inputs: - request: + request: param: "207.128" "201": forecast: inputs: - request: + request: param: "121.128" "202": forecast: inputs: - request: + request: param: "122.128" "162045": forecast: inputs: - request: + request: param: "71.162" "228006": forecast: inputs: - request: + request: param: "164.128" "228": - forecast: - inputs: - request: - param: "228.128" + filter:steplength: + "*": + forecast: + inputs: + request: + param: "228.128" + "168": + forecast: + inputs: + request: + param: "228.172" "144": forecast: inputs: - request: + request: param: "144.128" "59": forecast: inputs: - request: + request: param: "59.128" "228044": forecast: inputs: - request: + request: param: "44.228" - "140249": + "140249": forecast: inputs: - request: + request: param: "249.140" members: null - "wehs": + "wehs": from_inputs: false forecast: inputs: - request: type: "fcmean" - members: + members: start: 0 end: 0 derive_step: @@ -4442,19 +4145,19 @@ inputs: derive_date: - option: bracket num: 4 - strict: False + strict: False "168": forecast: inputs: derive_date: - option: bracket num: 2 - strict: False + strict: False filter:param: "140200": forecast: inputs: - request: + request: param: "229.140" em/es: filter:stream: @@ -4466,7 +4169,7 @@ inputs: inputs: - request: type: "fcmean" - members: + members: start: 0 end: 0 derive_step: @@ -4484,7 +4187,7 @@ inputs: inputs: - request: type: "fcmean" - members: + members: start: 0 end: 0 derive_step: @@ -4502,69 +4205,76 @@ inputs: derive_date: - option: bracket num: 4 - strict: False + strict: False "168": forecast: inputs: derive_date: - option: bracket num: 2 - strict: False + strict: False filter:param: "228004": forecast: inputs: - request: + request: param: "167.128" "49": forecast: inputs: - request: + request: param: "123.128" "228005": forecast: inputs: - request: + request: param: "207.128" "201": forecast: inputs: - request: + request: param: "121.128" "202": forecast: inputs: - request: + request: param: "122.128" "162045": forecast: inputs: - request: + request: param: "71.162" "228006": forecast: inputs: - request: + request: param: "164.128" "228": - forecast: - inputs: - request: - param: "228.128" + filter:steplength: + "*": + forecast: + inputs: + request: + param: "228.128" + "168": + forecast: + inputs: + request: + param: "228.172" "144": forecast: inputs: - request: + request: param: "144.128" "59": forecast: inputs: - request: + request: param: "59.128" "228044": forecast: inputs: - request: + request: param: "44.228" instantaneous: forecast: @@ -4574,7 +4284,7 @@ inputs: rend: 0 recurrence: "yearly" include_endpoint: false - "wehs": + "wehs": filter:steptype: range: from_inputs: false @@ -4585,7 +4295,7 @@ inputs: - request: param: "229.140" type: "fcmean" - members: + members: start: 0 end: 0 derive_step: @@ -4593,7 +4303,7 @@ inputs: derive_date: - option: bracket num: 4 - strict: False + strict: False - request: param: "229.140" type: "fcmean" @@ -4602,8 +4312,8 @@ inputs: derive_date: - option: bracket num: 4 - strict: False - instantaneous: + strict: False + instantaneous: forecast: inputs: derive_hdate: @@ -4611,13 +4321,13 @@ inputs: rend: 0 recurrence: "yearly" include_endpoint: false - gwt: + pfc: filter:param: "228": - filter:class: - od: - filter:steplength: - "6": + filter:steplength: + "6": + filter:time: + "0000/1200": forecast: update_request_method: product inputs: @@ -4628,10 +4338,9 @@ inputs: - request: param: ["138", "155"] levtype: pl - levelist: 700 + levelist: 700 derive_step: type: default - include_start: true by: 3 - request: param: "143" @@ -4642,54 +4351,20 @@ inputs: derive_step: type: deaccumulate by: 24 - - request: - param: "228035" - derive_step: - type: default - by: 6 - - request: - param: [167, 168] + - request: + param: "228235" derive_step: type: default by: 3 - include_start: true - "12": - forecast: - update_request_method: product - inputs: - - request: - param: "228" - derive_step: - type: deaccumulate - - request: - param: ["138", "155"] - levtype: pl - levelist: 700 - derive_step: - type: default - include_start: true - by: 6 - - request: - param: "143" - derive_step: - type: deaccumulate - - request: - param: "228022" - derive_step: - type: deaccumulate - by: 24 - - request: - param: "228035" - derive_step: - type: default - by: 6 - - request: - param: [167, 168] + - request: + param: "74" + stream: oper + type: fc + members: null derive_step: - type: default - by: 6 - include_start: true - "24": + type: select + index: -1 + "0600/1800": forecast: update_request_method: product inputs: @@ -4700,11 +4375,10 @@ inputs: - request: param: ["138", "155"] levtype: pl - levelist: 700 + levelist: 700 derive_step: type: default - include_start: true - by: 12 + by: 3 - request: param: "143" derive_step: @@ -4714,139 +4388,75 @@ inputs: derive_step: type: deaccumulate by: 24 - - request: - param: "228035" - derive_step: - type: default - by: 6 - - request: - param: [167, 168] - derive_step: - type: default - by: 6 - include_start: true - ea: - filter:steplength: - "12/24": - forecast: - update_request_method: product - inputs: - - request: - param: "228.128" - - request: - param: ["131.128", "132.128"] - levtype: pl - levelist: 700 - - request: - param: "143.128" - - request: - param: "22.228" - - request: - param: "59.128" - - request: - param: ["167.128", "168.128"] - - request: - type: an - param: "74.128" - time: "0000" - derive_step: - type: static - values: 0 - - request: - type: an - param: "172.128" - time: "0000" - derive_step: - type: static - values: 0 - "201": - filter:class: - ea: - filter:steplength: - "24": - forecast: - update_request_method: product - inputs: - - request: - param: "201.128" - - request: - param: ['228.128', '201.128'] - - request: - param: ['141.128', '33.128', '246.228', '247.228', '39.128', '201.128'] - derive_step: - type: default - include_start: true - - request: - param: "22.228" - - request: - type: an - param: "74.128" - time: "0000" - derive_step: - type: static - values: 0 - - request: - type: an - param: "172.128" - time: "0000" - derive_step: - type: static - values: 0 - - request: - class: od - type: an - param: "200199" - derive_step: - type: static - values: 0 - "202": - filter:class: - ea: - filter:steplength: - "24": - forecast: - update_request_method: product - inputs: - - request: - param: "202.128" - - request: - param: ['141.128', '33.128', '167.128', '235.128', '246.228', '247.228', '186.128', '202.128'] + - request: + param: "228235" derive_step: type: default - include_start: true - - request: - type: an - param: "74.128" - time: "0000" - derive_step: - type: static - values: 0 - - request: - type: an - param: "172.128" - time: "0000" - derive_step: - type: static - values: 0 - - request: - class: od - type: an - param: "200199" - derive_step: - type: static - values: 0 - - request: - type: an - param: ['27.128', '28.128', '66.128', '67.128'] - time: "1200" + by: 3 + - request: + param: "74" + stream: scda + type: fc + members: null derive_step: - type: static - values: 0 - pfc: - forecast: - inputs: - request: - param: "{param}" - derive_step: - type: precomputed - fc/cf/pf/ep/pb/cm/cr: {} + type: select + index: -1 + "12": + forecast: + update_request_method: product + inputs: + - request: + param: "228" + derive_step: + type: deaccumulate + - request: + param: ["138", "155"] + levtype: pl + levelist: 700 + derive_step: + type: default + by: 6 + - request: + param: "143" + derive_step: + type: deaccumulate + - request: + param: "228022" + derive_step: + type: deaccumulate + by: 24 + - request: + param: "228035" + derive_step: + type: default + by: 6 + "24": + forecast: + update_request_method: product + inputs: + - request: + param: "228" + derive_step: + type: deaccumulate + - request: + param: ["138", "155"] + levtype: pl + levelist: 700 + derive_step: + type: default + by: 12 + - request: + param: "143" + derive_step: + type: deaccumulate + - request: + param: "228022" + derive_step: + type: deaccumulate + by: 24 + - request: + param: "228035" + derive_step: + type: default + by: 12 + fc/cf/pf/ep/pb: {} diff --git a/pproc/tests/schema/test_config_schema.py b/pproc/tests/schema/test_config_schema.py new file mode 100644 index 00000000..90d13e94 --- /dev/null +++ b/pproc/tests/schema/test_config_schema.py @@ -0,0 +1,86 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import pytest + +from pproc.schema.config import ConfigSchema + +from conftest import schema + + +def test_reconstruct(): + config_schema = ConfigSchema(schema("config")) + cfgs = list(config_schema.reconstruct(entrypoint="pproc-ensms")) + assert len(cfgs) != 0 + for out, cfg in cfgs: + assert cfg["entrypoint"] == "pproc-ensms" + assert out["type"] in ["em", "es", "taem", "taes"] + assert len([x for x, _ in cfgs if x["type"] == "em"]) == len( + [x for x, _ in cfgs if x["type"] == "es"] + ) + + +@pytest.mark.parametrize( + "out_request, expected_config", + [ + [ + { + "stream": "enfo", + "date": "20250101", + "time": "00", + "type": "sot", + "number": 90, + "param": "132167", + "step": "0-24", + }, + {"sot": [90]}, + ], + [ + { + "stream": "enfo", + "date": "20250101", + "time": "00", + "type": "sot", + "number": [10, 90], + "param": "132167", + "step": "0-24", + }, + {"sot": [10, 90]}, + ], + [ + { + "stream": "enfo", + "date": "20250101", + "time": "00", + "type": "pb", + "quantile": "1:100", + "param": "167", + "step": "0-24", + }, + {"quantiles": [0.01]}, + ], + [ + { + "stream": "enfo", + "date": "20250101", + "time": "00", + "type": "pb", + "quantile": ["1:100", "2:100"], + "param": "167", + "step": "0-24", + }, + {"quantiles": [0.01, 0.02]}, + ], + ], +) +def test_config_from_output(out_request, expected_config): + config_schema = ConfigSchema(schema("config")) + config = config_schema.config(out_request) + for key, value in expected_config.items(): + assert config[key] == value diff --git a/pproc/tests/schema/test_deriver.py b/pproc/tests/schema/test_deriver.py new file mode 100644 index 00000000..46742c64 --- /dev/null +++ b/pproc/tests/schema/test_deriver.py @@ -0,0 +1,273 @@ +import pytest + +from pydantic import TypeAdapter + +from pproc.schema.deriver import ForecastStepDeriver, ClimStepDeriver, ClimDateDeriver + +FcStepDeriver = TypeAdapter(ForecastStepDeriver) + + +@pytest.mark.parametrize( + "config, output_request, fc_steps, expected", + [ + pytest.param({"type_": "default"}, {"step": 6}, [0, 6, 12], [6], id="inst"), + pytest.param( + {"type_": "default"}, {"step": "0-6"}, [0, 3, 6, 12], [3, 6], id="range" + ), + pytest.param( + {"type_": "default", "include_start": True}, + {"step": "0-6"}, + [0, 3, 6, 12], + [0, 3, 6], + id="range-with-start", + ), + pytest.param( + {"type_": "default", "include_start": True, "allow_missing_zero": True}, + {"step": "0-6"}, + [0, 3, 6, 12], + [0, 3, 6], + id="range-allow-missing", + ), + pytest.param( + {"type_": "default", "include_start": True, "allow_missing_zero": True}, + {"step": "0-6"}, + [3, 6, 12], + [3, 6], + id="range-missing-zero", + ), + pytest.param( + {"type_": "default", "by": 6}, + {"step": "0-6"}, + [0, 3, 6, 12], + [6], + id="range-with-by", + ), + pytest.param( + {"type_": "deaccumulate"}, + {"step": "0-6"}, + [0, 6, 9, 12], + [0, 6], + id="deacc-range", + ), + pytest.param( + {"type_": "deaccumulate", "allow_missing_zero": True}, + {"step": "0-6"}, + [6, 9, 12], + [6], + id="deacc-missing-zero", + ), + pytest.param( + {"type_": "deaccumulate"}, + {"step": 6}, + [0, 6, 9, 12], + [0, 6], + id="deacc-inst", + ), + pytest.param( + {"type_": "deaccumulate", "allow_missing_zero": True}, + {"step": 6}, + [6, 9, 12], + [6], + id="deacc-inst-missing-zero", + ), + pytest.param( + {"type_": "deaccumulate", "by": 12}, + {"step": 12}, + [0, 6, 9, 12], + [0, 12], + id="deacc-inst-by", + ), + pytest.param( + {"type_": "deaccumulate", "by": 24, "allow_missing_zero": True}, + {"step": "0-12"}, + [12, 18, 24], + [24], + id="deacc-range-by", + ), + pytest.param( + {"type_": "precomputed"}, + {"step": "0-12"}, + [6, 9, 12], + ["0-12"], + id="precomputed", + ), + pytest.param( + {"type_": "monthly"}, + {"fcmonth": 1, "date": "20250601"}, + list(range(0, 745, 6)), + list(range(6, 721, 6)), + id="monthly", + ), + pytest.param( + {"type_": "monthly", "include_start": True}, + {"fcmonth": 1, "date": "20250601"}, + list(range(0, 745, 6)), + list(range(0, 721, 6)), + id="monthly-with-start", + ), + pytest.param( + { + "type_": "monthly", + "include_start": True, + "allow_missing_zero": True, + "by": 24, + }, + {"fcmonth": 1, "date": "20250601"}, + list(range(6, 745, 6)), + list(range(24, 721, 24)), + id="monthly-missing-zero", + ), + pytest.param( + {"type_": "select", "index": 1}, + {"step": "0-24"}, + [0, 12, 24], + [24], + id="select", + ), + pytest.param( + {"type_": "select", "index": 0, "include_start": True}, + {"step": "0-24"}, + [0, 12, 24], + [0], + id="select-with-start", + ), + pytest.param( + { + "type_": "select", + "index": 0, + "include_start": True, + "allow_missing_zero": True, + }, + {"step": "0-24"}, + [12, 24], + [12], + id="select-missing-zero", + ), + pytest.param( + {"type_": "static", "values": [0, 12]}, + {"step": "0-24"}, + [0, 12, 24], + [0, 12], + id="static", + ), + ], +) +def test_forecast_step_deriver(config, output_request, fc_steps, expected): + deriver = FcStepDeriver.validate_python(config) + assert expected == deriver.derive(output_request, fc_steps) + + +@pytest.mark.parametrize( + "step_type, times, step, clim_steps, expected", + [ + [ + "instantaneous", + ["0000"], + [0, 6, 12, 18, 24, 354, 360], + list(range(0, 361, 6)), + [0, 6, 12, 18, 24, 354, 360], + ], + [ + "instantaneous", + ["0600"], + [0, 6, 12, 18, 24, 138], + list(range(0, 361, 6)), + [6, 12, 18, 24, 30, 144], + ], + [ + "instantaneous", + ["1200"], + [0, 6, 12, 18, 24, 354, 360], + list(range(0, 361, 6)), + [12, 18, 24, 30, 36, 342, 348], + ], + [ + "instantaneous", + ["1800"], + [0, 6, 12, 18, 24, 138], + list(range(0, 361, 6)), + [18, 24, 30, 36, 42, 156], + ], + [ + "range", + ["0000", "0600"], + list(range(0, 25, 12)), + ["0-24", "12-36", "24-28", "0-240"], + "0-24", + ], + [ + "range", + ["0000", "0600"], + list(range(0, 241, 12)), + ["0-24", "12-36", "24-28", "0-240"], + "0-240", + ], + [ + "range", + ["0000", "0600"], + list(range(12, 25, 12)), + ["0-24", "12-36", "24-28", "0-240"], + "0-24", + ], + [ + "range", + ["0000", "0600"], + [24], + ["0-24", "12-36", "24-28", "0-240"], + "0-24", + ], + [ + "range", + ["1200", "1800"], + list(range(0, 25, 12)), + ["0-24", "12-36", "24-28", "0-240"], + "12-36", + ], + [ + "range", + ["1200", "1800"], + list(range(0, 241, 12)), + ["0-24", "12-36", "24-28", "0-240"], + "0-240", + ], + [ + "range", + ["1200", "1800"], + list(range(12, 25, 12)), + ["0-24", "12-36", "24-28", "0-240"], + "12-36", + ], + [ + "range", + ["1200", "1800"], + [240], + ["0-24", "12-36", "24-28", "0-240"], + "0-240", + ], + ["range", ["0000"], ["0-168"], ["0-168", "24-192", "48-216"], "0-168"], + ["range", ["0000"], ["24-192"], ["0-168", "24-192", "48-216"], "24-192"], + ], +) +def test_clim_step_deriver(step_type, times, step, clim_steps, expected): + deriver = ClimStepDeriver(type=step_type) + for time in times: + assert deriver.derive({"time": time, "step": step}, clim_steps) == expected + + +@pytest.mark.parametrize( + "config, date, expected", + [ + [{"option": "next", "sequence": {"type": "daily"}}, "20250930", "20251001"], + [{"option": "previous", "strict": False}, "20250930", "20250929"], + [{"option": "previous"}, "20250929", "20250927"], + [{"option": "nearest"}, "20250930", "20250929"], + [ + {"option": "bracket", "num": 1, "strict": False}, + "20250930", + ["20250929", "20251001"], + ], + ], +) +def test_clim_date_deriver(config, date, expected): + deriver = ClimDateDeriver(**config) + assert deriver.derive({"date": date}, "ecmwf-2days") == expected diff --git a/pproc/tests/schema/test_input_schema.py b/pproc/tests/schema/test_input_schema.py new file mode 100644 index 00000000..24dcab30 --- /dev/null +++ b/pproc/tests/schema/test_input_schema.py @@ -0,0 +1,558 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import pytest + +from pproc.config.utils import expand, update_request +from pproc.schema.input import ( + InputSchema, + ForecastConfig, + ForecastInput, +) +from pproc.schema.step import StepSchema + +from conftest import schema + +INPUTS = { + "ensms": [ + { + "stream": "enfo", + "levtype": "sfc", + "param": "167", + "step": 3, + "type": "cf", + "time": "0000", + }, + { + "stream": "enfo", + "levtype": "sfc", + "param": "167", + "step": 3, + "type": "pf", + "number": list(range(1, 51)), + "time": "0000", + }, + ], + "thermofeel": [ + { + "stream": "enfo", + "levtype": "sfc", + "param": ["169", "175", "176", "177", "228021", "47"], + "step": [2, 3], + "type": "cf", + "time": "0000", + }, + { + "stream": "enfo", + "levtype": "sfc", + "param": ["165", "166", "167", "168"], + "step": 3, + "type": "cf", + "time": "0000", + }, + ], + "thermo_pf": [ + { + "stream": "enfo", + "levtype": "sfc", + "param": ["169", "175", "176", "177", "228021", "47"], + "step": [2, 3], + "type": "pf", + "time": "0000", + "number": [1, 2, 3], + }, + { + "stream": "enfo", + "levtype": "sfc", + "param": ["165", "166", "167", "168"], + "step": 3, + "type": "pf", + "time": "0000", + "number": [1, 2, 3], + }, + ], + "t850": [ + { + "stream": "enfo", + "param": "130", + "step": list(range(120, 169, 12)), + "type": "cf", + "date": "20250314", + "time": "1200", + "levtype": "pl", + "levelist": 250, + }, + { + "stream": "enfo", + "param": "130", + "step": list(range(120, 169, 12)), + "type": "pf", + "number": list(range(1, 51)), + "date": "20250314", + "time": "1200", + "levtype": "pl", + "levelist": 250, + }, + { + "stream": "efhs", + "param": "130", + "step": list(range(132, 181, 12)), + "type": "em", + "date": "20250313", + "time": "0000", + "levtype": "pl", + "levelist": 250, + "climatology": True, + }, + { + "stream": "efhs", + "param": "130", + "step": list(range(132, 181, 12)), + "type": "es", + "date": "20250313", + "time": "0000", + "levtype": "pl", + "levelist": 250, + "climatology": True, + }, + ], + "efi": [ + { + "stream": "eefo", + "levtype": "sfc", + "param": "167", + "step": "0-168", + "type": "fcmean", + "date": "20250315", + "number": list(range(0, 101)), + "time": "0000", + }, + { + "stream": "eehs", + "levtype": "sfc", + "param": "228004", + "step": "0-168", + "type": "cd", + "date": "20250315", + "time": "0000", + "quantile": [f"{x}:100" for x in range(0, 101)], + "climatology": True, + }, + ], + "monthly": [ + { + "stream": "mmsf", + "levtype": "sfc", + "param": ["165", "166"], + "step": list(range(6, 745, 6)), + "type": "fc", + "number": list(range(0, 51)), + "date": "20241001", + "time": "0000", + }, + ], + "prob": [ + { + "stream": "enfo", + "levtype": "sfc", + "param": "228", + "step": [0, 24], + "type": "pf", + "number": list(range(1, 51)), + "time": "0000", + }, + ], + "sfc-pl": [ + { + "stream": "enfo", + "levtype": "pl", + "levelist": [250, 850], + "param": "130", + "step": 6, + "type": "cf", + "time": "0000", + }, + { + "stream": "enfo", + "levtype": "pl", + "levelist": [250, 850], + "param": "130", + "step": 6, + "type": "pf", + "number": list(range(1, 51)), + "time": "0000", + }, + { + "stream": "enfo", + "levtype": "sfc", + "param": "167", + "step": 6, + "type": "cf", + "time": "0000", + }, + { + "stream": "enfo", + "levtype": "sfc", + "param": "167", + "step": 6, + "type": "pf", + "number": list(range(1, 51)), + "time": "0000", + }, + ], +} + + +@pytest.mark.parametrize( + "inputs, expected_num_inputs", + [ + [ + [ + ForecastInput(request={"type": "em"}), + ForecastInput(request={"type": "es"}), + ], + 2, + ], + [ + [ + ForecastInput(request={"type": "cf"}), + ForecastInput( + request={"type": "pf", "number": [0, 1]}, + members={"start": 0, "end": 1}, + ), + ], + 2, + ], + [ + [ + ForecastInput( + request={"type": "fcmean", "number": [0, 1]}, + members={"start": 0, "end": 1}, + ), + ForecastInput( + request={"type": "pf", "number": [4, 5]}, + members={"start": 4, "end": 5}, + ), + ], + 2, + ], + [ + [ + ForecastInput( + request={"type": "fcmean", "number": [0]}, + members={"start": 0, "end": 0}, + ), + ForecastInput( + request={"type": "fcmean", "number": [1, 2]}, + members={"start": 0, "end": 2}, + ), + ], + 1, + ], + [ + [ + ForecastInput( + request={"type": "cf"}, + ), + ForecastInput( + request={"type": "cf"}, + ), + ], + 1, + ], + [ + [ + ForecastInput( + request={"type": "pf", "number": [0, 1]}, + members={"start": 0, "end": 1}, + ), + ForecastInput( + request={"type": "pf", "number": [0, 1]}, + members={"start": 0, "end": 1}, + ), + ], + 1, + ], + ], + ids=[ + "diff-type", + "diff-with-number", + "number-discontinous", + "merge", + "same-type", + "same-type-with-number", + ], +) +def test_forecast_config(inputs, expected_num_inputs): + config = ForecastConfig(inputs=inputs) + assert len(config.inputs) == expected_num_inputs + + +@pytest.mark.parametrize( + "output", + [ + { + "stream": "enfo", + "type": "em", + "time": "0000", + "param": "167", + "step": 3, + "levtype": "sfc", + }, + { + "stream": "enfo", + "type": "cf", + "param": "261001", + "step": 3, + "levtype": "sfc", + "time": "0000", + }, + { + "stream": "enfo", + "type": "pf", + "param": "261001", + "step": 3, + "levtype": "sfc", + "time": "0000", + "number": [1, 2, 3], + }, + { + "stream": "enfo", + "type": "ep", + "param": "131020", + "step": "120-168", + "date": "20250314", + "time": "1200", + "levtype": "pl", + "levelist": 250, + }, + { + "stream": "eefo", + "levtype": "sfc", + "type": "efi", + "param": "132167", + "step": "0-168", + "date": "20250315", + "time": "0000", + }, + { + "stream": "msmm", + "levtype": "sfc", + "type": "fcmean", + "param": "207", + "fcmonth": 1, + "date": "20241001", + "number": list(range(0, 51)), + "time": "0000", + }, + { + "stream": "enfo", + "levtype": "sfc", + "type": "ep", + "param": "131060", + "step": "0-24", + "time": "0000", + }, + ], + ids=["ensms", "thermofeel", "thermo_pf", "t850", "efi", "monthly", "prob"], +) +def test_inputs(request, output): + expected_inputs = INPUTS[request.node.callspec.id] + input_schema = InputSchema(schema("inputs")) + step_schema = StepSchema(schema("windows")) + inputs = input_schema.inputs(output, step_schema) + assert list(inputs) == expected_inputs + + expanded_inputs = sum([list(expand(x)) for x in expected_inputs], []) + generated = list( + input_schema.outputs(expanded_inputs, step_schema, output_template=output) + ) + assert len(generated) == 1 + assert generated[0][0] == output + assert generated[0][1] == expected_inputs + + +@pytest.mark.parametrize( + "out_type, num_outputs", + [["em", 1], ["cf", 12], ["ep", 52], ["efi", 1], ["fcmean", 3], ["ep", 7]], + ids=["ensms", "thermofeel", "t850", "efi", "monthly", "prob"], +) +def test_outputs(request, out_type, num_outputs): + expanded_inputs = sum( + [list(expand(x)) for x in INPUTS[request.node.callspec.id]], [] + ) + input_schema = InputSchema(schema("inputs")) + step_schema = StepSchema(schema("windows")) + generated = list( + input_schema.outputs( + expanded_inputs, step_schema, output_template={"type": out_type} + ) + ) + assert len(generated) == num_outputs + + +def test_input_format(): + expanded_inputs = sum( + [list(expand(x, exclude=["levelist", "number"])) for x in INPUTS["sfc-pl"]], [] + ) + input_schema = InputSchema(schema("inputs")) + step_schema = StepSchema(schema("windows")) + generated = list( + input_schema.outputs( + expanded_inputs, step_schema, output_template={"type": "em"} + ) + ) + expected_outputs = [ + { + "stream": "enfo", + "levtype": "pl", + "levelist": [250, 850], + "param": "130", + "step": 6, + "type": "em", + "time": "0000", + }, + { + "stream": "enfo", + "levtype": "sfc", + "param": "167", + "step": 6, + "type": "em", + "time": "0000", + }, + ] + for out, inputs in generated: + assert out in expected_outputs + for inp in inputs: + assert inp in expanded_inputs + + +@pytest.mark.parametrize( + "inputs, template, num_outputs", + [ + [INPUTS["t850"], {"type": "em", "step": 120}, 1], + [ + [ + { + "stream": "oper", + "param": [ + "165", + "166", + "167", + "168", + "169", + "175", + "176", + "177", + "228021", + "47", + "228", + ], + "step": [2, 3], + "type": "fc", + "levtype": "sfc", + "time": "0000", + } + ], + {"type": "fc"}, + 20, + ], + [ + [ + { + "stream": "enfo", + "param": ["228246", "228247"], + "type": "cf", + "levtype": "sfc", + "time": "0000", + } + ], + {"type": "cf"}, + 0, + ], + [ + [ + { + "stream": "enfo", + "param": "129", + "type": "cf", + "levtype": "sfc", + "step": 3, + "time": "0000", + }, + { + "stream": "enfo", + "param": "129", + "type": "pf", + "levtype": "sfc", + "number": list(range(1, 51)), + "step": 3, + "time": "0000", + }, + { + "stream": "enfo", + "param": "129", + "type": "cf", + "levtype": "pl", + "levelist": [50, 100], + "step": 3, + "time": "0000", + }, + { + "stream": "enfo", + "param": "129", + "type": "pf", + "levtype": "pl", + "number": list(range(1, 51)), + "levelist": [50, 100], + "step": 3, + "time": "0000", + }, + ], + {"levtype": "pl", "levelist": 50, "type": "em"}, + 1, + ], + ], + ids=["redundant-steps", "redundant-params", "not-from-inputs", "levels"], +) +def test_redundant_inputs(inputs, template, num_outputs): + expanded_inputs = sum([list(expand(x)) for x in inputs], []) + input_schema = InputSchema(schema("inputs")) + step_schema = StepSchema(schema("windows")) + generated = list( + input_schema.outputs(expanded_inputs, step_schema, output_template=template) + ) + assert len(generated) == num_outputs + + +@pytest.mark.parametrize( + "number, updates", + [ + [0, {"type": "cf"}], + [[0, 1], [{"type": "cf"}, {"type": "pf", "number": 1}]], + [1, {"type": "pf", "number": 1}], + ], + ids=["cf", "cf-and-pf", "pf"], +) +def test_fcstat_inputs(number, updates): + input_schema = InputSchema(schema("inputs")) + step_schema = StepSchema(schema("windows")) + output = { + "stream": "eefo", + "type": "fcmean", + "number": number, + "param": "167", + "step": "0-168", + "time": "0000", + } + inputs = input_schema.inputs(output, step_schema) + base_input = output.copy() + base_input.pop("number") + expected = update_request({**base_input, "step": list(range(6, 169, 6))}, updates) + assert list(inputs) == expected diff --git a/pproc/tests/schema/test_schema.py b/pproc/tests/schema/test_schema.py new file mode 100644 index 00000000..93ff7f83 --- /dev/null +++ b/pproc/tests/schema/test_schema.py @@ -0,0 +1,452 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import pytest +import os + +from pproc.schema.schema import Schema + +from conftest import schema + + +@pytest.mark.parametrize( + "req, config, num_generated", + [ + [ + { + "class": "od", + "stream": "msmm", + "expver": "0001", + "levtype": "sfc", + "domain": "g", + "param": 167, + "date": "20241001", + "time": "0", + "fcmonth": 1, + "type": "fcmean", + }, + { + "entrypoint": "pproc-monthly-stats", + "name": "167_sfc", + "interp_keys": { + "intgrid": "none", + "legendre-loader": "shmem", + "matrix-loader": "file-io", + }, + "dtype": "float64", + "inputs": [ + { + "class": "od", + "stream": "mmsf", + "expver": "0001", + "levtype": "sfc", + "domain": "g", + "param": "167", + "date": "20241001", + "time": "0000", + "type": "fc", + "step": list(range(6, 745, 6)), + "number": list(range(0, 51)), + }, + ], + "accumulations": { + "step": { + "type": "legacywindow", + "operation": "mean", + "metadata": {"type": "fcmean", "bitsPerValue": 16}, + "name": { + "type": "monthly", + "date": "20241001", + }, + } + }, + "metadata": { + "stream": "msmm", + }, + }, + 1, + ], + [ + { + "class": "od", + "stream": "eefo", + "expver": "0001", + "levtype": "sfc", + "domain": "g", + "param": 172228, + "date": "20241001", + "time": "00", + "step": "0-168", + "type": "fcmean", + "number": [0, 1, 2, 3], + }, + { + "entrypoint": "pproc-accumulate", + "name": "228_sfc", + "interp_keys": { + "intgrid": "none", + "legendre-loader": "shmem", + "matrix-loader": "file-io", + }, + "dtype": "float64", + "accumulations": { + "step": { + "type": "legacywindow", + "operation": "mean", + "deaccumulate": True, + "metadata": { + "type": "fcmean", + }, + "name": { + "type": "default", + "length": 168, + }, + } + }, + "vmin": 0.0, + "preprocessing": [ + { + "operation": "scale", + "value": 0.00001157407, + } + ], + "inputs": [ + { + "class": "od", + "stream": "eefo", + "expver": "0001", + "levtype": "sfc", + "domain": "g", + "param": "228", + "date": "20241001", + "time": "0000", + "type": "cf", + "step": list(range(0, 169, 24)), + }, + { + "class": "od", + "stream": "eefo", + "expver": "0001", + "levtype": "sfc", + "domain": "g", + "param": "228", + "date": "20241001", + "time": "0000", + "type": "pf", + "step": list(range(0, 169, 24)), + "number": list(range(1, 4)), + }, + ], + "metadata": { + "paramId": 172228, + }, + }, + 2, + ], + [ + { + "class": "od", + "stream": "enfo", + "expver": "0001", + "levtype": "pl", + "levelist": [250, 850], + "domain": "g", + "param": "130", + "date": "20241001", + "time": "00", + "step": 12, + "type": "em", + "target_grid": "O640", + }, + { + "entrypoint": "pproc-ensms", + "name": "130_pl", + "interp_keys": { + "intgrid": "none", + "legendre-loader": "shmem", + "matrix-loader": "file-io", + }, + "dtype": "float64", + "inputs": [ + { + "class": "od", + "stream": "enfo", + "expver": "0001", + "levtype": "pl", + "domain": "g", + "param": "130", + "date": "20241001", + "time": "0000", + "type": "cf", + "levelist": [250, 850], + "step": 12, + "target_grid": "O640", + }, + { + "class": "od", + "stream": "enfo", + "expver": "0001", + "levtype": "pl", + "domain": "g", + "param": "130", + "date": "20241001", + "time": "0000", + "type": "pf", + "levelist": [250, 850], + "step": 12, + "number": list(range(1, 51)), + "target_grid": "O640", + }, + ], + "metadata": { + "bitsPerValue": 16, + "numberOfForecastsInEnsemble": "{num_fields}:int", + "perturbationNumber": 0, + }, + }, + 1, + ], + ], + ids=["2t", "tp", "T"], +) +def test_schema_from_output(req, config, num_generated): + test_schema = Schema(**schema()) + assert config == test_schema.config_from_output(req) + + generated = test_schema.config_from_input( + config["inputs"], {k: req[k] for k in ["stream", "type", "param"]} + ) + assert len(list(generated)) == num_generated + + +@pytest.mark.parametrize( + "entrypoint, req, num_expected, expected", + [ + [ + "pproc-accumulate", + [ + { + "class": "od", + "stream": "enfo", + "expver": "0001", + "levtype": "sfc", + "domain": "g", + "param": "167", + "date": "20241001", + "time": "0", + "step": list(range(0, 169, 6)), + "type": "pf", + "number": list(range(1, 11)), + }, + { + "class": "od", + "stream": "enfo", + "expver": "0001", + "levtype": "sfc", + "domain": "g", + "param": "167", + "date": "20241001", + "time": "0", + "step": list(range(0, 169, 6)), + "type": "cf", + }, + ], + 8, + { + "entrypoint": "pproc-accumulate", + "name": "167_sfc", + "inputs": [ + { + "class": "od", + "stream": "enfo", + "expver": "0001", + "levtype": "sfc", + "domain": "g", + "param": "167", + "date": "20241001", + "time": "0000", + "type": "cf", + "step": list(range(6, 169, 6)), + } + ], + "accumulations": { + "step": { + "type": "legacywindow", + "operation": "mean", + "metadata": {"type": "fcmean"}, + "name": { + "type": "default", + "length": 168, + }, + } + }, + "interp_keys": { + "intgrid": "none", + "legendre-loader": "shmem", + "matrix-loader": "file-io", + }, + "dtype": "float64", + "metadata": {}, + }, + ], + [ + "pproc-monthly-stats", + [ + { + "class": "od", + "stream": "mmsf", + "expver": "0001", + "levtype": "sfc", + "domain": "g", + "param": 228, + "date": "20241001", + "time": "00", + "step": list(range(0, 5161, 6)), + "number": list(range(1, 21)), + "type": "fc", + } + ], + 21, + { + "entrypoint": "pproc-monthly-stats", + "name": "228_sfc", + "accumulations": { + "step": { + "type": "legacywindow", + "operation": "mean", + "deaccumulate": True, + "metadata": { + "type": "fcmean", + "bitsPerValue": 16, + }, + "name": { + "type": "monthly", + "date": "20241001", + }, + } + }, + "vmin": 0.0, + "dtype": "float64", + "preprocessing": [ + { + "operation": "scale", + "value": 0.00001157407, + } + ], + "inputs": [ + { + "class": "od", + "stream": "mmsf", + "expver": "0001", + "levtype": "sfc", + "domain": "g", + "param": "228", + "date": "20241001", + "time": "0000", + "type": "fc", + "step": list(range(0, 745, 24)), + "number": list(range(1, 21)), + } + ], + "interp_keys": { + "intgrid": "none", + "legendre-loader": "shmem", + "matrix-loader": "file-io", + }, + "metadata": { + "paramId": 172228, + "stream": "msmm", + }, + }, + ], + [ + "pproc-ensms", + [ + { + "class": "od", + "stream": "enfo", + "expver": "0001", + "levtype": "pl", + "levelist": [250, 850], + "domain": "g", + "param": "130", + "date": "20241001", + "time": "0", + "step": [0, 6, 12, 18, 24], + "type": "pf", + "number": list(range(1, 51)), + }, + { + "class": "od", + "stream": "enfo", + "expver": "0001", + "levtype": "pl", + "levelist": [250, 850], + "domain": "g", + "param": "130", + "date": "20241001", + "time": "0", + "step": [0, 6, 12, 18, 24], + "type": "cf", + }, + ], + 10, + { + "entrypoint": "pproc-ensms", + "name": "130_pl", + "inputs": [ + { + "class": "od", + "stream": "enfo", + "expver": "0001", + "levtype": "pl", + "levelist": [250, 850], + "domain": "g", + "param": "130", + "date": "20241001", + "time": "0000", + "type": "cf", + "step": 0, + }, + { + "class": "od", + "stream": "enfo", + "expver": "0001", + "levtype": "pl", + "levelist": [250, 850], + "domain": "g", + "param": "130", + "date": "20241001", + "time": "0000", + "type": "pf", + "step": 0, + "number": list(range(1, 51)), + }, + ], + "interp_keys": { + "intgrid": "none", + "legendre-loader": "shmem", + "matrix-loader": "file-io", + }, + "dtype": "float64", + "metadata": { + "bitsPerValue": 16, + "numberOfForecastsInEnsemble": "{num_fields}:int", + "perturbationNumber": 0, + }, + }, + ], + ], + ids=["2t", "tp", "T"], +) +def test_schema_from_input(entrypoint, req, num_expected, expected): + test_schema = Schema(**schema()) + configs = list(test_schema.config_from_input(req, entrypoint=entrypoint)) + assert len(configs) == num_expected + assert configs[0] == expected diff --git a/pproc/tests/schema/test_step_schema.py b/pproc/tests/schema/test_step_schema.py new file mode 100644 index 00000000..a5b6f5ac --- /dev/null +++ b/pproc/tests/schema/test_step_schema.py @@ -0,0 +1,123 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +import pytest + +from pproc.schema.step import StepType, StepSchema + +from conftest import schema + + +@pytest.mark.parametrize( + "config, steps, expected", + [ + [{"type": "instantaneous"}, [0, 1, 2], [0, 1, 2]], + [{"type": "instantaneous", "deaccumulate": True}, [0, 1, 2], [1, 2]], + [{"type": "instantaneous", "start": 1, "end": 2}, [0, 1, 2, 3], [1, 2]], + [{"type": "instantaneous", "interval": 2}, [0, 1, 2, 3, 4], [0, 2, 4]], + [{"type": "instantaneous", "start": 3, "end": 6}, [0, 1, 2], []], + [ + {"type": "range", "interval": 3, "width": 6}, + list(range(0, 10)), + ["0-6", "3-9"], + ], + [ + {"type": "range", "interval": 1, "width": 1}, + list(range(0, 5)), + ["0-1", "1-2", "2-3", "3-4"], + ], + [ + {"type": "range", "start": 2, "end": 8, "interval": 2, "width": 2}, + list(range(0, 7)), + ["2-4", "4-6"], + ], + [ + {"type": "range", "start": 12, "end": 24, "interval": 2, "width": 4}, + list(range(0, 10)), + [], + ], + [{"type": "monthly", "date": "20240601"}, list(range(0, 800)), [1]], + [{"type": "monthly", "date": "20240601"}, list(range(0, 500)), []], + [{"type": "monthly", "date": "20240601"}, [0], []], + ], +) +def test_step_type(config, steps, expected): + step_type = StepType(**config).root + assert step_type.generate_steps(steps) == expected + + +def test_in_steps(): + test_schema = StepSchema(schema("windows")) + in_steps = test_schema.in_steps( + {"stream": "enfo", "type": "em", "param": "167", "time": "0000"} + ) + assert in_steps == ( + list(range(0, 91)) + list(range(93, 145, 3)) + list(range(150, 361, 6)) + ) + + +@pytest.mark.parametrize( + "out, expected, in_steps", + [ + [ + {"stream": "enfo", "type": "em", "param": "167", "time": "0000"}, + list(range(0, 145, 3)) + list(range(150, 361, 6)), + None, + ], + [ + {"stream": "enfo", "type": "em", "param": "167", "time": "0000"}, + list(range(0, 361, 12)), + list(range(0, 361, 12)), + ], + [ + {"stream": "enfo", "type": "cf", "param": "261001", "time": "0000"}, + list(range(1, 91)) + list(range(93, 145, 3)) + list(range(150, 361, 6)), + None, + ], + [ + {"stream": "eefo", "type": "fcmean", "param": "167", "time": "0000"}, + [f"{x}-{x+168}" for x in list(range(0, 1104 - 168 + 1, 24))], + None, + ], + [ + { + "stream": "msmm", + "type": "fcmean", + "param": "167", + "date": "20241001", + "time": "0000", + }, + list(range(1, 8)), + None, + ], + [ + {"stream": "enfo", "type": "ep", "param": "131064", "time": "0000"}, + ["120-240", "240-360", "120-168", "168-240"], + None, + ], + [ + {"stream": "oper", "type": "fc", "param": "207", "time": "0000"}, + list(range(1, 91)), + list(range(1, 91)), + ], + ], + ids=[ + "ensms_default", + "ensms_insteps", + "deaccumulate", + "weekly", + "monthly", + "prob", + "fc", + ], +) +def test_out_steps(out, expected, in_steps): + test_schema = StepSchema(schema("windows")) + _, out_steps = test_schema.out_steps(out, in_steps) + assert out_steps == expected diff --git a/pproc/tests/templates/v2/clustereps.yaml b/pproc/tests/templates/clustereps.yaml similarity index 99% rename from pproc/tests/templates/v2/clustereps.yaml rename to pproc/tests/templates/clustereps.yaml index f87f7dd6..35c9a579 100644 --- a/pproc/tests/templates/v2/clustereps.yaml +++ b/pproc/tests/templates/clustereps.yaml @@ -185,4 +185,4 @@ indexes: null deterministic_is_control: true date: 2024-05-07 00:00:00 compute_spread: true -pca_output: null +pca_output: null \ No newline at end of file diff --git a/pproc/tests/templates/v2/ensms.yaml b/pproc/tests/templates/ensms.yaml similarity index 92% rename from pproc/tests/templates/v2/ensms.yaml rename to pproc/tests/templates/ensms.yaml index 16bb81a3..bf5aeba0 100644 --- a/pproc/tests/templates/v2/ensms.yaml +++ b/pproc/tests/templates/ensms.yaml @@ -4,7 +4,7 @@ parallelisation: queue_size: 2 parameters: 2t: - inputs: + inputs: fc: request: param: '167.128' @@ -34,12 +34,12 @@ inputs: type: pf number: [1, 2, 3, 4, 5] source: - type: "fdb" + type: "fdb" outputs: default: metadata: mars.expver: '0001' numberOfForecastsInEnsemble: 6 perturbationNumber: 0 - target: - type: "fdb" + target: + type: "fdb" \ No newline at end of file diff --git a/pproc/tests/templates/v2/extreme.yaml b/pproc/tests/templates/extreme.yaml similarity index 94% rename from pproc/tests/templates/v2/extreme.yaml rename to pproc/tests/templates/extreme.yaml index 22d319bf..e38d6382 100644 --- a/pproc/tests/templates/v2/extreme.yaml +++ b/pproc/tests/templates/extreme.yaml @@ -16,7 +16,7 @@ parameters: request: param: 228004 step: - 12-36: 0-24 + 12-36: 0-24 accumulations: step: type: legacywindow @@ -52,10 +52,10 @@ inputs: stream: enfo date: 20240507 time: 12 - type: pf + type: pf number: [1, 2, 3, 4, 5] source: - type: fdb + type: fdb clim: request: class: od @@ -71,4 +71,4 @@ inputs: outputs: default: target: - type: fdb + type: fdb \ No newline at end of file diff --git a/pproc/tests/templates/fdb/schema b/pproc/tests/templates/fdb/schema index 0eb23544..32aa964f 100644 --- a/pproc/tests/templates/fdb/schema +++ b/pproc/tests/templates/fdb/schema @@ -586,3 +586,4 @@ method: Integer; [ class=cs, expver, stream, date:Default, time, domain [ type, levtype [ step, levelist?, param ]]] + diff --git a/pproc/tests/templates/v2/prob.yaml b/pproc/tests/templates/prob.yaml similarity index 97% rename from pproc/tests/templates/v2/prob.yaml rename to pproc/tests/templates/prob.yaml index 0dfbc3ca..3a30a28c 100644 --- a/pproc/tests/templates/v2/prob.yaml +++ b/pproc/tests/templates/prob.yaml @@ -20,7 +20,7 @@ parameters: metadata: paramId: 131073 value: 273.15 -inputs: +inputs: fc: request: class: od @@ -41,5 +41,5 @@ outputs: localDefinitionNumber: 5 mars.expver: '0001' type: ep - target: + target: type: "fdb" diff --git a/pproc/tests/templates/v2/quantiles.yaml b/pproc/tests/templates/quantiles.yaml similarity index 92% rename from pproc/tests/templates/v2/quantiles.yaml rename to pproc/tests/templates/quantiles.yaml index 94a3f8fd..faf1594f 100644 --- a/pproc/tests/templates/v2/quantiles.yaml +++ b/pproc/tests/templates/quantiles.yaml @@ -5,7 +5,7 @@ parallelisation: quantiles: 3 parameters: 2t: - inputs: + inputs: fc: request: param: '167.128' @@ -39,10 +39,10 @@ inputs: type: pf number: [1, 2, 3, 4, 5] source: - type: "fdb" + type: "fdb" outputs: default: metadata: mars.expver: '0001' - target: - type: "fdb" + target: + type: "fdb" \ No newline at end of file diff --git a/pproc/tests/templates/v2/t850.yaml b/pproc/tests/templates/t850.yaml similarity index 97% rename from pproc/tests/templates/v2/t850.yaml rename to pproc/tests/templates/t850.yaml index 658cbc25..9053bc68 100644 --- a/pproc/tests/templates/v2/t850.yaml +++ b/pproc/tests/templates/t850.yaml @@ -55,7 +55,7 @@ parameters: bitsPerValue: 24 - coords: [[0], [12]] operation: maximum - std_anomaly: true + std_anomaly: true thresholds: - metadata: {"paramId": 133093} comparison: '>' @@ -71,7 +71,7 @@ parameters: packingType: grid_ccsds - coords: [[0], [12]] operation: minimum - std_anomaly: true + std_anomaly: true thresholds: - metadata: {"paramId": 133096} comparison: < @@ -140,4 +140,4 @@ outputs: localDefinitionNumber: 5 bitsPerValue: 8 target: - type: fdb + type: fdb \ No newline at end of file diff --git a/pproc/tests/templates/v2/thermo.yaml b/pproc/tests/templates/thermo.yaml similarity index 87% rename from pproc/tests/templates/v2/thermo.yaml rename to pproc/tests/templates/thermo.yaml index 8b69a6c7..d2c7e4ff 100644 --- a/pproc/tests/templates/v2/thermo.yaml +++ b/pproc/tests/templates/thermo.yaml @@ -1,7 +1,7 @@ parallelisation: n_par_compute: 2 -defs: - base_request: &base_request +defs: + base_request: &base_request class: od domain: g expver: '0001' @@ -29,9 +29,9 @@ parameters: step: coords: [[0]] indices: - inputs: - accum: - request: + inputs: + accum: + request: <<: *base_request date: 20240605 param: *accum_params @@ -53,7 +53,7 @@ parameters: - wbt - wbgt - 2r -inputs: +inputs: inst: request: <<: *base_request @@ -76,4 +76,4 @@ outputs: path: "intermediate.grib" indices: target: - type: fdb + type: fdb \ No newline at end of file diff --git a/pproc/tests/templates/v3/ensms.yaml b/pproc/tests/templates/v3/ensms.yaml deleted file mode 100644 index 3d8893ba..00000000 --- a/pproc/tests/templates/v3/ensms.yaml +++ /dev/null @@ -1,223 +0,0 @@ -log: - level: INFO - format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' -execution: - hosts: 1 - workers: 1 -products: -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - oceanAtmosphereCoupling: 2 - legBaseDate: 20240507 - legBaseTime: 1200 - legNumber: 1 - perturbationNumber: 0 - bitsPerValue: 16 - numberOfForecastsInEnsemble: '{num_fields}:int' - stream: enfo - type: em - operation: mean - output: - targets: - - name: fdb - request: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: cf - param: 167 - step: 12 - - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pf - param: 167 - step: 12 - number: - - 1 - - 2 - - 3 - - 4 - - 5 - dtype: float64 -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - oceanAtmosphereCoupling: 2 - legBaseDate: 20240507 - legBaseTime: 1200 - legNumber: 1 - perturbationNumber: 0 - bitsPerValue: 16 - numberOfForecastsInEnsemble: '{num_fields}:int' - stream: enfo - type: es - operation: std - output: - targets: - - name: fdb - request: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: cf - param: 167 - step: 12 - - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pf - param: 167 - step: 12 - number: - - 1 - - 2 - - 3 - - 4 - - 5 - dtype: float64 -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - oceanAtmosphereCoupling: 2 - legBaseDate: 20240507 - legBaseTime: 1200 - legNumber: 1 - perturbationNumber: 0 - bitsPerValue: 16 - numberOfForecastsInEnsemble: '{num_fields}:int' - stream: enfo - type: em - operation: mean - output: - targets: - - name: fdb - request: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: cf - param: 167 - step: 36 - - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pf - param: 167 - step: 36 - number: - - 1 - - 2 - - 3 - - 4 - - 5 - dtype: float64 -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - oceanAtmosphereCoupling: 2 - legBaseDate: 20240507 - legBaseTime: 1200 - legNumber: 1 - perturbationNumber: 0 - bitsPerValue: 16 - numberOfForecastsInEnsemble: '{num_fields}:int' - stream: enfo - type: es - operation: std - output: - targets: - - name: fdb - request: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: cf - param: 167 - step: 36 - - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pf - param: 167 - step: 36 - number: - - 1 - - 2 - - 3 - - 4 - - 5 - dtype: float64 diff --git a/pproc/tests/templates/v3/prob.yaml b/pproc/tests/templates/v3/prob.yaml deleted file mode 100644 index 77ffd86b..00000000 --- a/pproc/tests/templates/v3/prob.yaml +++ /dev/null @@ -1,157 +0,0 @@ -log: - level: INFO - format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' -execution: - hosts: 1 - workers: 1 -products: -- name: ensemble - preprocessing: - actions: [] - accumulations: - step: - operation: minimum - coords: - - - 12 - deaccumulate: false - statistics: - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - paramId: 131073 - stream: enfo - type: ep - operation: threshold_probability - thresholds: - - lower_scale_factor: 2 - lower_comparison: <= - lower_value: 273.15 - upper_scale_factor: 0 - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - domain: g - expver: '0001' - levtype: sfc - stream: enfo - type: cf - date: '20240507' - time: '1200' - param: '167' - step: 12 - - class: od - domain: g - expver: '0001' - levtype: sfc - stream: enfo - type: pf - date: '20240507' - time: '1200' - param: '167' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 12 - dtype: float64 - output: - targets: - - name: fdb - request: - class: od - domain: g - expver: '0001' - levtype: sfc - stream: enfo - type: ep - date: 20240507 - time: 12 - param: 131073 - step: 12 - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: - step: - operation: minimum - coords: - - 24 - - 36 - deaccumulate: false - name: - type: default - length: 24 - statistics: - metadata: - localDefinitionNumber: 5 - bitsPerValue: 8 - paramId: 131073 - stream: enfo - type: ep - operation: threshold_probability - thresholds: - - lower_scale_factor: 2 - lower_comparison: <= - lower_value: 273.15 - upper_scale_factor: 0 - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - domain: g - expver: '0001' - levtype: sfc - stream: enfo - type: cf - date: '20240507' - time: '1200' - param: '167' - step: - - 24 - - 36 - - class: od - domain: g - expver: '0001' - levtype: sfc - stream: enfo - type: pf - date: '20240507' - time: '1200' - param: '167' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: - - 24 - - 36 - dtype: float64 - output: - targets: - - name: fdb - request: - class: od - domain: g - expver: '0001' - levtype: sfc - stream: enfo - type: ep - date: 20240507 - time: 12 - param: 131073 - step: 12-36 - metadata: {} -input_overrides: {} -output_overrides: {} diff --git a/pproc/tests/templates/v3/quantiles.yaml b/pproc/tests/templates/v3/quantiles.yaml deleted file mode 100644 index 6a337172..00000000 --- a/pproc/tests/templates/v3/quantiles.yaml +++ /dev/null @@ -1,1209 +0,0 @@ -log: - level: INFO - format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' -execution: - hosts: 1 - workers: 1 -products: -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: 0:3 - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 12 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 12 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 12 - quantile: 0:3 - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '1:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 12 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 12 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 12 - quantile: '1:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '2:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 12 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 12 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 12 - quantile: '2:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '3:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 12 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 12 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 12 - quantile: '3:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: 0:3 - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 18 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 18 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 18 - quantile: 0:3 - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '1:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 18 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 18 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 18 - quantile: '1:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '2:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 18 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 18 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 18 - quantile: '2:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '3:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 18 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 18 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 18 - quantile: '3:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: 0:3 - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 24 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 24 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 24 - quantile: 0:3 - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '1:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 24 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 24 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 24 - quantile: '1:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '2:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 24 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 24 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 24 - quantile: '2:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '3:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 24 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 24 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 24 - quantile: '3:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: 0:3 - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 30 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 30 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 30 - quantile: 0:3 - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '1:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 30 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 30 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 30 - quantile: '1:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '2:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 30 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 30 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 30 - quantile: '2:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '3:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 30 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 30 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 30 - quantile: '3:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: 0:3 - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 36 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 36 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 36 - quantile: 0:3 - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '1:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 36 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 36 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 36 - quantile: '1:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '2:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 36 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 36 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 36 - quantile: '2:3' - metadata: {} -- name: ensemble - preprocessing: - actions: [] - accumulations: {} - statistics: - metadata: - localDefinitionNumber: 30 - stream: enfo - type: pb - operation: quantiles - quantiles: '3:3' - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: cf - param: '167.128' - step: 36 - - class: od - date: '20240507' - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: '1200' - type: pf - param: '167.128' - number: - - 1 - - 2 - - 3 - - 4 - - 5 - step: 36 - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - date: 20240507 - domain: g - levtype: sfc - expver: '0001' - stream: enfo - time: 12 - type: pb - param: '167.128' - step: 36 - quantile: '3:3' - metadata: {} -input_overrides: {} -output_overrides: {} diff --git a/pproc/tests/templates/v3/thermo.yaml b/pproc/tests/templates/v3/thermo.yaml deleted file mode 100644 index 5413bccd..00000000 --- a/pproc/tests/templates/v3/thermo.yaml +++ /dev/null @@ -1,886 +0,0 @@ -log: - level: INFO - format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' -execution: - hosts: 1 - workers: 1 -products: -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: ppruntime.thermal_indices.calc_cossza - params: - - '167' - - '228021' - deaccumulate: - - '228021' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 214001 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_mrt - params: - - '167' - - '214001' - - '47' - - '169' - - '228021' - - '175' - - '177' - - '176' - deaccumulate: - - '47' - - '169' - - '228021' - - '175' - - '177' - - '176' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 261002 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: - - 0 - - 1 - expver: '0001' - levtype: sfc - param: - - '47' - - '228021' - - '169' - - '175' - - '176' - - '177' - date: '20260720' - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: '167' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 261002 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: norm - params: - - '165' - - '166' - metadata: - paramId: 207 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_cossza - params: - - '167' - - '228021' - deaccumulate: - - '228021' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 214001 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_mrt - params: - - '167' - - '214001' - - '47' - - '169' - - '228021' - - '175' - - '177' - - '176' - deaccumulate: - - '47' - - '169' - - '228021' - - '175' - - '177' - - '176' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 261002 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_utci - params: - - '167' - - '168' - - '207' - - '261002' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 261001 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: - - 0 - - 1 - expver: '0001' - levtype: sfc - param: - - '169' - - '175' - - '176' - - '177' - - '228021' - - '47' - date: '20260720' - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: - - '165' - - '166' - - '167' - - '168' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 261001 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: ppruntime.thermal_indices.calc_heatx - params: - - '167' - - '168' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 260004 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: - - '167' - - '168' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 260004 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: norm - params: - - '165' - - '166' - metadata: - paramId: 207 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_wcf - params: - - '167' - - '207' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 260005 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: - - '165' - - '166' - - '167' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 260005 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: norm - params: - - '165' - - '166' - metadata: - paramId: 207 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_rhp - params: - - '167' - - '168' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 260242 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_aptmp - params: - - '167' - - '260242' - - '207' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 260255 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: - - '165' - - '166' - - '167' - - '168' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 260255 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: ppruntime.thermal_indices.calc_rhp - params: - - '167' - - '168' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 260242 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: - - '167' - - '168' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 260242 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: ppruntime.thermal_indices.calc_hmdx - params: - - '167' - - '168' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 261016 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: - - '167' - - '168' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 261016 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: norm - params: - - '165' - - '166' - metadata: - paramId: 207 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_rhp - params: - - '167' - - '168' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 260242 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_nefft - params: - - '167' - - '207' - - '260242' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 261018 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: - - '165' - - '166' - - '167' - - '168' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 261018 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: norm - params: - - '165' - - '166' - metadata: - paramId: 207 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_cossza - params: - - '167' - - '228021' - deaccumulate: - - '228021' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 214001 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_mrt - params: - - '167' - - '214001' - - '47' - - '169' - - '228021' - - '175' - - '177' - - '176' - deaccumulate: - - '47' - - '169' - - '228021' - - '175' - - '177' - - '176' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 261002 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_gt - params: - - '167' - - '207' - - '261002' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 261015 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: - - 0 - - 1 - expver: '0001' - levtype: sfc - param: - - '169' - - '175' - - '176' - - '177' - - '228021' - - '47' - date: '20260720' - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: - - '165' - - '166' - - '167' - - '168' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 261015 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: norm - params: - - '165' - - '166' - metadata: - paramId: 207 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_cossza - params: - - '167' - - '228021' - deaccumulate: - - '228021' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 214001 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_mrt - params: - - '167' - - '214001' - - '47' - - '169' - - '228021' - - '175' - - '177' - - '176' - deaccumulate: - - '47' - - '169' - - '228021' - - '175' - - '177' - - '176' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 261002 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_wbgt - params: - - '167' - - '168' - - '207' - - '261002' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 261014 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: - - 0 - - 1 - expver: '0001' - levtype: sfc - param: - - '169' - - '175' - - '176' - - '177' - - '228021' - - '47' - date: '20260720' - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: - - '165' - - '166' - - '167' - - '168' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 261014 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -- name: ensemble - preprocessing: - actions: - - operation: thermal_index - function: ppruntime.thermal_indices.calc_rhp - params: - - '167' - - '168' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 260242 - join: true - - operation: thermal_index - function: ppruntime.thermal_indices.calc_wbt - params: - - '167' - - '260242' - metadata: - edition: 2 - bitsPerValue: 16 - packingType: grid_ccsds - typeOfGeneratingProcess: 2 - paramId: 261023 - join: false - accumulations: {} - inputs: - fc: - sources: - - name: fdb - stream: true - requests: - - class: od - stream: oper - type: fc - time: '1200' - domain: g - step: 1 - expver: '0001' - levtype: sfc - param: - - '167' - - '168' - date: '20260720' - expand_exclude: [] - dtype: float32 - output: - targets: - - name: fdb - request: - class: od - stream: oper - type: fc - levtype: sfc - domain: g - param: 261023 - date: '20260720' - time: 12 - expver: '0001' - step: 1 - metadata: {} -input_overrides: {} -output_overrides: {} diff --git a/pproc/tests/templates/v2/wind.yaml b/pproc/tests/templates/wind.yaml similarity index 92% rename from pproc/tests/templates/v2/wind.yaml rename to pproc/tests/templates/wind.yaml index 9f25ac09..01753ab8 100644 --- a/pproc/tests/templates/v2/wind.yaml +++ b/pproc/tests/templates/wind.yaml @@ -1,7 +1,4 @@ -parallelisation: - n_par_compute: 2 - n_par_read: 2 - queue_size: 2 +parallelisation: 1 inputs: fc: request: @@ -52,4 +49,4 @@ outputs: indicatorOfParameter: 10 mars.expver: '0001' target: - type: fdb + type: fdb \ No newline at end of file diff --git a/pproc/tests/test_ensms.py b/pproc/tests/test_ensms.py new file mode 100644 index 00000000..3687b688 --- /dev/null +++ b/pproc/tests/test_ensms.py @@ -0,0 +1,53 @@ +# (C) Copyright 2021- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +# coding: utf-8 + +import pytest +from pproc.Config import VariableTree +from os import path + +tree = VariableTree(path.join(path.dirname(__file__), "test_ensms.yaml")) + +TESTS_VARS = ( + ( + ("ensms", 48, "t"), + { + "step": "0/to/48/by/3", + "param": 130, + "levtype": "pl", + "levelist": "250/500/850", + }, + ), + ( + ("ensms", 96, "mx2t6"), + {"step": "54/to/96/by/6", "param": 121, "levtype": "sfc", "levelist": None}, + ), + ( + ("ensms", 360, "mn2t6"), + {"step": "306/to/360/by/6", "param": 122, "levtype": "sfc", "levelist": None}, + ), +) + + +@pytest.mark.parametrize("test", TESTS_VARS) +def test_variables(test): + path, variables = test + x = tree.variables(*path) + print(x) + print(variables) + assert x == variables + + +if __name__ == "__main__": + for test in TESTS_VARS: + try: + test_variables(test) + except Exception as e: + print(e) diff --git a/pproc/tests/test_ensms.yaml b/pproc/tests/test_ensms.yaml new file mode 100644 index 00000000..526caebf --- /dev/null +++ b/pproc/tests/test_ensms.yaml @@ -0,0 +1,45 @@ +--- + +_mn2t6: &_mn2t6 { param: 122, levtype: sfc, levelist: null } +_mx2t6: &_mx2t6 { param: 121, levtype: sfc, levelist: null } + +ensms: + _base: &_base + z: { param: 129, levtype: pl, levelist: 300/500/1000 } + t: { param: 130, levtype: pl, levelist: 250/500/850 } + msl: { param: 151, levtype: sfc, levelist: null } + 2t: { param: 167, levtype: sfc, levelist: null } + 10si: { param: 207, levtype: sfc, levelist: null } + 100si: { param: 228249, levtype: sfc, levelist: null } + mn2t3: { param: 228027, levtype: sfc, levelist: null } + mx2t3: { param: 228026, levtype: sfc, levelist: null } + mn2t6: *_mn2t6 + mx2t6: *_mx2t6 + 48: + <<: *_base + step: 0/to/48/by/3 + mn2t6: { <<: *_mn2t6, step: 0/to/48/by/6 } + mx2t6: { <<: *_mx2t6, step: 0/to/48/by/6 } + 96: + <<: *_base + step: 51/to/96/by/3 + mn2t6: { <<: *_mn2t6, step: 54/to/96/by/6 } + mx2t6: { <<: *_mx2t6, step: 54/to/96/by/6 } + 144: + <<: *_base + step: 99/to/144/by/3 + mn2t6: { <<: *_mn2t6, step: 102/to/144/by/6 } + mx2t6: { <<: *_mx2t6, step: 102/to/144/by/6 } + 192: + <<: *_base + step: 144/to/192/by/6 + 240: + <<: *_base + step: 192/to/240/by/6 + 300: + <<: *_base + step: 246/to/300/by/6 + 360: + <<: *_base + step: 306/to/360/by/6 + diff --git a/pproc/tests/test_products.py b/pproc/tests/test_products.py index d66975e1..ffd54979 100644 --- a/pproc/tests/test_products.py +++ b/pproc/tests/test_products.py @@ -17,9 +17,9 @@ from pproc.ensms import main as ensms_main from pproc.extreme import main as extreme_main from pproc.quantiles import main as quantiles_main +from pproc.wind import main as wind_main from pproc.thermal_indices import main as thermo_main from pproc.clustereps.__main__ import main as clustereps_main -from ppcore.product import main as ppcore_main from conftest import DATA_DIR TEST_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -80,7 +80,7 @@ ], [ "wind", - ensms_main, + wind_main, [], { "type": "es", @@ -155,9 +155,9 @@ "clustereps", ], ) -def test_products_v2(tmpdir, monkeypatch, fdb, product, main, custom_args, req, length): +def test_products(tmpdir, monkeypatch, fdb, product, main, custom_args, req, length): monkeypatch.chdir(tmpdir) # To avoid polluting cwd with grib templates - args = [product, "--config", f"{TEST_DIR}/templates/v2/{product}.yaml"] + [ + args = [product, "--config", f"{TEST_DIR}/templates/{product}.yaml"] + [ x.format_map( { "test_dir": str(tmpdir), @@ -182,61 +182,3 @@ def test_products_v2(tmpdir, monkeypatch, fdb, product, main, custom_args, req, request.update(req) messages = list(eccodes.StreamReader(test_fdb.retrieve(request))) assert len(messages) == length - - -@pytest.mark.parametrize( - "product, req, length", - [ - [ - "ensms", - {"type": "em", "param": 167, "step": [12, 36]}, - 2, - ], - [ - "prob", - {"type": "ep", "param": 131073, "step": ["12", "12-36"]}, - 2, - ], - [ - "quantiles", - { - "type": "pb", - "param": 167, - "step": [12, 18, 24, 30, 36], - "quantile": ["{}:3".format(x) for x in range(4)], - }, - 20, - ], - [ - "thermo", - { - "stream": "oper", - "type": "fc", - "param": [261002, 261001, 260004, 260005, 260255, 260242, 261016, 261018, 261015, 261014, 261023], - "step": [1], - "date": 20260720, - "time": 12, - }, - 11, - ], - ], - ids=["ensms", "prob", "quantiles", "thermo"], -) -def test_products_v3(tmpdir, monkeypatch, fdb, product, req, length): - monkeypatch.chdir(tmpdir) # To avoid polluting cwd with grib templates - args = [product, "--config", f"{TEST_DIR}/templates/v3/{product}.yaml"] - monkeypatch.setattr("sys.argv", args) - ppcore_main() - test_fdb = pyfdb.FDB() - request = { - "class": "od", - "expver": "0001", - "stream": "enfo", - "date": 20240507, - "time": 12, - "levtype": "sfc", - "domain": "g", - } - request.update(req) - messages = list(eccodes.StreamReader(test_fdb.retrieve(request))) - assert len(messages) == length diff --git a/pproc/uv.lock b/pproc/uv.lock deleted file mode 100644 index 359f2ada..00000000 --- a/pproc/uv.lock +++ /dev/null @@ -1,2431 +0,0 @@ -version = 1 -revision = 3 -requires-python = ">=3.11" -resolution-markers = [ - "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", - "python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version < '3.14' and sys_platform == 'emscripten'", - "python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_version < '0'", -] - -[manifest] -members = [ - "pproc", - "pproc-core", -] - -[[package]] -name = "annotated-types" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, -] - -[[package]] -name = "array-api-compat" -version = "1.15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/86/12/65d297d3e425cb7fe5247b7ec14b4ed83539e9b5e89b65c15ea7ee274182/array_api_compat-1.15.0.tar.gz", hash = "sha256:53c5f922491bf15f62847afafc4e39eedfae57d218988fefb8cce39c2a9b3dea", size = 129305, upload-time = "2026-06-07T20:53:24.964Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/16/1a8fd2b19544b84575cf84ef7aa3ad4c173b756d5f087c91f85d1b295777/array_api_compat-1.15.0-py3-none-any.whl", hash = "sha256:7b1b9c53269061403fd5f45a8de349f16e7887653328bfa0c5f2d45299ff0a8e", size = 79113, upload-time = "2026-06-07T20:53:23.621Z" }, -] - -[[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, 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, 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, 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 = "certifi" -version = "2026.5.20" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" }, -] - -[[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, 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, 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" }, - { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, -] - -[[package]] -name = "cfgrib" -version = "0.9.15.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "click" }, - { name = "eccodes" }, - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591, upload-time = "2025-09-30T22:46:14.133Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123, upload-time = "2025-09-30T22:46:12.206Z" }, -] - -[[package]] -name = "cftime" -version = "1.6.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605, upload-time = "2025-10-13T18:56:26.352Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733, upload-time = "2025-10-13T18:56:00.189Z" }, - { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946, upload-time = "2025-10-13T18:56:01.262Z" }, - { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856, upload-time = "2025-10-13T19:39:12.873Z" }, - { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573, upload-time = "2025-10-13T18:56:02.788Z" }, - { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563, upload-time = "2025-10-13T18:56:04.075Z" }, - { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631, upload-time = "2025-10-13T18:56:05.159Z" }, - { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383, upload-time = "2026-01-02T21:16:47.317Z" }, - { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175, upload-time = "2025-10-13T18:56:06.398Z" }, - { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980, upload-time = "2025-10-13T18:56:08.669Z" }, - { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166, upload-time = "2025-10-13T19:39:14.109Z" }, - { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614, upload-time = "2025-10-13T18:56:09.815Z" }, - { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090, upload-time = "2025-10-13T18:56:11.442Z" }, - { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840, upload-time = "2025-10-13T18:56:12.506Z" }, - { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534, upload-time = "2026-01-02T21:16:48.784Z" }, - { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453, upload-time = "2025-10-13T18:56:13.545Z" }, - { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541, upload-time = "2025-10-13T18:56:14.612Z" }, - { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014, upload-time = "2025-10-13T19:39:15.346Z" }, - { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625, upload-time = "2025-10-13T18:56:15.745Z" }, - { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269, upload-time = "2025-10-13T18:56:17.04Z" }, - { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364, upload-time = "2025-10-13T18:56:18.05Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468, upload-time = "2026-01-02T21:16:50.193Z" }, - { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725, upload-time = "2025-10-13T18:56:19.424Z" }, - { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445, upload-time = "2025-10-13T18:56:20.853Z" }, - { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434, upload-time = "2025-10-13T19:39:17.084Z" }, - { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812, upload-time = "2025-10-13T18:56:21.971Z" }, - { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768, upload-time = "2025-10-13T18:56:24.027Z" }, - { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818, upload-time = "2025-10-13T18:56:25.376Z" }, - { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862, upload-time = "2026-01-02T20:45:02.625Z" }, - { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781, upload-time = "2026-01-02T20:45:04.818Z" }, - { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218, upload-time = "2026-01-02T20:45:06.788Z" }, - { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932, upload-time = "2026-01-02T20:45:11.194Z" }, - { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894, upload-time = "2026-01-02T20:45:16.351Z" }, - { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027, upload-time = "2026-01-02T20:45:20.023Z" }, - { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065, upload-time = "2026-01-02T20:45:23.398Z" }, -] - -[[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, 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, 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/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, - { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, - { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031, upload-time = "2026-04-02T09:26:26.865Z" }, - { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239, upload-time = "2026-04-02T09:26:28.044Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, - { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733, upload-time = "2026-04-02T09:26:30.5Z" }, - { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652, upload-time = "2026-04-02T09:26:31.709Z" }, - { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552, upload-time = "2026-04-02T09:26:34.845Z" }, - { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806, upload-time = "2026-04-02T09:26:36.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316, upload-time = "2026-04-02T09:26:37.672Z" }, - { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274, upload-time = "2026-04-02T09:26:38.93Z" }, - { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, - { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460, upload-time = "2026-04-02T09:26:41.416Z" }, - { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330, upload-time = "2026-04-02T09:26:42.554Z" }, - { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828, upload-time = "2026-04-02T09:26:44.075Z" }, - { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, - { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, - { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, - { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, - { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, - { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, - { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, - { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, - { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, - { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, - { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, - { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, - { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, - { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, - { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, - { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, - { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, - { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, - { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, - { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, - { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, - { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, - { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, - { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, - { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, - { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, - { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, - { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, - { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, - { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, - { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, - { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, - { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, - { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, - { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, - { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, - { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, - { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, - { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, - { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, - { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, - { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, - { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, - { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, - { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, - { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, - { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, - { 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]] -name = "click" -version = "8.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" }, -] - -[[package]] -name = "cloudpickle" -version = "3.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, -] - -[[package]] -name = "code-meters" -version = "0.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129, upload-time = "2024-02-23T15:50:40.138Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801, upload-time = "2024-02-23T15:50:38.443Z" }, -] - -[[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, 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, upload-time = "2022-10-25T02:36:20.889Z" }, -] - -[[package]] -name = "conflator" -version = "0.1.8" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic" }, - { name = "pyyaml" }, - { name = "rich-argparse" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cf/19/e8143a210b58494025803a684de9eb94998b7b8288f42f15fbee0161019c/conflator-0.1.8.tar.gz", hash = "sha256:9ee8958a3eebbfeb6fafc4b0b7b77c8a97d1752fd725ca8a514046a596f26508", size = 9753, upload-time = "2025-12-01T12:37:00.038Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/aa/0d6a2c96234fb5cc3d55a3f5078268ef6bc4e69d202f86b93f17b3f8d2eb/conflator-0.1.8-py3-none-any.whl", hash = "sha256:7e621da64183bc9207b3857cebaa9cd1aee52ea6cb4aea7492aa9d9a4b4968c5", size = 10806, upload-time = "2025-12-01T12:36:58.839Z" }, -] - -[[package]] -name = "dask" -version = "2026.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "cloudpickle" }, - { name = "fsspec" }, - { name = "importlib-metadata", marker = "python_full_version < '3.12'" }, - { name = "packaging" }, - { name = "partd" }, - { name = "pyyaml" }, - { name = "toolz" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d7/2a/5d8cc1579590af86576dde890254440e478c7174b93a02095ecfc2e6ba38/dask-2026.3.0.tar.gz", hash = "sha256:f7d96c8274e8a900d217c1ff6ea8d1bbf0b4c2c21e74a409644498d925eb8f85", size = 11000710, upload-time = "2026-03-18T07:10:14.945Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/f3/00bb1e867fba351e2d784170955713bee200c43ea306c59f30bd7e748192/dask-2026.3.0-py3-none-any.whl", hash = "sha256:be614b9242b0b38288060fb2d7696125946469c98a1c30e174883fd199e0428d", size = 1485630, upload-time = "2026-03-18T07:10:12.832Z" }, -] - -[[package]] -name = "decorator" -version = "5.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, -] - -[[package]] -name = "deprecation" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "packaging" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788, upload-time = "2020-04-20T14:23:38.738Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" }, -] - -[[package]] -name = "earthkit-data" -version = "0.20.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cfgrib" }, - { name = "dask" }, - { name = "deprecation" }, - { name = "earthkit-utils" }, - { name = "eccodes" }, - { name = "entrypoints" }, - { name = "filelock" }, - { name = "jinja2" }, - { name = "jsonschema" }, - { name = "lru-dict" }, - { name = "markdown" }, - { name = "multiurl" }, - { name = "netcdf4" }, - { name = "pandas" }, - { name = "pdbufr" }, - { name = "pyyaml" }, - { name = "tqdm" }, - { name = "xarray" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819, upload-time = "2026-05-13T12:22:44.707Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/d3/a00aeee76005909eaa1f7fcb1e1f2333d9f4b53866666e1bb7f9e9e15148/earthkit_data-0.20.0-py3-none-any.whl", hash = "sha256:e1df4d93354bb5bd30b967ad17d52454b4df4d6a37511fc91f950aebba592056", size = 398525, upload-time = "2026-05-13T12:22:43.362Z" }, -] - -[[package]] -name = "earthkit-time" -version = "0.1.8" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyyaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/49/fa/37a9a90303908685fba892402248789de689071f6ad4c1373dfd195ac34e/earthkit_time-0.1.8.tar.gz", hash = "sha256:d211f1647c169b34cf79177aed17ac4f472cb8bd3096f98b08d7f77293dfcd81", size = 32560, upload-time = "2026-02-16T17:40:08.144Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/96/614cc95e2bd7f2075b8b4f4b85b37df655c3cc3028f949b799224f4546d4/earthkit_time-0.1.8-py3-none-any.whl", hash = "sha256:a09de208a3696f497e2d9495e535a9e2fc805f0148d4e2555abefd0da759216d", size = 28772, upload-time = "2026-02-16T17:40:07.195Z" }, -] - -[[package]] -name = "earthkit-utils" -version = "0.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "array-api-compat" }, - { name = "pint" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013, upload-time = "2026-03-24T14:57:10.184Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/cb/0c9f59b0ca2a5ed941b65c52a4a005a7e16511f52fc3965eb45c53565b76/earthkit_utils-0.3.0-py3-none-any.whl", hash = "sha256:167e0385e062800d6c9f2d25a2a3075d7d91b67c3a02af52d772175b2313aa89", size = 35650, upload-time = "2026-03-24T14:57:08.869Z" }, -] - -[[package]] -name = "earthkit-workflows" -version = "0.15.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "array-api-compat" }, - { name = "cloudpickle" }, - { name = "earthkit-data" }, - { name = "fire" }, - { name = "numpy" }, - { name = "orjson" }, - { name = "pydantic" }, - { name = "pyrsistent" }, - { name = "pyzmq" }, - { name = "qubed" }, - { name = "sortedcontainers" }, - { name = "xarray" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ff/c6/8fd4b42984abff59eaf7bc2bc727a713c4b65539e55324b354aef2795fad/earthkit_workflows-0.15.2.tar.gz", hash = "sha256:616a3065fd14d4be282327048898355f3d4f972b8a648bbb87cbed9329c83202", size = 10865493, upload-time = "2026-07-08T09:20:38.402Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/45/835afbb6254535370fb0f1917607e7b1b1a0a737a155d5e2f8f2b2ad3e88/earthkit_workflows-0.15.2-py3-none-any.whl", hash = "sha256:ba9ac562c0b57bc05a380b0a2d9881c1c261bab68912491ed431fb9a9da20f0d", size = 217575, upload-time = "2026-07-08T09:20:37.055Z" }, -] - -[package.optional-dependencies] -vizualize = [ - { name = "networkx" }, - { name = "pyvis" }, -] - -[[package]] -name = "eccodes" -version = "2.47.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "cffi" }, - { name = "findlibs" }, - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378, upload-time = "2026-04-22T11:30:08.465Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928, upload-time = "2026-04-22T11:29:40.702Z" }, - { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009, upload-time = "2026-04-22T11:29:36.343Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001, upload-time = "2026-04-22T11:29:36.596Z" }, - { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567, upload-time = "2026-04-22T11:30:06.789Z" }, -] - -[[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, 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, upload-time = "2022-02-02T21:30:26.024Z" }, -] - -[[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, 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, upload-time = "2025-09-01T09:48:08.5Z" }, -] - -[[package]] -name = "filelock" -version = "3.29.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1f/f9/f38573ed5844586db374d085911740a501ccfa373b455fc9413f09f85237/filelock-3.29.1.tar.gz", hash = "sha256:d97e6b1b9757569626c58caa07dc4beb1613f4a2938b1e8cc81afca398906c9e", size = 59335, upload-time = "2026-06-03T15:19:04.053Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/a0/614c5fe402fd88951df45f4dda2fa3b4e17a99ecd92340771929169b3b95/filelock-3.29.1-py3-none-any.whl", hash = "sha256:85199dfd706869641b72b2e8955d5416a4b2b7dc4b0e8e6d97b4cc1299a6983b", size = 40750, upload-time = "2026-06-03T15:19:02.959Z" }, -] - -[[package]] -name = "findlibs" -version = "0.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/ef/345b0f88b8e9d9e12051142a9cdcf590bf70206d20d81c3f773ade8d9e32/findlibs-0.1.2.tar.gz", hash = "sha256:1f56d220c69686392ebdc4c65b32ee344818bca633643a8c97592957d1728122", size = 11302, upload-time = "2025-07-28T09:15:03.675Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/ff/76dd547e129206899e4e26446c3ca7aeaff948c31b05250e9b8690e76883/findlibs-0.1.2-py3-none-any.whl", hash = "sha256:5348bbc7055d2a505962576c2e285b6c0aae6d749f82ba71296e7d41336e66e8", size = 10707, upload-time = "2025-07-28T09:15:02.733Z" }, -] - -[[package]] -name = "fire" -version = "0.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "termcolor" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c0/00/f8d10588d2019d6d6452653def1ee807353b21983db48550318424b5ff18/fire-0.7.1.tar.gz", hash = "sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf", size = 88720, upload-time = "2025-08-16T20:20:24.175Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/4c/93d0f85318da65923e4b91c1c2ff03d8a458cbefebe3bc612a6693c7906d/fire-0.7.1-py3-none-any.whl", hash = "sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882", size = 115945, upload-time = "2025-08-16T20:20:22.87Z" }, -] - -[[package]] -name = "flexcache" -version = "0.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload-time = "2024-03-09T03:21:07.555Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload-time = "2024-03-09T03:21:05.635Z" }, -] - -[[package]] -name = "flexparser" -version = "0.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload-time = "2024-11-07T02:00:56.249Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload-time = "2024-11-07T02:00:54.523Z" }, -] - -[[package]] -name = "frozendict" -version = "2.4.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082, upload-time = "2025-11-11T22:40:14.251Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264, upload-time = "2025-11-11T22:40:12.836Z" }, -] - -[[package]] -name = "fsspec" -version = "2026.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/8d/1c51c094345df128ca4a990d633fe1a0ff28726c9e6b3c41ba65087bba1d/fsspec-2026.4.0.tar.gz", hash = "sha256:301d8ac70ae90ef3ad05dcf94d6c3754a097f9b5fe4667d2787aa359ec7df7e4", size = 312760, upload-time = "2026-04-29T20:42:38.635Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/0c/043d5e551459da400957a1395e0febbf771446ff34291afcbe3d8be2a279/fsspec-2026.4.0-py3-none-any.whl", hash = "sha256:11ef7bb35dab8a394fde6e608221d5cf3e8499401c249bebaeaad760a1a8dec2", size = 203402, upload-time = "2026-04-29T20:42:36.842Z" }, -] - -[[package]] -name = "humanize" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/66/a3921783d54be8a6870ac4ccffcd15c4dc0dd7fcce51c6d63b8c63935276/humanize-4.15.0.tar.gz", hash = "sha256:1dd098483eb1c7ee8e32eb2e99ad1910baefa4b75c3aff3a82f4d78688993b10", size = 83599, upload-time = "2025-12-20T20:16:13.19Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203, upload-time = "2025-12-20T20:16:11.67Z" }, -] - -[[package]] -name = "idna" -version = "3.18" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, -] - -[[package]] -name = "importlib-metadata" -version = "9.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp", marker = "python_full_version < '3.14'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, -] - -[[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, 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, upload-time = "2025-10-18T21:55:41.639Z" }, -] - -[[package]] -name = "ipython" -version = "9.14.1" -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", marker = "sys_platform != 'emscripten'" }, - { name = "pygments" }, - { name = "stack-data" }, - { name = "traitlets" }, - { name = "typing-extensions", marker = "python_full_version < '3.12'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e2/23/3a27530575643c8bb7bfc757a28e2e7ef80092afbf59a2bc5716320b6602/ipython-9.14.1.tar.gz", hash = "sha256:f913bf74df06d458e46ced84ca506c23797590d594b236fe60b14df213291e7b", size = 4433457, upload-time = "2026-06-05T08:12:34.921Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/22/58818a63eaf8982b67632b1bc20585c811611b15a8da19d6012323dc76a5/ipython-9.14.1-py3-none-any.whl", hash = "sha256:5d4a9ecaa3b10e6e5f269dd0948bdb58ca9cb851899cd23e07c320d3eb11613c", size = 627770, upload-time = "2026-06-05T08:12:33.045Z" }, -] - -[[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, 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, upload-time = "2025-01-17T11:24:33.271Z" }, -] - -[[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, 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, upload-time = "2026-05-01T23:38:43.919Z" }, -] - -[[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, 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, upload-time = "2025-03-05T20:05:00.369Z" }, -] - -[[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, 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, upload-time = "2025-12-15T08:41:44.973Z" }, -] - -[[package]] -name = "jsonpickle" -version = "4.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8d/c0/dde9b4b42cc415b9579573f967f12efbb034e427a2a37e93ad5139891d87/jsonpickle-4.1.2.tar.gz", hash = "sha256:8afed18aa189fd81e2e833b426bb4af485594921f0b1d36c2001fc5637a2f210", size = 319120, upload-time = "2026-05-28T03:50:11.892Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/7b/fd3c7a09649aea9da1d3587aea624d8f9b29963dfd84a1bdb2aa93b36dac/jsonpickle-4.1.2-py3-none-any.whl", hash = "sha256:7ffe34426bc797684dbf1dc84185558bd864cd25b1ff5fb01b7405e392d0a937", size = 47203, upload-time = "2026-05-28T03:50:10.605Z" }, -] - -[[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, 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, upload-time = "2026-01-07T13:41:05.306Z" }, -] - -[[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, 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, upload-time = "2025-09-08T01:34:57.871Z" }, -] - -[[package]] -name = "locket" -version = "1.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350, upload-time = "2022-04-20T22:04:44.312Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398, upload-time = "2022-04-20T22:04:42.23Z" }, -] - -[[package]] -name = "lru-dict" -version = "1.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439, upload-time = "2025-11-02T10:02:13.548Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760, upload-time = "2025-11-02T10:01:06.492Z" }, - { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249, upload-time = "2025-11-02T10:01:07.261Z" }, - { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728, upload-time = "2025-11-02T10:01:08.185Z" }, - { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795, upload-time = "2025-11-02T10:01:08.862Z" }, - { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807, upload-time = "2025-11-02T10:01:09.581Z" }, - { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437, upload-time = "2025-11-02T10:01:10.676Z" }, - { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168, upload-time = "2025-11-02T10:01:11.47Z" }, - { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454, upload-time = "2025-11-02T10:01:12.522Z" }, - { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574, upload-time = "2025-11-02T10:01:13.293Z" }, - { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031, upload-time = "2025-11-02T10:01:13.96Z" }, - { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007, upload-time = "2025-11-02T10:01:14.857Z" }, - { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683, upload-time = "2025-11-02T10:01:15.891Z" }, - { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216, upload-time = "2025-11-02T10:01:16.867Z" }, - { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687, upload-time = "2025-11-02T10:01:17.485Z" }, - { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960, upload-time = "2025-11-02T10:01:18.158Z" }, - { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882, upload-time = "2025-11-02T10:01:18.841Z" }, - { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268, upload-time = "2025-11-02T10:01:19.564Z" }, - { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156, upload-time = "2025-11-02T10:01:20.22Z" }, - { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395, upload-time = "2025-11-02T10:01:20.901Z" }, - { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591, upload-time = "2025-11-02T10:01:21.606Z" }, - { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119, upload-time = "2025-11-02T10:01:22.61Z" }, - { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109, upload-time = "2025-11-02T10:01:23.322Z" }, - { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248, upload-time = "2025-11-02T10:01:24.291Z" }, - { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243, upload-time = "2025-11-02T10:01:25.254Z" }, - { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938, upload-time = "2025-11-02T10:01:25.89Z" }, - { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261, upload-time = "2025-11-02T10:01:26.879Z" }, - { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801, upload-time = "2025-11-02T10:01:27.553Z" }, - { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688, upload-time = "2025-11-02T10:01:28.17Z" }, - { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214, upload-time = "2025-11-02T10:01:28.888Z" }, - { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689, upload-time = "2025-11-02T10:01:29.508Z" }, - { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034, upload-time = "2025-11-02T10:01:30.164Z" }, - { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919, upload-time = "2025-11-02T10:01:30.971Z" }, - { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334, upload-time = "2025-11-02T10:01:31.663Z" }, - { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211, upload-time = "2025-11-02T10:01:32.468Z" }, - { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461, upload-time = "2025-11-02T10:01:33.2Z" }, - { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651, upload-time = "2025-11-02T10:01:33.874Z" }, - { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120, upload-time = "2025-11-02T10:01:34.595Z" }, - { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112, upload-time = "2025-11-02T10:01:35.268Z" }, - { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119, upload-time = "2025-11-02T10:01:36.239Z" }, - { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435, upload-time = "2025-11-02T10:01:36.857Z" }, - { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988, upload-time = "2025-11-02T10:01:37.531Z" }, - { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733, upload-time = "2025-11-02T10:01:38.194Z" }, - { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222, upload-time = "2025-11-02T10:01:39.093Z" }, - { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733, upload-time = "2025-11-02T10:01:39.739Z" }, - { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251, upload-time = "2025-11-02T10:01:40.421Z" }, - { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405, upload-time = "2025-11-02T10:01:41.917Z" }, - { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135, upload-time = "2025-11-02T10:01:42.935Z" }, - { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620, upload-time = "2025-11-02T10:01:43.627Z" }, - { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077, upload-time = "2025-11-02T10:01:44.694Z" }, - { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905, upload-time = "2025-11-02T10:01:45.668Z" }, - { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435, upload-time = "2025-11-02T10:01:46.397Z" }, - { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423, upload-time = "2025-11-02T10:01:47.473Z" }, - { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184, upload-time = "2025-11-02T10:01:48.161Z" }, - { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459, upload-time = "2025-11-02T10:01:48.823Z" }, - { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938, upload-time = "2025-11-02T10:01:49.448Z" }, - { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389, upload-time = "2025-11-02T10:01:50.49Z" }, - { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706, upload-time = "2025-11-02T10:01:51.197Z" }, - { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892, upload-time = "2025-11-02T10:01:51.899Z" }, - { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254, upload-time = "2025-11-02T10:01:52.587Z" }, - { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422, upload-time = "2025-11-02T10:01:53.271Z" }, - { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909, upload-time = "2025-11-02T10:01:54.356Z" }, - { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816, upload-time = "2025-11-02T10:01:55.417Z" }, - { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204, upload-time = "2025-11-02T10:01:56.06Z" }, - { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384, upload-time = "2025-11-02T10:02:09.656Z" }, - { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822, upload-time = "2025-11-02T10:02:10.609Z" }, - { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968, upload-time = "2025-11-02T10:02:11.405Z" }, - { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904, upload-time = "2025-11-02T10:02:12.144Z" }, - { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062, upload-time = "2025-11-02T10:02:12.878Z" }, -] - -[[package]] -name = "markdown" -version = "3.10.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, -] - -[[package]] -name = "markdown-it-py" -version = "4.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mdurl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, -] - -[[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, 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, 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" }, - { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, - { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, - { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, - { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, - { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, - { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, - { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, - { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, - { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, - { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, - { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, - { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, - { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, - { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, - { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, - { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, - { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, - { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, - { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, - { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, - { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, - { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, - { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, - { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, - { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, - { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, - { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, - { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, - { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, - { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, - { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, - { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, - { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, - { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, - { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, - { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, - { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, - { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, - { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, - { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, - { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, - { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, - { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, - { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, - { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, - { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, - { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, - { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, - { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, - { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, - { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, - { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, - { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, -] - -[[package]] -name = "matplotlib-inline" -version = "0.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, -] - -[[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, 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, upload-time = "2022-08-14T12:40:09.779Z" }, -] - -[[package]] -name = "multiurl" -version = "0.3.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "requests" }, - { name = "tqdm" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6c/ce/a00c9b44f43c4620ca004e4acb4c1e266b1ab48d2f6ad9e402f6bdbe44d4/multiurl-0.3.7.tar.gz", hash = "sha256:4201563fc8989baca7b525fdc69d4cd5a6c0cef4f303559710b9890021aab6d9", size = 18945, upload-time = "2025-07-29T11:57:04.109Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/cf/be4e93afbfa0def2cd6fac9302071db0bd6d0617999ecbf53f92b9398de3/multiurl-0.3.7-py3-none-any.whl", hash = "sha256:054f42974064f103be0ed55b43f0c32fc435a47dc7353a9adaffa643b99fa380", size = 21524, upload-time = "2025-07-29T11:57:03.191Z" }, -] - -[[package]] -name = "narwhals" -version = "2.22.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/62/3c/c4ef2164a71c1a63d7f1ae411c4082c5fa872405106db60a4b7114989ad7/narwhals-2.22.1.tar.gz", hash = "sha256:d62920805a0a43b7ff8b54b0c0d3142d796f8a9301836ada37e573d6a33cbcd9", size = 647493, upload-time = "2026-06-05T12:34:34.051Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/48/ca/36339329c4604adbcc99c899b7eb1ce1a555c499b6a6860757dc9bfed36d/narwhals-2.22.1-py3-none-any.whl", hash = "sha256:60567d774edf77db53906f89d9fbd164e66e56d66d388e1e6990f17ac33cfb53", size = 454815, upload-time = "2026-06-05T12:34:32.289Z" }, -] - -[[package]] -name = "netcdf4" -version = "1.7.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "cftime" }, - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352, upload-time = "2026-01-05T02:27:38.593Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499, upload-time = "2026-01-05T02:27:06.568Z" }, - { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667, upload-time = "2026-01-05T02:27:09.421Z" }, - { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769, upload-time = "2026-01-05T21:31:19.243Z" }, - { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122, upload-time = "2026-01-05T21:31:22.773Z" }, - { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637, upload-time = "2026-01-05T02:27:11.856Z" }, - { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377, upload-time = "2026-01-05T02:27:13.808Z" }, - { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821, upload-time = "2026-01-05T02:27:15.413Z" }, - { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133, upload-time = "2026-01-05T02:27:17.224Z" }, - { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635, upload-time = "2026-01-05T02:27:19.655Z" }, - { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725, upload-time = "2026-01-05T02:27:22.298Z" }, - { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258, upload-time = "2026-01-05T02:27:24.837Z" }, - { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171, upload-time = "2026-01-05T02:27:27.166Z" }, - { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579, upload-time = "2026-01-05T02:27:29.382Z" }, - { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032, upload-time = "2026-01-05T02:27:31.744Z" }, - { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653, upload-time = "2026-01-05T02:27:34.294Z" }, - { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682, upload-time = "2026-01-05T02:27:37.062Z" }, -] - -[[package]] -name = "networkx" -version = "3.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, -] - -[[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, 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, 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" }, - { url = "https://files.pythonhosted.org/packages/9d/20/c473fc04a371f5e2f8c5749e04505c13e7a8ede27c09e9f099b2ad6f43d6/numexpr-2.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ebae0ab18c799b0e6b8c5a8d11e1fa3848eb4011271d99848b297468a39430", size = 162790, upload-time = "2025-10-13T16:16:34.903Z" }, - { url = "https://files.pythonhosted.org/packages/45/93/b6760dd1904c2a498e5f43d1bb436f59383c3ddea3815f1461dfaa259373/numexpr-2.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47041f2f7b9e69498fb311af672ba914a60e6e6d804011caacb17d66f639e659", size = 152196, upload-time = "2025-10-13T16:16:36.593Z" }, - { url = "https://files.pythonhosted.org/packages/72/94/cc921e35593b820521e464cbbeaf8212bbdb07f16dc79fe283168df38195/numexpr-2.14.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d686dfb2c1382d9e6e0ee0b7647f943c1886dba3adbf606c625479f35f1956c1", size = 452468, upload-time = "2025-10-13T16:13:29.531Z" }, - { url = "https://files.pythonhosted.org/packages/d9/43/560e9ba23c02c904b5934496486d061bcb14cd3ebba2e3cf0e2dccb6c22b/numexpr-2.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee6d4fbbbc368e6cdd0772734d6249128d957b3b8ad47a100789009f4de7083", size = 443631, upload-time = "2025-10-13T16:15:02.473Z" }, - { url = "https://files.pythonhosted.org/packages/7b/6c/78f83b6219f61c2c22d71ab6e6c2d4e5d7381334c6c29b77204e59edb039/numexpr-2.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3a2839efa25f3c8d4133252ea7342d8f81226c7c4dda81f97a57e090b9d87a48", size = 1417670, upload-time = "2025-10-13T16:13:33.464Z" }, - { url = "https://files.pythonhosted.org/packages/0e/bb/1ccc9dcaf46281568ce769888bf16294c40e98a5158e4b16c241de31d0d3/numexpr-2.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9f9137f1351b310436662b5dc6f4082a245efa8950c3b0d9008028df92fefb9b", size = 1466212, upload-time = "2025-10-13T16:15:12.828Z" }, - { url = "https://files.pythonhosted.org/packages/31/9f/203d82b9e39dadd91d64bca55b3c8ca432e981b822468dcef41a4418626b/numexpr-2.14.1-cp312-cp312-win32.whl", hash = "sha256:36f8d5c1bd1355df93b43d766790f9046cccfc1e32b7c6163f75bcde682cda07", size = 166996, upload-time = "2025-10-13T16:17:10.369Z" }, - { url = "https://files.pythonhosted.org/packages/1f/67/ffe750b5452eb66de788c34e7d21ec6d886abb4d7c43ad1dc88ceb3d998f/numexpr-2.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:fdd886f4b7dbaf167633ee396478f0d0aa58ea2f9e7ccc3c6431019623e8d68f", size = 160187, upload-time = "2025-10-13T16:17:11.974Z" }, - { url = "https://files.pythonhosted.org/packages/73/b4/9f6d637fd79df42be1be29ee7ba1f050fab63b7182cb922a0e08adc12320/numexpr-2.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:09078ba73cffe94745abfbcc2d81ab8b4b4e9d7bfbbde6cac2ee5dbf38eee222", size = 162794, upload-time = "2025-10-13T16:16:38.291Z" }, - { url = "https://files.pythonhosted.org/packages/35/ae/d58558d8043de0c49f385ea2fa789e3cfe4d436c96be80200c5292f45f15/numexpr-2.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dce0b5a0447baa7b44bc218ec2d7dcd175b8eee6083605293349c0c1d9b82fb6", size = 152203, upload-time = "2025-10-13T16:16:39.907Z" }, - { url = "https://files.pythonhosted.org/packages/13/65/72b065f9c75baf8f474fd5d2b768350935989d4917db1c6c75b866d4067c/numexpr-2.14.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:06855053de7a3a8425429bd996e8ae3c50b57637ad3e757e0fa0602a7874be30", size = 455860, upload-time = "2025-10-13T16:13:35.811Z" }, - { url = "https://files.pythonhosted.org/packages/fc/f9/c9457652dfe28e2eb898372da2fe786c6db81af9540c0f853ee04a0699cc/numexpr-2.14.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f9366d23a2e991fd5a8b5e61a17558f028ba86158a4552f8f239b005cdf83c", size = 446574, upload-time = "2025-10-13T16:15:17.367Z" }, - { url = "https://files.pythonhosted.org/packages/b6/99/8d3879c4d67d3db5560cf2de65ce1778b80b75f6fa415eb5c3e7bd37ba27/numexpr-2.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c5f1b1605695778896534dfc6e130d54a65cd52be7ed2cd0cfee3981fd676bf5", size = 1417306, upload-time = "2025-10-13T16:13:42.813Z" }, - { url = "https://files.pythonhosted.org/packages/ea/05/6bddac9f18598ba94281e27a6943093f7d0976544b0cb5d92272c64719bd/numexpr-2.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a4ba71db47ea99c659d88ee6233fa77b6dc83392f1d324e0c90ddf617ae3f421", size = 1466145, upload-time = "2025-10-13T16:15:27.464Z" }, - { url = "https://files.pythonhosted.org/packages/24/5d/cbeb67aca0c5a76ead13df7e8bd8dd5e0d49145f90da697ba1d9f07005b0/numexpr-2.14.1-cp313-cp313-win32.whl", hash = "sha256:638dce8320f4a1483d5ca4fda69f60a70ed7e66be6e68bc23fb9f1a6b78a9e3b", size = 166996, upload-time = "2025-10-13T16:17:13.803Z" }, - { url = "https://files.pythonhosted.org/packages/cc/23/9281bceaeb282cead95f0aa5f7f222ffc895670ea689cc1398355f6e3001/numexpr-2.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:9fdcd4735121658a313f878fd31136d1bfc6a5b913219e7274e9fca9f8dac3bb", size = 160189, upload-time = "2025-10-13T16:17:15.417Z" }, - { url = "https://files.pythonhosted.org/packages/f3/76/7aac965fd93a56803cbe502aee2adcad667253ae34b0badf6c5af7908b6c/numexpr-2.14.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:557887ad7f5d3c2a40fd7310e50597045a68e66b20a77b3f44d7bc7608523b4b", size = 163524, upload-time = "2025-10-13T16:16:42.213Z" }, - { url = "https://files.pythonhosted.org/packages/58/65/79d592d5e63fbfab3b59a60c386853d9186a44a3fa3c87ba26bdc25b6195/numexpr-2.14.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:af111c8fe6fc55d15e4c7cab11920fc50740d913636d486545b080192cd0ad73", size = 152919, upload-time = "2025-10-13T16:16:44.229Z" }, - { url = "https://files.pythonhosted.org/packages/84/78/3c8335f713d4aeb99fa758d7c62f0be1482d4947ce5b508e2052bb7aeee9/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33265294376e7e2ae4d264d75b798a915d2acf37b9dd2b9405e8b04f84d05cfc", size = 465972, upload-time = "2025-10-13T16:13:45.061Z" }, - { url = "https://files.pythonhosted.org/packages/35/81/9ee5f69b811e8f18746c12d6f71848617684edd3161927f95eee7a305631/numexpr-2.14.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:83647d846d3eeeb9a9255311236135286728b398d0d41d35dedb532dca807fe9", size = 456953, upload-time = "2025-10-13T16:15:31.186Z" }, - { url = "https://files.pythonhosted.org/packages/6d/39/9b8bc6e294d85cbb54a634e47b833e9f3276a8bdf7ce92aa808718a0212d/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6e575fd3ad41ddf3355d0c7ef6bd0168619dc1779a98fe46693cad5e95d25e6e", size = 1426199, upload-time = "2025-10-13T16:13:48.231Z" }, - { url = "https://files.pythonhosted.org/packages/1e/ce/0d4fcd31ab49319740d934fba1734d7dad13aa485532ca754e555ca16c8b/numexpr-2.14.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:67ea4771029ce818573b1998f5ca416bd255156feea017841b86176a938f7d19", size = 1474214, upload-time = "2025-10-13T16:15:38.893Z" }, - { url = "https://files.pythonhosted.org/packages/b7/47/b2a93cbdb3ba4e009728ad1b9ef1550e2655ea2c86958ebaf03b9615f275/numexpr-2.14.1-cp313-cp313t-win32.whl", hash = "sha256:15015d47d3d1487072d58c0e7682ef2eb608321e14099c39d52e2dd689483611", size = 167676, upload-time = "2025-10-13T16:17:17.351Z" }, - { url = "https://files.pythonhosted.org/packages/86/99/ee3accc589ed032eea68e12172515ed96a5568534c213ad109e1f4411df1/numexpr-2.14.1-cp313-cp313t-win_amd64.whl", hash = "sha256:94c711f6d8f17dfb4606842b403699603aa591ab9f6bf23038b488ea9cfb0f09", size = 161096, upload-time = "2025-10-13T16:17:19.174Z" }, - { url = "https://files.pythonhosted.org/packages/ac/36/9db78dfbfdfa1f8bf0872993f1a334cdd8fca5a5b6567e47dcb128bcb7c2/numexpr-2.14.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ede79f7ff06629f599081de644546ce7324f1581c09b0ac174da88a470d39c21", size = 162848, upload-time = "2025-10-13T16:16:46.216Z" }, - { url = "https://files.pythonhosted.org/packages/13/c1/a5c78ae637402c5550e2e0ba175275d2515d432ec28af0cdc23c9b476e65/numexpr-2.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2eac7a5a2f70b3768c67056445d1ceb4ecd9b853c8eda9563823b551aeaa5082", size = 152270, upload-time = "2025-10-13T16:16:47.92Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ed/aabd8678077848dd9a751c5558c2057839f5a09e2a176d8dfcd0850ee00e/numexpr-2.14.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5aedf38d4c0c19d3cecfe0334c3f4099fb496f54c146223d30fa930084bc8574", size = 455918, upload-time = "2025-10-13T16:13:50.338Z" }, - { url = "https://files.pythonhosted.org/packages/88/e1/3db65117f02cdefb0e5e4c440daf1c30beb45051b7f47aded25b7f4f2f34/numexpr-2.14.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439ec4d57b853792ebe5456e3160312281c3a7071ecac5532ded3278ede614de", size = 446512, upload-time = "2025-10-13T16:15:42.313Z" }, - { url = "https://files.pythonhosted.org/packages/9a/fb/7ceb9ee55b5f67e4a3e4d73d5af4c7e37e3c9f37f54bee90361b64b17e3f/numexpr-2.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e23b87f744e04e302d82ac5e2189ae20a533566aec76a46885376e20b0645bf8", size = 1417845, upload-time = "2025-10-13T16:13:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/45/2d/9b5764d0eafbbb2889288f80de773791358acf6fad1a55767538d8b79599/numexpr-2.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:44f84e0e5af219dbb62a081606156420815890e041b87252fbcea5df55214c4c", size = 1466211, upload-time = "2025-10-13T16:15:48.985Z" }, - { url = "https://files.pythonhosted.org/packages/5d/21/204db708eccd71aa8bc55bcad55bc0fc6c5a4e01ad78e14ee5714a749386/numexpr-2.14.1-cp314-cp314-win32.whl", hash = "sha256:1f1a5e817c534539351aa75d26088e9e1e0ef1b3a6ab484047618a652ccc4fc3", size = 168835, upload-time = "2025-10-13T16:17:20.82Z" }, - { url = "https://files.pythonhosted.org/packages/4f/3e/d83e9401a1c3449a124f7d4b3fb44084798e0d30f7c11e60712d9b94cf11/numexpr-2.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:587c41509bc373dfb1fe6086ba55a73147297247bedb6d588cda69169fc412f2", size = 162608, upload-time = "2025-10-13T16:17:22.228Z" }, - { url = "https://files.pythonhosted.org/packages/7f/d6/ec947806bb57836d6379a8c8a253c2aeaa602b12fef2336bfd2462bb4ed5/numexpr-2.14.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ec368819502b64f190c3f71be14a304780b5935c42aae5bf22c27cc2cbba70b5", size = 163525, upload-time = "2025-10-13T16:16:50.133Z" }, - { url = "https://files.pythonhosted.org/packages/0d/77/048f30dcf661a3d52963a88c29b52b6d5ce996d38e9313a56a922451c1e0/numexpr-2.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7e87f6d203ac57239de32261c941e9748f9309cbc0da6295eabd0c438b920d3a", size = 152917, upload-time = "2025-10-13T16:16:52.055Z" }, - { url = "https://files.pythonhosted.org/packages/9e/d3/956a13e628d722d649fbf2fded615134a308c082e122a48bad0e90a99ce9/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd72d8c2a165fe45ea7650b16eb8cc1792a94a722022006bb97c86fe51fd2091", size = 466242, upload-time = "2025-10-13T16:13:55.795Z" }, - { url = "https://files.pythonhosted.org/packages/d6/dd/abe848678d82486940892f2cacf39e82eec790e8930d4d713d3f9191063b/numexpr-2.14.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70d80fcb418a54ca208e9a38e58ddc425c07f66485176b261d9a67c7f2864f73", size = 457149, upload-time = "2025-10-13T16:15:52.036Z" }, - { url = "https://files.pythonhosted.org/packages/fd/bb/797b583b5fb9da5700a5708ca6eb4f889c94d81abb28de4d642c0f4b3258/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:edea2f20c2040df8b54ee8ca8ebda63de9545b2112872466118e9df4d0ae99f3", size = 1426493, upload-time = "2025-10-13T16:13:59.244Z" }, - { url = "https://files.pythonhosted.org/packages/77/c4/0519ab028fdc35e3e7ee700def7f2b4631b175cd9e1202bd7966c1695c33/numexpr-2.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:790447be6879a6c51b9545f79612d24c9ea0a41d537a84e15e6a8ddef0b6268e", size = 1474413, upload-time = "2025-10-13T16:15:59.211Z" }, - { url = "https://files.pythonhosted.org/packages/d4/4a/33044878c8f4a75213cfe9c11d4c02058bb710a7a063fe14f362e8de1077/numexpr-2.14.1-cp314-cp314t-win32.whl", hash = "sha256:538961096c2300ea44240209181e31fae82759d26b51713b589332b9f2a4117e", size = 169502, upload-time = "2025-10-13T16:17:23.829Z" }, - { url = "https://files.pythonhosted.org/packages/41/a2/5a1a2c72528b429337f49911b18c302ecd36eeab00f409147e1aa4ae4519/numexpr-2.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:a40b350cd45b4446076fa11843fa32bbe07024747aeddf6d467290bf9011b392", size = 163589, upload-time = "2025-10-13T16:17:25.696Z" }, -] - -[[package]] -name = "numpy" -version = "2.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, - { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, - { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, - { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, - { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, - { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, - { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, - { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, - { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, - { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, - { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, - { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, - { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, - { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, - { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, - { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, - { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, - { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, - { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, - { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, - { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, - { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, - { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, - { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, - { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, - { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, - { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, - { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, - { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, - { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, - { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, - { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, - { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, - { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, - { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, - { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, - { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, - { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, - { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, - { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, - { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, - { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, - { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, - { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, - { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, - { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, - { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, - { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, - { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, - { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, - { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, - { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, - { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, - { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, - { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, - { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, - { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, - { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, - { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, - { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, - { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, - { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, - { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, - { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, - { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, - { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, - { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, -] - -[[package]] -name = "objsize" -version = "0.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9d/42/2de8994fbea1112d076d71aefaebad888ff01e5b52616895d510b73c3b96/objsize-0.8.0.tar.gz", hash = "sha256:df17998cf6ef4b24d52abee5020484491230e3f4af71a8ff0098c7455ad4d91c", size = 16593, upload-time = "2026-01-18T12:55:14.199Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/14/53/157f8f4df3f43fdfdc627a56fa46135e4dcf806eb5bc6088811d968f8a21/objsize-0.8.0-py3-none-any.whl", hash = "sha256:afea5e61ba1e3e40c23b546028cdc1df88c5b097d2b0d6c6b8a4bf44fa7a3e1b", size = 11599, upload-time = "2026-01-18T12:55:12.626Z" }, -] - -[[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" }, - { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" }, - { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" }, - { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106, upload-time = "2026-05-06T15:10:00.798Z" }, - { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864, upload-time = "2026-05-06T15:10:02.15Z" }, - { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213, upload-time = "2026-05-06T15:10:03.515Z" }, - { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994, upload-time = "2026-05-06T15:10:05.083Z" }, - { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744, upload-time = "2026-05-06T15:10:06.853Z" }, - { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014, upload-time = "2026-05-06T15:10:08.213Z" }, - { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509, upload-time = "2026-05-06T15:10:09.595Z" }, - { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127, upload-time = "2026-05-06T15:10:11.049Z" }, - { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025, upload-time = "2026-05-06T15:10:12.842Z" }, - { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943, upload-time = "2026-05-06T15:10:14.405Z" }, - { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606, upload-time = "2026-05-06T15:10:15.791Z" }, - { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101, upload-time = "2026-05-06T15:10:17.129Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736, upload-time = "2026-05-06T15:10:18.645Z" }, - { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458, upload-time = "2026-05-06T15:10:20.079Z" }, - { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368, upload-time = "2026-05-06T15:10:21.549Z" }, - { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070, upload-time = "2026-05-06T15:10:23.371Z" }, - { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892, upload-time = "2026-05-06T15:10:24.714Z" }, - { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217, upload-time = "2026-05-06T15:10:26.084Z" }, - { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980, upload-time = "2026-05-06T15:10:28.062Z" }, - { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738, upload-time = "2026-05-06T15:10:29.727Z" }, - { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033, upload-time = "2026-05-06T15:10:31.152Z" }, - { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492, upload-time = "2026-05-06T15:10:32.641Z" }, - { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087, upload-time = "2026-05-06T15:10:34.438Z" }, - { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031, upload-time = "2026-05-06T15:10:36.358Z" }, - { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915, upload-time = "2026-05-06T15:10:38.013Z" }, - { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613, upload-time = "2026-05-06T15:10:39.569Z" }, - { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086, upload-time = "2026-05-06T15:10:41.262Z" }, - { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696, upload-time = "2026-05-06T15:10:42.651Z" }, - { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465, upload-time = "2026-05-06T15:10:44.097Z" }, - { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364, upload-time = "2026-05-06T15:10:45.839Z" }, - { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063, upload-time = "2026-05-06T15:10:47.267Z" }, - { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356, upload-time = "2026-05-06T15:10:48.765Z" }, - { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592, upload-time = "2026-05-06T15:10:50.13Z" }, - { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491, upload-time = "2026-05-06T15:10:51.582Z" }, - { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309, upload-time = "2026-05-06T15:10:53.329Z" }, - { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030, upload-time = "2026-05-06T15:10:54.988Z" }, - { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482, upload-time = "2026-05-06T15:10:56.663Z" }, - { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178, upload-time = "2026-05-06T15:10:58.446Z" }, - { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089, upload-time = "2026-05-06T15:11:00.441Z" }, - { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921, upload-time = "2026-05-06T15:11:02.176Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638, upload-time = "2026-05-06T15:11:03.696Z" }, - { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078, upload-time = "2026-05-06T15:11:05.123Z" }, - { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687, upload-time = "2026-05-06T15:11:06.602Z" }, -] - -[[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, 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, upload-time = "2026-04-24T20:15:22.081Z" }, -] - -[[package]] -name = "pandas" -version = "3.0.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" }, - { url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" }, - { url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" }, - { url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" }, - { url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" }, - { url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" }, - { url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" }, - { url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" }, - { url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" }, - { url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" }, - { url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" }, - { url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" }, - { url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" }, - { url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" }, - { url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" }, - { url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" }, - { url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" }, - { url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" }, - { url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" }, - { url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" }, - { url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" }, - { url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" }, - { url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" }, - { url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" }, - { url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" }, - { url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" }, - { url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" }, - { url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" }, - { url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" }, - { url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" }, - { url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" }, - { url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" }, - { url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" }, - { url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" }, - { url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" }, - { url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" }, - { url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" }, - { url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" }, - { url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" }, - { url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" }, - { url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" }, - { url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" }, - { url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" }, -] - -[[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, 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, upload-time = "2026-05-01T23:12:58.867Z" }, -] - -[[package]] -name = "partd" -version = "1.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "locket" }, - { name = "toolz" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029, upload-time = "2024-05-06T19:51:41.945Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905, upload-time = "2024-05-06T19:51:39.271Z" }, -] - -[[package]] -name = "pdbufr" -version = "0.14.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "eccodes" }, - { name = "pandas" }, - { name = "pint" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763, upload-time = "2026-02-26T17:03:46.376Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633, upload-time = "2026-02-26T17:03:45.16Z" }, -] - -[[package]] -name = "pexpect" -version = "4.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ptyprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, -] -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, upload-time = "2023-11-25T06:56:14.81Z" }, -] - -[[package]] -name = "pint" -version = "0.25.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "flexcache" }, - { name = "flexparser" }, - { name = "platformdirs" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106, upload-time = "2026-03-19T21:57:08.72Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488, upload-time = "2026-03-19T21:57:07.022Z" }, -] - -[[package]] -name = "platformdirs" -version = "4.10.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, -] - -[[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, 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 = "pproc" -source = { editable = "." } -dependencies = [ - { name = "conflator" }, - { name = "earthkit-time" }, - { name = "earthkit-utils" }, - { name = "filelock" }, - { name = "numexpr" }, - { name = "pproc-core" }, - { name = "psutil" }, - { name = "scikit-learn" }, - { name = "scipy" }, - { name = "xarray" }, -] - -[package.optional-dependencies] -tcycl = [ - { name = "wget" }, -] - -[package.dev-dependencies] -dev = [ - { name = "pytest" }, - { name = "requests" }, -] - -[package.metadata] -requires-dist = [ - { name = "conflator", specifier = ">=0.1.7" }, - { name = "earthkit-time", specifier = ">=0.1.3" }, - { name = "earthkit-utils", specifier = ">=0.2.1" }, - { name = "filelock", specifier = ">=3.12" }, - { name = "numexpr" }, - { name = "pproc-core", editable = "../pproc-core" }, - { name = "psutil" }, - { name = "scikit-learn" }, - { name = "scipy", specifier = ">=1.8" }, - { name = "wget", marker = "extra == 'tcycl'" }, - { name = "xarray" }, -] -provides-extras = ["tcycl"] - -[package.metadata.requires-dev] -dev = [ - { name = "pytest", specifier = ">=9.0.3" }, - { name = "requests", specifier = ">=2.34.2" }, -] - -[[package]] -name = "pproc-core" -source = { editable = "../pproc-core" } -dependencies = [ - { name = "code-meters" }, - { name = "conflator" }, - { name = "earthkit-time" }, - { name = "earthkit-workflows", extra = ["vizualize"] }, - { name = "numpy" }, - { name = "pandas" }, - { name = "pydantic" }, - { name = "qubed" }, -] - -[package.dev-dependencies] -dev = [ - { name = "prek" }, - { name = "pytest" }, - { name = "ty" }, -] - -[package.metadata] -requires-dist = [ - { name = "code-meters" }, - { name = "conflator", specifier = ">=0.1.8" }, - { name = "earthkit-time" }, - { name = "earthkit-workflows", extras = ["vizualize"], specifier = ">=0.15.1" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "pydantic" }, - { name = "qubed", specifier = "<=0.3.1" }, -] - -[package.metadata.requires-dev] -dev = [ - { name = "prek", specifier = ">=0.4.4" }, - { name = "pytest", specifier = ">=9.0.3" }, - { name = "ty", specifier = ">=0.0.43" }, -] - -[[package]] -name = "prek" -version = "0.4.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/13/3d71b3adbf385f7dc7fb6e16d6e25421fd8398b45d8f8410a328bf22bd3f/prek-0.4.4.tar.gz", hash = "sha256:4ec5771153d158a0e4473933b7fd9b51e1b1f57f2df50aeb7560ea6812226dc5", size = 470641, upload-time = "2026-06-04T07:26:07.199Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/06/9f/68a577888edf7f2647a652b02899508ccd84e57ce1f79c51a44edfd308d7/prek-0.4.4-py3-none-linux_armv6l.whl", hash = "sha256:23cfd96a25de1c93e3c43c746643b80489e3b2fa49ca9c0ffd6022e51535c900", size = 5550271, upload-time = "2026-06-04T07:26:17.834Z" }, - { url = "https://files.pythonhosted.org/packages/35/b8/5427a0023116343a8d787b446536a7fddfa5db7eec7713dd05618da2bdfe/prek-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a427b792c4436f49732b1f6ebccf221fdcc6390c148474280da9c2c6eaabc9c4", size = 5910136, upload-time = "2026-06-04T07:26:20.616Z" }, - { url = "https://files.pythonhosted.org/packages/9d/4f/d751e90b7e768e472e054cd41cbe502589436ca9c1a13bfe4fa9513f9cde/prek-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b998038fc92c990e03147eb5b95b0f2c394517f8857ab911aac8e092f1b9b3ab", size = 5470124, upload-time = "2026-06-04T07:26:29.23Z" }, - { url = "https://files.pythonhosted.org/packages/c6/fe/e73241c5777b6f9b6b95132febbd27f9be9e89912e9e93c0982680593af2/prek-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:9cebca8c15da4f1d6e3a25e6ae0611425c8596e926222050f2588c390e42df8a", size = 5732725, upload-time = "2026-06-04T07:26:19.133Z" }, - { url = "https://files.pythonhosted.org/packages/ca/a3/329bd910e7e5d9d0eb5e571f3ba48023213744e78411afb81f5ef8356cab/prek-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8742ac26363e74c855df6215a709d5db183204d00ac0f1a722b13aed4da3cd0", size = 5457953, upload-time = "2026-06-04T07:26:23.41Z" }, - { url = "https://files.pythonhosted.org/packages/3d/f8/d642990513d9707398506bad45d39173d84266231f7d919899f694aefe2c/prek-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a2b7c8710546a1e894afa7ab022030cd4e21f1ee7ffb301b4360773d22f1f00f", size = 5860556, upload-time = "2026-06-04T07:26:11.692Z" }, - { url = "https://files.pythonhosted.org/packages/8d/17/a2e29cb278503a8c18612d8a62a15020648dc768e2e94bc4b4d4c9411e07/prek-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e02bd4d5e05c500e4d9f70f024e30d13aa361dc490724b7f476d2e35542c239f", size = 6652492, upload-time = "2026-06-04T07:26:09.962Z" }, - { url = "https://files.pythonhosted.org/packages/ab/10/ad3270b18135ee5d1af6f6cf4b0c8601b1cc2cb38d16e835081da820833a/prek-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f3a25041733de987a47e5a7bace47182a6f0e2ae5f960cb54c1d4630afd2591", size = 6113837, upload-time = "2026-06-04T07:26:24.873Z" }, - { url = "https://files.pythonhosted.org/packages/59/d9/e8c201b9b41c4561673cea01c630ab604df89d13e952f87dbcb807d32588/prek-0.4.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:0b04a0f36d07474f2a9fc5b1ba1197a1b326b2b211f39cd74cf0d4613545f7f4", size = 5729155, upload-time = "2026-06-04T07:26:26.194Z" }, - { url = "https://files.pythonhosted.org/packages/e8/cd/227b0494fcbc91e8fe15c2a4db9e6dfff95314ef38db3e40e6ea96db249d/prek-0.4.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f032ccbe2d6edc345f81a6d772c18cc169d63c27b5a8292bfe416b352bdfee57", size = 5590775, upload-time = "2026-06-04T07:26:22.038Z" }, - { url = "https://files.pythonhosted.org/packages/cc/e0/9d750b9cf21ece884afdc15668d0f005a36588fe1b0bb5ff4a8112ab51cb/prek-0.4.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:bad3586fcea3e913f0edf2e8f132f97889e03976b7ee3d120fd294ad4e89a5eb", size = 5437864, upload-time = "2026-06-04T07:26:30.673Z" }, - { url = "https://files.pythonhosted.org/packages/3a/48/e2e5c0299590ad18a253c0ac09508b615baa1b382010c511186572f711d3/prek-0.4.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:4058638532c6dcbf0076d23b9264cbdd9f0f0e320762e237a6b9e4e4b854a766", size = 5718579, upload-time = "2026-06-04T07:26:27.786Z" }, - { url = "https://files.pythonhosted.org/packages/54/48/7fb3d4e7f664d1ce8ae35ec553872ffddf9fab4c5081735fdaae610b1e7c/prek-0.4.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:619bab14071670249777deea0cc0b29d904c4a514cf33b20e583900a544f0399", size = 6231622, upload-time = "2026-06-04T07:26:16.309Z" }, - { url = "https://files.pythonhosted.org/packages/46/c0/a4ddbf38034afe67cfa97c4bd81c86429ada098e7c323218d9f9fd061566/prek-0.4.4-py3-none-win32.whl", hash = "sha256:143154b329c05b2f9fa3230e604d02d9c4297dd43f96135a8ba166772e8ecd60", size = 5240317, upload-time = "2026-06-04T07:26:08.726Z" }, - { url = "https://files.pythonhosted.org/packages/bc/8c/fe97b5b095187bb2f93bbe406bccf108c879e5e4c83f165809b0d16ce0fb/prek-0.4.4-py3-none-win_amd64.whl", hash = "sha256:c38c5140ae2ea55ebb02e6ca590a416664ea1af287cdd21f54daeec53a81015a", size = 5626104, upload-time = "2026-06-04T07:26:14.81Z" }, - { url = "https://files.pythonhosted.org/packages/25/63/3586226d536796e65f8e725b531d6104e55caaa18659bdcb512661629586/prek-0.4.4-py3-none-win_arm64.whl", hash = "sha256:3efa28fb37b9ddbafb7759da8d497f0d36cf02a05816e15d6541f5669d5d2114", size = 5470399, upload-time = "2026-06-04T07:26:13.231Z" }, -] - -[[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, 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 = "protobuf" -version = "7.35.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/60/fd/5b1491d9e4b586d621c54f4c36b888714164b6875f8d6afa3f9072906a51/protobuf-7.35.0.tar.gz", hash = "sha256:a2efd84605f41e559f1881b0912b44099d0a2ac9bf46b3474823f10fb393b0e6", size = 458677, upload-time = "2026-05-19T23:02:29.197Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/ee/93d06e358a4aa32280b00e722d3ea0a1f25fc3cc5778d80581c9cca2c10e/protobuf-7.35.0-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:66be6c513931c794fa92c080ffee41671390da3d79da219cf9c0c0907f035dda", size = 433225, upload-time = "2026-05-19T23:02:19.884Z" }, - { url = "https://files.pythonhosted.org/packages/8b/39/1c76c2da93f3c507e958e0aecee2391cc44d4625de6c728bbc555195b5a8/protobuf-7.35.0-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:fcbe42a4ac09d3ec9c987ddfcd956afd0b15f1ff613bd8371bde9405ffd5c8e5", size = 328847, upload-time = "2026-05-19T23:02:22.3Z" }, - { url = "https://files.pythonhosted.org/packages/91/1a/39f7ce90a238c1a987a4d81ec26379e02ca0aff367de68e4a1fa474215b9/protobuf-7.35.0-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:4cbf5cc286130e06a6c9bbefac442431173906dfcc979712183d4adcc01b37ee", size = 344030, upload-time = "2026-05-19T23:02:23.591Z" }, - { url = "https://files.pythonhosted.org/packages/70/5b/6baf9008817964454055ff3fe65f1de0b5f1e26c80c82f7fb108b7cd4ea3/protobuf-7.35.0-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:6c0f98f10c8a05ea30f8993dfef2de093d27b490fdae78bb60c8343795d55011", size = 327130, upload-time = "2026-05-19T23:02:24.637Z" }, - { url = "https://files.pythonhosted.org/packages/8e/e5/e46adb0badc388bfb84877a5f9f026aff63f60e611016cf64dbe77e05446/protobuf-7.35.0-cp310-abi3-win32.whl", hash = "sha256:4c4617b83ade0e279d1d2bfe04025a1adb87f9ed657de038620dc0ff959357f6", size = 428946, upload-time = "2026-05-19T23:02:25.741Z" }, - { url = "https://files.pythonhosted.org/packages/a7/ab/547fbd9e16d879dd13c167478f8ae0a83a428008ca07a5e06acdc23ad473/protobuf-7.35.0-cp310-abi3-win_amd64.whl", hash = "sha256:f05bcadf9a2a6b8dda047007075135fb7d08c73d9177aabc067e1be46881a201", size = 439996, upload-time = "2026-05-19T23:02:26.808Z" }, - { url = "https://files.pythonhosted.org/packages/b8/ef/50433d346c56657a70d27f156c7b349ac59a068b01de4eb796e747eecc43/protobuf-7.35.0-py3-none-any.whl", hash = "sha256:c13f325cf242bad135c350629eeb5d54b24228eb472fb3e2e9ebbd4c5dc20ca0", size = 171659, upload-time = "2026-05-19T23:02:27.842Z" }, -] - -[[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, upload-time = "2026-01-28T18:14:54.428Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, - { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, - { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, - { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, - { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, - { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, - { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, - { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, - { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, - { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, - { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, - { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, - { 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, 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, upload-time = "2020-12-28T15:15:28.35Z" }, -] - -[[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, 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, upload-time = "2024-07-21T12:58:20.04Z" }, -] - -[[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, 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, upload-time = "2026-01-21T14:26:50.693Z" }, -] - -[[package]] -name = "pydantic" -version = "2.13.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-types" }, - { name = "pydantic-core" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, -] - -[[package]] -name = "pydantic-core" -version = "2.46.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, - { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, - { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, - { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, - { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, - { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, - { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, - { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, - { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, - { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, - { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, - { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, - { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, - { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, - { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, - { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, - { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, - { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, - { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, - { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, - { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, - { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, - { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, - { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, - { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, - { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, - { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, - { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, - { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, - { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, - { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, - { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, - { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, - { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, - { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, - { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, - { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, - { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, - { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, - { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, - { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, - { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, - { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, - { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, - { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, - { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, - { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, - { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, - { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, - { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, - { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, - { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, - { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, - { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, - { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, - { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, - { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, - { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, - { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, - { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, - { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, - { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, - { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, - { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, - { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, - { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, - { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, - { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, - { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, - { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, - { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, - { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, - { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, - { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, - { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, - { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, - { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, - { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, - { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, - { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, - { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, - { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, - { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, - { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, - { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, - { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, -] - -[[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, 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, upload-time = "2026-03-29T13:29:30.038Z" }, -] - -[[package]] -name = "pyrsistent" -version = "0.20.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ce/3a/5031723c09068e9c8c2f0bc25c3a9245f2b1d1aea8396c787a408f2b95ca/pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", size = 103642, upload-time = "2023-10-25T21:06:56.342Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/63/7544dc7d0953294882a5c587fb1b10a26e0c23d9b92281a14c2514bac1f7/pyrsistent-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", size = 83481, upload-time = "2023-10-25T21:06:15.238Z" }, - { url = "https://files.pythonhosted.org/packages/ae/a0/49249bc14d71b1bf2ffe89703acfa86f2017c25cfdabcaea532b8c8a5810/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", size = 120222, upload-time = "2023-10-25T21:06:17.144Z" }, - { url = "https://files.pythonhosted.org/packages/a1/94/9808e8c9271424120289b9028a657da336ad7e43da0647f62e4f6011d19b/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", size = 120002, upload-time = "2023-10-25T21:06:18.727Z" }, - { url = "https://files.pythonhosted.org/packages/3f/f6/9ecfb78b2fc8e2540546db0fe19df1fae0f56664a5958c21ff8861b0f8da/pyrsistent-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6288b3fa6622ad8a91e6eb759cfc48ff3089e7c17fb1d4c59a919769314af224", size = 116850, upload-time = "2023-10-25T21:06:20.424Z" }, - { url = "https://files.pythonhosted.org/packages/83/c8/e6d28bc27a0719f8eaae660357df9757d6e9ca9be2691595721de9e8adfc/pyrsistent-0.20.0-cp311-cp311-win32.whl", hash = "sha256:7d29c23bdf6e5438c755b941cef867ec2a4a172ceb9f50553b6ed70d50dfd656", size = 60775, upload-time = "2023-10-25T21:06:21.815Z" }, - { url = "https://files.pythonhosted.org/packages/98/87/c6ef52ff30388f357922d08de012abdd3dc61e09311d88967bdae23ab657/pyrsistent-0.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:59a89bccd615551391f3237e00006a26bcf98a4d18623a19909a2c48b8e986ee", size = 63306, upload-time = "2023-10-25T21:06:22.874Z" }, - { url = "https://files.pythonhosted.org/packages/15/ee/ff2ed52032ac1ce2e7ba19e79bd5b05d152ebfb77956cf08fcd6e8d760ea/pyrsistent-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e", size = 83537, upload-time = "2023-10-25T21:06:24.17Z" }, - { url = "https://files.pythonhosted.org/packages/80/f1/338d0050b24c3132bcfc79b68c3a5f54bce3d213ecef74d37e988b971d8a/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a14798c3005ec892bbada26485c2eea3b54109cb2533713e355c806891f63c5e", size = 122615, upload-time = "2023-10-25T21:06:25.815Z" }, - { url = "https://files.pythonhosted.org/packages/07/3a/e56d6431b713518094fae6ff833a04a6f49ad0fbe25fb7c0dc7408e19d20/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b14decb628fac50db5e02ee5a35a9c0772d20277824cfe845c8a8b717c15daa3", size = 122335, upload-time = "2023-10-25T21:06:28.631Z" }, - { url = "https://files.pythonhosted.org/packages/4a/bb/5f40a4d5e985a43b43f607250e766cdec28904682c3505eb0bd343a4b7db/pyrsistent-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e2c116cc804d9b09ce9814d17df5edf1df0c624aba3b43bc1ad90411487036d", size = 118510, upload-time = "2023-10-25T21:06:30.718Z" }, - { url = "https://files.pythonhosted.org/packages/1c/13/e6a22f40f5800af116c02c28e29f15c06aa41cb2036f6a64ab124647f28b/pyrsistent-0.20.0-cp312-cp312-win32.whl", hash = "sha256:e78d0c7c1e99a4a45c99143900ea0546025e41bb59ebc10182e947cf1ece9174", size = 60865, upload-time = "2023-10-25T21:06:32.742Z" }, - { url = "https://files.pythonhosted.org/packages/75/ef/2fa3b55023ec07c22682c957808f9a41836da4cd006b5f55ec76bf0fbfa6/pyrsistent-0.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:4021a7f963d88ccd15b523787d18ed5e5269ce57aa4037146a2377ff607ae87d", size = 63239, upload-time = "2023-10-25T21:06:34.035Z" }, - { url = "https://files.pythonhosted.org/packages/23/88/0acd180010aaed4987c85700b7cc17f9505f3edb4e5873e4dc67f613e338/pyrsistent-0.20.0-py3-none-any.whl", hash = "sha256:c55acc4733aad6560a7f5f818466631f07efc001fd023f34a6c203f8b6df0f0b", size = 58106, upload-time = "2023-10-25T21:06:54.387Z" }, -] - -[[package]] -name = "pytest" -version = "9.0.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "iniconfig" }, - { name = "packaging" }, - { name = "pluggy" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, -] - -[[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, 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, upload-time = "2024-03-01T18:36:18.57Z" }, -] - -[[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, 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, upload-time = "2026-05-04T01:35:27.408Z" }, -] - -[[package]] -name = "pyvis" -version = "0.3.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ipython" }, - { name = "jinja2" }, - { name = "jsonpickle" }, - { name = "networkx" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/4b/e37e4e5d5ee1179694917b445768bdbfb084f5a59ecd38089d3413d4c70f/pyvis-0.3.2-py3-none-any.whl", hash = "sha256:5720c4ca8161dc5d9ab352015723abb7a8bb8fb443edeb07f7a322db34a97555", size = 756038, upload-time = "2023-02-24T20:29:46.758Z" }, -] - -[[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, 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, 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" }, - { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, - { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, - { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, - { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, - { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, - { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, - { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, - { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, - { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, - { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, - { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, - { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, - { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, - { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, - { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, - { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, - { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, - { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, - { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, - { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, - { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, - { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, - { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, - { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, - { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, - { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, - { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, - { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, - { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, - { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, - { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, - { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, - { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, - { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, -] - -[[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, 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/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, - { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, - { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, - { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, - { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, - { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, - { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, - { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, - { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, - { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, - { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, - { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, - { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, - { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, - { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, - { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, - { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, - { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, - { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, - { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, - { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, - { 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]] -name = "qubed" -version = "0.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "frozendict" }, - { name = "humanize" }, - { name = "numpy" }, - { name = "objsize" }, - { name = "pandas" }, - { name = "protobuf" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/12/a2/d4cd7fbc41fef2b308f10ed3f9c5bb1cf40f338ff3a0e37692325ba28b77/qubed-0.3.1.tar.gz", hash = "sha256:fadcf4be1668f0cfc58fcf430a15613e0f53f0df4e07fd05694c9caba39e8258", size = 15152020, upload-time = "2026-02-04T13:27:38.081Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/53/ae/8817f6db21335200da65434aaf1adb7ab86c38f7ac88cfbaaab9a50df335/qubed-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8a5ba2af717c5225b733ec6695bc848a6507e5590ea47310c36a204b03604da8", size = 392905, upload-time = "2026-02-04T13:26:57.846Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/253ddba74f5703677d5ee2232b1925578266e4023f7a3aaec6a17e5fd6b4/qubed-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2f0ac5b238de53baac98ea66e1e2a21fa729baf69789fb657b578e7d1dbda5d", size = 379845, upload-time = "2026-02-04T13:26:53.467Z" }, - { url = "https://files.pythonhosted.org/packages/95/53/06c4c8f59b587b5ce087c796d362ecd57fea6a67fb73f380c7f8f4b5403e/qubed-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6de0a6783af5f6342f7f124c5a159fc0b84c78d95d2866801d9a280cba447a46", size = 417330, upload-time = "2026-02-04T13:26:01.262Z" }, - { url = "https://files.pythonhosted.org/packages/a1/43/33caa7eefa46c21c6b9b3d3dd96f56772a46530a27577c63a273699b0bb1/qubed-0.3.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e2f16a2c6fbf52049cde9931d2cb6777e7b63c9a2e68b949a7bd06f6bbd6e66", size = 425131, upload-time = "2026-02-04T13:26:11.324Z" }, - { url = "https://files.pythonhosted.org/packages/e9/01/7165694535259dfacff7d78377eb66b6e4187b69decbc81558a7170a8aa4/qubed-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2202d3f948231254d6c0ad19d10577ed663983c08b92a9ca8da00989465b013", size = 544973, upload-time = "2026-02-04T13:26:22.725Z" }, - { url = "https://files.pythonhosted.org/packages/f3/85/9a7914ccfea96d24f15df68a93dbb99ff14b4e75f1dd326df58286b38a20/qubed-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a783825a8b5415ac4ba15d3495a8330a4d78882715b90869f66ae1ee147826a4", size = 453565, upload-time = "2026-02-04T13:26:34.094Z" }, - { url = "https://files.pythonhosted.org/packages/b9/32/9c7cf964bea589da50bb572ee3bcd07641bf7e75961a14558dbee4b1a85c/qubed-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2edde67d3710ce780b85b18eab0749ebe1c77f92251e3d0c6efbd88ae7d661", size = 428033, upload-time = "2026-02-04T13:26:48.038Z" }, - { url = "https://files.pythonhosted.org/packages/c4/2d/458d060268a5a38635994b854507e01038186a4d96cc5b5112680d70ca3c/qubed-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c576d6bf4fd6e6b6e44c5ef67b107fb3a0bf75bac89f25eeffdb7cd846e081cb", size = 451273, upload-time = "2026-02-04T13:26:41.923Z" }, - { url = "https://files.pythonhosted.org/packages/be/2a/abfbeaa8590c39af25e71ff6c84fc3dbd77a18629046b2ae5dc05f1b5e9f/qubed-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ae99b8d994a26452b308ecc2e7f40b3209bdcc827a9966c9451dc6e124aab0a1", size = 592940, upload-time = "2026-02-04T13:27:02.719Z" }, - { url = "https://files.pythonhosted.org/packages/59/33/84d0b4d21a5153131b4e8a321bb959ab0309a220a875001bcb3901393564/qubed-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b0819d34638e5a31891576feaa6889f4b16aa0f159876c83694281c86b628363", size = 694999, upload-time = "2026-02-04T13:27:10.953Z" }, - { url = "https://files.pythonhosted.org/packages/6f/87/8d1dea898d0e70a46a9c788fee66c07fdfed08ab46b99849962458a1945e/qubed-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c9a047da1cd4ee8b6c8e84e8d26cae383c46033ae7af4c8b8641a36f5b1d9c43", size = 662808, upload-time = "2026-02-04T13:27:20.788Z" }, - { url = "https://files.pythonhosted.org/packages/35/61/ac065cd10f6109e27b57b498d539be67ac1e594e7ede519124696d5175be/qubed-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1db61763554caf12adf40095fc6fb951bd115665ac692655ceed3c3dc9aaeeeb", size = 633806, upload-time = "2026-02-04T13:27:29.057Z" }, - { url = "https://files.pythonhosted.org/packages/72/55/3761a4acd6169fed3cbe5cf809efada6ef14aa9c6cdb7007033a5f8f300b/qubed-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8a3734e6ee8954da87ebbf319402a0ab0e16e0d64a10b5b1a1e6ee13d0eec244", size = 274537, upload-time = "2026-02-04T13:27:40.483Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e1/ade8497e74afd3e6dae8ea1d79fec46ea0c284ae25e6f96ccb1b5c687496/qubed-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2f7ad49d36086114a9c48c5bbd774ec2fe9e4fbe7064e5af70eeeed1a1696444", size = 388382, upload-time = "2026-02-04T13:26:58.926Z" }, - { url = "https://files.pythonhosted.org/packages/48/96/00629bd9796c7438b613dbeca97ae4349694ce45a9f1998ff45d3f3f7aab/qubed-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6832cc6010c2f0fffbca3751c0204876da03e5feae294d2896acaea9482f3e6", size = 376862, upload-time = "2026-02-04T13:26:54.841Z" }, - { url = "https://files.pythonhosted.org/packages/f5/ae/b94eee7a2de48c1fe5fcff2abeb1f0b66f0e2959d8f8319b358814be896d/qubed-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f9273475076dafcb45bb8a510dc7a3a44c81d486edaf8fda88a3da414a318cb", size = 416993, upload-time = "2026-02-04T13:26:02.472Z" }, - { url = "https://files.pythonhosted.org/packages/ea/cc/832aa8537960349d4bb043762d57171e1256611ebda815381cabb7f92ce1/qubed-0.3.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8825a2d7e0ddaf3b841f3a746669ca8a195a86e4a0a04a5a0ce26987f4b976b1", size = 424594, upload-time = "2026-02-04T13:26:12.328Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cd/21bc5fed290401da7774fc05b32cf045dae07b208b3169924ecbb59069fb/qubed-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0758cd417772386f7ba3972c6b4a23258569e654ef5cc77f15d0d19c1db8d7d8", size = 544629, upload-time = "2026-02-04T13:26:23.789Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/0c291803b21b811c1398d8d1133dc3fabc2d6a8aab1804c2b8788af5eaee/qubed-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5f3999551b6d888320002a7c7c978c75efbce8f2ad449a2ddafbf3df89f4cfd", size = 453413, upload-time = "2026-02-04T13:26:35.125Z" }, - { url = "https://files.pythonhosted.org/packages/ac/84/8ce812bae0fc382715eaf831bc3d6fbdd10683e1c9d47e0b7f0b62df60b7/qubed-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71e33a38e02b632efb454ae2ca90e818201e6f6706485f2ac1d45e69f977f1c", size = 427902, upload-time = "2026-02-04T13:26:49.156Z" }, - { url = "https://files.pythonhosted.org/packages/69/40/40845475c5153521783adbf80f2455fbb33ff625c29b6ba8e57555970afc/qubed-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9de33e0a06bde6068ef1f2dc1df354826c9a1e63e8263cba4be55db3e24dd7a", size = 450608, upload-time = "2026-02-04T13:26:42.944Z" }, - { url = "https://files.pythonhosted.org/packages/6b/c0/100edf7a233d917f2979fbbe3a18e20d515df4f7564847452e71cc8e914b/qubed-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4ed3902eaf6ffaf248cdd680f52cc48ca7a9c6a259738c013c382d6d9ae9a0bf", size = 592941, upload-time = "2026-02-04T13:27:03.839Z" }, - { url = "https://files.pythonhosted.org/packages/ec/50/18bd283574ad125576b267e37cb906399abb80a3b30eda70cf629ea0d65b/qubed-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fb8344fd7942086f1878c355f5fa3bfd7241022b3264384d72af9dc21083da9e", size = 694756, upload-time = "2026-02-04T13:27:12.072Z" }, - { url = "https://files.pythonhosted.org/packages/c7/44/c8154bb943855c3def9537b9643a901e4be827581b1240a69846ff6811a5/qubed-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a3c85eebed4bc4b229793fb27a2cad19caddd36df4115cbe62e3f2762ac94a6", size = 662092, upload-time = "2026-02-04T13:27:21.837Z" }, - { url = "https://files.pythonhosted.org/packages/19/69/017821dda7e5fe9b69cf5ae962668c632c83448f47c4be1a1256ac7c7fae/qubed-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2e2ad894d86d07181d7345c7555835c3fbbf16655a3adbc15368b44b407c570", size = 634032, upload-time = "2026-02-04T13:27:30.397Z" }, - { url = "https://files.pythonhosted.org/packages/7b/be/3e853dd96781110b82e2d5ba51a14884ef7518a85578f19db1fdfee5f74e/qubed-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:71541f0d98df10e22e40c11f54867df3272436f87758e1c10c49d074571b821d", size = 274558, upload-time = "2026-02-04T13:27:41.563Z" }, - { url = "https://files.pythonhosted.org/packages/f6/78/00920a7dab93468c6abd4364900372adf5a6e02373874fee8a048b173e2f/qubed-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0982545641cb7877c25ceefc788e2e0c5918b8d942419b1b3ebecf8ef64aa6c1", size = 388026, upload-time = "2026-02-04T13:26:59.877Z" }, - { url = "https://files.pythonhosted.org/packages/17/32/763131474decd86745ba83d5c7c77dcb95fc6144e44d61ac26c4970c8bc3/qubed-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:26432bf22b7aeab036c763639c1874471eea8f58b69bcc789c746fcf6a0135e0", size = 376678, upload-time = "2026-02-04T13:26:55.884Z" }, - { url = "https://files.pythonhosted.org/packages/ec/33/859744b54e692514c18d7d1c356b0dd49e01308990962b3d05edacf421f0/qubed-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5144c5f0e9929ef0219b5a06d43d58c5c111c165a21313f98892200d23a46e40", size = 417055, upload-time = "2026-02-04T13:26:03.989Z" }, - { url = "https://files.pythonhosted.org/packages/7b/52/d3fcd58088922485566dac0c613ce54b5afb411a47ac1c0fc30f394e4d56/qubed-0.3.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7be7875347f1fab4342e503f69f2cf7ec77e23134c17ee119489a26c6abf81dc", size = 424312, upload-time = "2026-02-04T13:26:13.767Z" }, - { url = "https://files.pythonhosted.org/packages/6b/46/0159a2f0f3a9ac907454cf5e7e9de53409470535feeab1f005a57cff9869/qubed-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6b44d86229cd4b43b524eab440ae8b3e4a1e7706815d9393c56bf02c09f25f4", size = 544218, upload-time = "2026-02-04T13:26:25.249Z" }, - { url = "https://files.pythonhosted.org/packages/aa/06/b890c192d4d05a9ceeaacfec2c9ef1bc7f4ed5a9a88613442cd409a7103c/qubed-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0426c2cc15f126584a64df6e27ee0162d44d413493689218544b444972d67b2", size = 453095, upload-time = "2026-02-04T13:26:36.147Z" }, - { url = "https://files.pythonhosted.org/packages/01/88/31e64cd98f079243157ced5d0a6ca3c0637e3e93982269bff5d6accd36fa/qubed-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04ed84be17ecff54a813b159b0ade5b6fe1daf9d0d3e8cce58160a71898de084", size = 427903, upload-time = "2026-02-04T13:26:50.046Z" }, - { url = "https://files.pythonhosted.org/packages/a4/c3/6fcdde26e45c18dfaf67cad426580d9efd8b44b839db29755cc10dde7e52/qubed-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ee277521885d362a2f4282874aadaa7b5b021473cf18b62ccbab49d02490738", size = 450209, upload-time = "2026-02-04T13:26:44.927Z" }, - { url = "https://files.pythonhosted.org/packages/87/63/8eb2f83b994ed59c6526f09b72fa8898188a0023ad0348d14bbcfdfc715c/qubed-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5e716bd15a5e614da853a0b835ad16a9c57a13f9243194abd4d7a4aabbf82dd0", size = 592620, upload-time = "2026-02-04T13:27:04.995Z" }, - { url = "https://files.pythonhosted.org/packages/4a/be/4fe1e7634101016eef06843805633c9ec6b8e69bc40ef50190de4284271d/qubed-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:71f18b847fa9bc205368dcd176cc27e1c5c0cd4cfd74d3e2770ba422b3b14ff0", size = 694654, upload-time = "2026-02-04T13:27:13.7Z" }, - { url = "https://files.pythonhosted.org/packages/7c/17/84cf9d4615ea0e29d8709346ffd5bed5bcfdb29baf8101949181c5239cc8/qubed-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:eeeb96bf930b2bd944c0b3145c18dda22673dcbe98af1b4fca0429c96eeefae3", size = 661802, upload-time = "2026-02-04T13:27:22.87Z" }, - { url = "https://files.pythonhosted.org/packages/7c/27/4826d44a5a47ed4d3ba3d64f519d6ce65511239dbd613081a2b5b03a425e/qubed-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c2a3519538aae695c2a129006010d1291bf387e86b2477587dd421d07d0d111", size = 634066, upload-time = "2026-02-04T13:27:31.613Z" }, - { url = "https://files.pythonhosted.org/packages/c9/cf/97f4ea7ca129eea1d97139e56c3af415f082f6b063a0d3da537c4cf77984/qubed-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:677f12a55d20a43beade986c45508668d93762072a7f8710dc768263832305f2", size = 274355, upload-time = "2026-02-04T13:27:42.559Z" }, - { url = "https://files.pythonhosted.org/packages/1c/25/2d77b2aa954c7581dfe614e4edc9e213e0bc537a791567955cc89c908ea3/qubed-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bce5c3ca22b4125f7b2337072892562949c66b22060f1458f0ffc8914dea664", size = 415858, upload-time = "2026-02-04T13:26:05.072Z" }, - { url = "https://files.pythonhosted.org/packages/cd/38/145f404396aedeb65ea110d14a74f02ab5f2c64fcf0441f196a8b509394c/qubed-0.3.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c7eeb24e4d156df188000388b8b93b8659b8ff56a3a0204eb868a63d43c9fb5d", size = 423639, upload-time = "2026-02-04T13:26:15.08Z" }, - { url = "https://files.pythonhosted.org/packages/52/54/04beadee9ce2fb42d9cd9dead26aebfd614f01d9c57287b07406abfbc567/qubed-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57bb442de810879c2e0801b6b9e32e9ec30d37dbd02b464809523ea5294fe655", size = 543014, upload-time = "2026-02-04T13:26:27.385Z" }, - { url = "https://files.pythonhosted.org/packages/e6/f6/37e2e0efb56b29f16d533b0bfa56fdbff94289e527e0a529e9a6547ef8b7/qubed-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:738ab71e1a714f3a3e3110e3eaac2778a5684f21515196b6b3c83843f9c5243b", size = 452627, upload-time = "2026-02-04T13:26:37.269Z" }, - { url = "https://files.pythonhosted.org/packages/e9/aa/699a433b495665b99c4bb2dd37f4c8a15147dc955174d4a4eec3a2105fc7/qubed-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:af5e093933172f0820860b2fb4d909a6bb8b17043bf40c143088bf1529da0d26", size = 591409, upload-time = "2026-02-04T13:27:06.111Z" }, - { url = "https://files.pythonhosted.org/packages/b2/fe/0d701edc6db7c16f50c3d41387791eae38c475d3f63677823ec5549a9b1d/qubed-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f0a5caf87d9fc853adde336759ef88e174be84b74bc29d582788fe70735dbba4", size = 694115, upload-time = "2026-02-04T13:27:14.784Z" }, - { url = "https://files.pythonhosted.org/packages/dd/5b/3a91f3ee0de53bcdb4a6c80590243952acb891c088ddcaf066d4a209d0df/qubed-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8144ab517ef48f43c49b97d07c05d230015222f8c091bb1daac00ef62bfc74d9", size = 661144, upload-time = "2026-02-04T13:27:24.061Z" }, - { url = "https://files.pythonhosted.org/packages/34/3e/28ab2031409540bc38f3f6e2db1d546b9d7c242755b6bf5c1ad4b7cab85a/qubed-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e164e030591f2ed0eb5525efe785ff04fc7080f0ef4ccfe8d83e25091006d709", size = 633167, upload-time = "2026-02-04T13:27:33.18Z" }, - { url = "https://files.pythonhosted.org/packages/a3/90/8651f479d7a726bc5f25cb90f99f33420fec6355b71248eb9b266753bce9/qubed-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:49b0eec981057347991bc80b3886501ca45ee0e426843c0450a8b0710d444659", size = 387842, upload-time = "2026-02-04T13:27:00.858Z" }, - { url = "https://files.pythonhosted.org/packages/1d/69/679e544a4fe1505b9f78f047ce1c81cf6db84b382c58d4a6ca46cfa48327/qubed-0.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97f9c034ae3ad1d7123e269c7fba225c20dbbaeebdd80803c77a69f3b010f8ff", size = 376202, upload-time = "2026-02-04T13:26:56.852Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1d/d4a5fa3a40e697f1ec8337e152cc241ec6aeff84f7514a6cfbee6b6536f5/qubed-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d154b12afffb5891beb06157b5bfc31e33d579d6a8682d866eb848bb18cc55f", size = 416737, upload-time = "2026-02-04T13:26:06.481Z" }, - { url = "https://files.pythonhosted.org/packages/6e/66/efc34b57ee3d21334d6127b187e51a249a37484b707cbed393d464419d09/qubed-0.3.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac14223782c4f346167a23511408347cf2a5c109c07f4319a9eb8f08bb4cdd53", size = 424440, upload-time = "2026-02-04T13:26:16.861Z" }, - { url = "https://files.pythonhosted.org/packages/c2/11/27f13777d9a4f2f0425c32cdc4f6fb528393e238768c185124abe15ff024/qubed-0.3.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e80a636152fa172ac298cb87bdae96412fa5f9e9a2149d1cb94bb4068508c941", size = 540728, upload-time = "2026-02-04T13:26:28.82Z" }, - { url = "https://files.pythonhosted.org/packages/9a/9c/8ed6325f5c9c8ff96a41adef53f111bcf5dec51d2687afd2fac8504f19fc/qubed-0.3.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cb088a6846416ca092be5793c5191df97a94a3c3e5c43468be42b811ef14020", size = 453464, upload-time = "2026-02-04T13:26:38.885Z" }, - { url = "https://files.pythonhosted.org/packages/b1/d6/c0dac0a00e3730130f897389d263042c26b2dd182cbffb2960b93c64007d/qubed-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a5e0cae1aba8bd95d020bc127bc404211c96a0ff66502f2bd5ff04a8fa06643", size = 427694, upload-time = "2026-02-04T13:26:51.557Z" }, - { url = "https://files.pythonhosted.org/packages/de/e6/51e368c70bc5d3ee557b92e059fe1280330ed70d537cf8739ba71f316319/qubed-0.3.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:409c6475c99f28e372e48c9fc13284a48fffadfb6f54e531aad59d608457de41", size = 451222, upload-time = "2026-02-04T13:26:45.98Z" }, - { url = "https://files.pythonhosted.org/packages/3a/74/5deba084e718c14509af8a4bb676785d91dc6516ac633e1b72dbf0598216/qubed-0.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:246332f045e37f6e88c773d4c8684441d0ec2a40c8ede7bae896c8ac6d513471", size = 592438, upload-time = "2026-02-04T13:27:07.033Z" }, - { url = "https://files.pythonhosted.org/packages/28/c6/f41468881fde149c23df5bf568bac54bce9409374c76043ba19f159185c2/qubed-0.3.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2caf36b5cba258fb2f6301f879d4a16ad1a74648a0593d9f057c6b6aff603fd5", size = 694800, upload-time = "2026-02-04T13:27:16.309Z" }, - { url = "https://files.pythonhosted.org/packages/f2/76/409605ac8bf26382d51d0e9df55344fa3cede74feaaebaf75a9fc07b221e/qubed-0.3.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4c5ce4d40840f45d2c359649a49a4fb271ec1650a162d20d5fea1c7106cb375d", size = 661966, upload-time = "2026-02-04T13:27:25.271Z" }, - { url = "https://files.pythonhosted.org/packages/83/56/6efbbf4df4d483390c679456f87daed5e80c8f663d4d5065689ae6e8fc27/qubed-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5aa6c0d749a3186f1d4fb38e5ece4ba3513ee9cf24d182156e35fc7d637ce08", size = 634051, upload-time = "2026-02-04T13:27:34.241Z" }, - { url = "https://files.pythonhosted.org/packages/d3/8b/65aef7336037d71978ea2e33da4a6c43262f2e31b84ee74c32e85f2aff4e/qubed-0.3.1-cp314-cp314-win32.whl", hash = "sha256:f4b7f53c722d0550a6be0e1ac148a79228f0cda2f3c32e9297b86bdd61c228d9", size = 257945, upload-time = "2026-02-04T13:27:44.705Z" }, - { url = "https://files.pythonhosted.org/packages/9b/89/0249375839f15086a08f213d25c0aa3828e16808cf68bdb088eb01125520/qubed-0.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:c861104640c86883a5e0c8ae8682eb5eb417f4506282d36adfa9329bad26a3a7", size = 274944, upload-time = "2026-02-04T13:27:43.771Z" }, - { url = "https://files.pythonhosted.org/packages/9a/3a/4694ed8a3a70b5ea484d8e82cb1988ddc5b19aebf9433ea5ced28263b64f/qubed-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1ba620950ed169f9d9652597181b03fe37b7febef65c18956c5032006d06886", size = 416016, upload-time = "2026-02-04T13:26:07.498Z" }, - { url = "https://files.pythonhosted.org/packages/43/2c/56fcd7992f12856ffb6b01aa3f17b0e799ddeec6cae97eb5e632413750c3/qubed-0.3.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f76e96ae183a5f72a03f36681e995db7b9b6ecd2bce6b880135ef5f0dba51ad5", size = 423689, upload-time = "2026-02-04T13:26:18.458Z" }, - { url = "https://files.pythonhosted.org/packages/8e/40/0a3d024e77ec6223e7256dcb92013a1ba139e569cba5dcd1470679171f1a/qubed-0.3.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d256f1db00336ce347e1d646d2e1065bdfe1d8de9b06cc60ab1e81aa5a135363", size = 544069, upload-time = "2026-02-04T13:26:30.318Z" }, - { url = "https://files.pythonhosted.org/packages/51/de/c32a46fbe272b436681bdda6d3073308598e98af4a74f6c26e1d07c0ddf4/qubed-0.3.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c38414c20f17128d0c62de60515e54d280fb35c13a576aa0d4bbf8e8b6b7ff7", size = 452810, upload-time = "2026-02-04T13:26:39.827Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e9/3059877538ad438428d12200141e155a5e3521fbeacb361a7d95c187fb2d/qubed-0.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6dba1d9c479c79605c1d0ddb841f93b5fac94f80085a9cbdca3319b1111baadd", size = 591547, upload-time = "2026-02-04T13:27:08.312Z" }, - { url = "https://files.pythonhosted.org/packages/2d/0d/10ac0b1f602b6f54bc57b49bb9e672b9dacb70fff960206bcd52aff0de3b/qubed-0.3.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ee0f20cd860ca67136765ef12cdcb04fafc15c0eab33ed9d733603d237d5e328", size = 693845, upload-time = "2026-02-04T13:27:17.444Z" }, - { url = "https://files.pythonhosted.org/packages/5f/47/3ed547c0fce3f7d5e794f739783ee758f72061b792053f68d99db89d852f/qubed-0.3.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9923d183c0c71a8c2a1b3e95a40df128141cedd7cd21f73c9d9a2aa34ad58f5a", size = 661304, upload-time = "2026-02-04T13:27:26.375Z" }, - { url = "https://files.pythonhosted.org/packages/b7/cc/fb5e887dfe9561a96bcd9969f8412736aaf8b40ea7fc76edb7f6791b7787/qubed-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5fcee6ee49265f43fb986860f105b7a2c735e8f7c80feeb02f618f1354ab1", size = 633291, upload-time = "2026-02-04T13:27:35.261Z" }, - { url = "https://files.pythonhosted.org/packages/8a/a4/61c0893c62b70b3ae7096b51071134939ce3a7a8dc6d3be3485a14c704ef/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0525ea3e7286a2e1306c2d53cde122d596fe32c97c4b77ffb791647b6d06df40", size = 417314, upload-time = "2026-02-04T13:26:10.193Z" }, - { url = "https://files.pythonhosted.org/packages/97/88/75d5cea6fa9af6b25e93a6fb6775199601020193c813eba624d626265b6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97b8e5a1ceabf68032b8c38a1a0fa2b425e2f137e1ae0b29d27a9b2c640d2923", size = 424549, upload-time = "2026-02-04T13:26:21.319Z" }, - { url = "https://files.pythonhosted.org/packages/0a/79/c14068df38c8bcadb81c204e06eb4f33388c40061792346b46c55864ec6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:536e9479355758596d552314b29185f8e9606ee1fa7551b9ad71d575fe41bfa0", size = 543966, upload-time = "2026-02-04T13:26:32.643Z" }, - { url = "https://files.pythonhosted.org/packages/34/6d/ead34b0f6aa8049b29db20bdc38c3378a1a71e6a4b3ef4d4b2b658b54774/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:288446a11cb22d194322858ebed1882d48cde40e65c40a5b2bee4d1eb204a7e0", size = 453255, upload-time = "2026-02-04T13:26:40.813Z" }, - { url = "https://files.pythonhosted.org/packages/6c/69/e0616ec49e8bbf7b2f365b93336b63ade3e10c377a0f7921f4f78da1cc5b/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:164eed7d512094c9f6bedcbf62dcc15d78cfcf42133fb594fc68494dac0dde9b", size = 427645, upload-time = "2026-02-04T13:26:52.492Z" }, - { url = "https://files.pythonhosted.org/packages/ed/34/3455baea73fd18b29884c9e30806b20fffaccff1b57d533091e6cf849b4a/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48790481e503e6e65d0acd2afdc085bef6cc9f876d9d6ff791c1f6ece99b1e9f", size = 450995, upload-time = "2026-02-04T13:26:47.013Z" }, - { url = "https://files.pythonhosted.org/packages/97/d2/57842a201a430afa1f6eec433f51cfcd08601486daaf074b42a1a4047314/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c7583848ea8e79d7b78427979fe7100fd0c271cf14efadfa5cd25e9878c67850", size = 593098, upload-time = "2026-02-04T13:27:09.828Z" }, - { url = "https://files.pythonhosted.org/packages/09/b3/dacad16f12ce515f8ad3c61ed7b6d1749f90b9c36b1a0947ef5bace5ed0c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:ab4475288640f2e380f3704fb7b44f4e6d8a8987041f6fb3cc76ecdc02e333cd", size = 694846, upload-time = "2026-02-04T13:27:18.574Z" }, - { url = "https://files.pythonhosted.org/packages/84/e6/78473835a64ba33c2e6963c120eeff496182f81006f955c19ca7ea17e25f/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:25d8d3603b16e3202b53145150bcb8ebedce14fc42fd076d17feaf3a0de897a2", size = 662539, upload-time = "2026-02-04T13:27:27.404Z" }, - { url = "https://files.pythonhosted.org/packages/60/7f/ab8d6582ba660b03da7617bab310f1db095a3ce622fdfcc5c2e50778208c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:cd90899b3182ecf6bfac689664be37726a1f28d06200a8b15b22fdc3b79cd72b", size = 633528, upload-time = "2026-02-04T13:27:36.452Z" }, -] - -[[package]] -name = "referencing" -version = "0.37.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "rpds-py" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -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, upload-time = "2025-10-13T15:30:47.625Z" }, -] - -[[package]] -name = "requests" -version = "2.34.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, -] - -[[package]] -name = "rich" -version = "15.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markdown-it-py" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, -] - -[[package]] -name = "rich-argparse" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "rich" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6a/e5/1064c43203a357d668cd42435f7a15fe6af51512d85b2104fecb937aa861/rich_argparse-1.8.0.tar.gz", hash = "sha256:679df3d832fa94ad6e4bdb07ded088cd7ea2dddc58ae9b2b46346a40b06cbc0c", size = 38940, upload-time = "2026-05-01T15:18:43.604Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl", hash = "sha256:d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142", size = 25616, upload-time = "2026-05-01T15:18:42.395Z" }, -] - -[[package]] -name = "rpds-py" -version = "2026.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609, upload-time = "2026-05-28T11:58:50.78Z" }, - { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460, upload-time = "2026-05-28T11:58:52.374Z" }, - { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031, upload-time = "2026-05-28T11:58:53.775Z" }, - { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" }, - { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" }, - { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" }, - { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, - { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" }, - { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225, upload-time = "2026-05-28T11:59:02.433Z" }, - { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487, upload-time = "2026-05-28T11:59:04.012Z" }, - { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798, upload-time = "2026-05-28T11:59:05.485Z" }, - { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, - { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390, upload-time = "2026-05-28T11:59:08.402Z" }, - { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097, upload-time = "2026-05-28T11:59:09.786Z" }, - { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361, upload-time = "2026-05-28T11:59:11.079Z" }, - { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040, upload-time = "2026-05-28T11:59:12.531Z" }, - { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775, upload-time = "2026-05-28T11:59:13.827Z" }, - { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329, upload-time = "2026-05-28T11:59:15.271Z" }, - { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539, upload-time = "2026-05-28T11:59:16.665Z" }, - { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674, upload-time = "2026-05-28T11:59:17.991Z" }, - { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268, upload-time = "2026-05-28T11:59:19.434Z" }, - { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280, upload-time = "2026-05-28T11:59:21Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233, upload-time = "2026-05-28T11:59:22.454Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009, upload-time = "2026-05-28T11:59:23.845Z" }, - { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113, upload-time = "2026-05-28T11:59:25.184Z" }, - { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838, upload-time = "2026-05-28T11:59:26.749Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436, upload-time = "2026-05-28T11:59:28.11Z" }, - { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734, upload-time = "2026-05-28T11:59:29.689Z" }, - { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045, upload-time = "2026-05-28T11:59:31.033Z" }, - { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967, upload-time = "2026-05-28T11:59:32.318Z" }, - { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787, upload-time = "2026-05-28T11:59:33.655Z" }, - { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179, upload-time = "2026-05-28T11:59:35Z" }, - { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173, upload-time = "2026-05-28T11:59:36.43Z" }, - { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162, upload-time = "2026-05-28T11:59:37.995Z" }, - { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093, upload-time = "2026-05-28T11:59:39.453Z" }, - { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829, upload-time = "2026-05-28T11:59:40.896Z" }, - { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786, upload-time = "2026-05-28T11:59:42.626Z" }, - { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920, upload-time = "2026-05-28T11:59:44.124Z" }, - { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059, upload-time = "2026-05-28T11:59:47.177Z" }, - { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030, upload-time = "2026-05-28T11:59:48.603Z" }, - { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975, upload-time = "2026-05-28T11:59:50.314Z" }, - { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178, upload-time = "2026-05-28T11:59:51.673Z" }, - { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481, upload-time = "2026-05-28T11:59:53.148Z" }, - { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519, upload-time = "2026-05-28T11:59:54.505Z" }, - { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446, upload-time = "2026-05-28T11:59:56.081Z" }, - { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287, upload-time = "2026-05-28T11:59:57.448Z" }, - { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033, upload-time = "2026-05-28T11:59:58.881Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891, upload-time = "2026-05-28T12:00:00.516Z" }, - { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646, upload-time = "2026-05-28T12:00:02.394Z" }, - { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830, upload-time = "2026-05-28T12:00:04.189Z" }, - { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830, upload-time = "2026-05-28T12:00:05.797Z" }, - { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613, upload-time = "2026-05-28T12:00:07.433Z" }, - { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183, upload-time = "2026-05-28T12:00:09.227Z" }, - { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578, upload-time = "2026-05-28T12:00:10.779Z" }, - { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573, upload-time = "2026-05-28T12:00:12.443Z" }, - { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861, upload-time = "2026-05-28T12:00:14.09Z" }, - { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633, upload-time = "2026-05-28T12:00:15.66Z" }, - { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074, upload-time = "2026-05-28T12:00:17.291Z" }, - { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635, upload-time = "2026-05-28T12:00:18.73Z" }, - { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756, upload-time = "2026-05-28T12:00:20.217Z" }, - { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831, upload-time = "2026-05-28T12:00:21.711Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127, upload-time = "2026-05-28T12:00:23.326Z" }, - { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034, upload-time = "2026-05-28T12:00:24.89Z" }, - { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823, upload-time = "2026-05-28T12:00:26.676Z" }, - { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144, upload-time = "2026-05-28T12:00:28.577Z" }, - { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959, upload-time = "2026-05-28T12:00:30.304Z" }, - { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558, upload-time = "2026-05-28T12:00:31.764Z" }, - { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789, upload-time = "2026-05-28T12:00:33.247Z" }, - { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405, upload-time = "2026-05-28T12:00:34.819Z" }, - { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975, upload-time = "2026-05-28T12:00:36.268Z" }, - { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701, upload-time = "2026-05-28T12:00:37.82Z" }, - { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806, upload-time = "2026-05-28T12:00:39.492Z" }, - { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985, upload-time = "2026-05-28T12:00:40.94Z" }, - { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219, upload-time = "2026-05-28T12:00:43.15Z" }, - { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148, upload-time = "2026-05-28T12:00:44.638Z" }, - { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196, upload-time = "2026-05-28T12:00:46.14Z" }, - { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981, upload-time = "2026-05-28T12:00:47.531Z" }, - { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961, upload-time = "2026-05-28T12:00:49.216Z" }, - { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965, upload-time = "2026-05-28T12:00:51.111Z" }, - { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526, upload-time = "2026-05-28T12:00:52.77Z" }, - { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190, upload-time = "2026-05-28T12:00:54.215Z" }, - { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921, upload-time = "2026-05-28T12:00:55.673Z" }, - { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766, upload-time = "2026-05-28T12:00:57.518Z" }, - { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343, upload-time = "2026-05-28T12:00:58.978Z" }, - { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502, upload-time = "2026-05-28T12:01:00.656Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916, upload-time = "2026-05-28T12:01:02.22Z" }, - { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855, upload-time = "2026-05-28T12:01:03.821Z" }, - { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422, upload-time = "2026-05-28T12:01:05.194Z" }, - { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576, upload-time = "2026-05-28T12:01:06.722Z" }, - { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640, upload-time = "2026-05-28T12:01:08.441Z" }, - { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322, upload-time = "2026-05-28T12:01:09.934Z" }, - { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066, upload-time = "2026-05-28T12:01:11.48Z" }, - { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586, upload-time = "2026-05-28T12:01:13.051Z" }, - { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415, upload-time = "2026-05-28T12:01:14.631Z" }, - { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427, upload-time = "2026-05-28T12:01:16.153Z" }, - { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615, upload-time = "2026-05-28T12:01:17.809Z" }, - { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786, upload-time = "2026-05-28T12:01:19.419Z" }, - { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583, upload-time = "2026-05-28T12:01:21.013Z" }, - { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941, upload-time = "2026-05-28T12:01:22.548Z" }, - { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349, upload-time = "2026-05-28T12:01:24.118Z" }, - { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922, upload-time = "2026-05-28T12:01:25.522Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003, upload-time = "2026-05-28T12:01:27.062Z" }, - { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245, upload-time = "2026-05-28T12:01:28.51Z" }, - { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015, upload-time = "2026-05-28T12:01:30.214Z" }, - { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016, upload-time = "2026-05-28T12:01:31.656Z" }, - { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775, upload-time = "2026-05-28T12:01:33.136Z" }, - { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270, upload-time = "2026-05-28T12:01:34.574Z" }, - { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285, upload-time = "2026-05-28T12:01:36.127Z" }, - { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581, upload-time = "2026-05-28T12:01:37.635Z" }, - { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041, upload-time = "2026-05-28T12:01:39.307Z" }, - { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946, upload-time = "2026-05-28T12:01:41.043Z" }, - { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526, upload-time = "2026-05-28T12:01:43.032Z" }, - { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165, upload-time = "2026-05-28T12:01:44.648Z" }, - { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778, upload-time = "2026-05-28T12:01:46.337Z" }, - { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839, upload-time = "2026-05-28T12:01:48.109Z" }, - { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866, upload-time = "2026-05-28T12:01:49.648Z" }, - { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441, upload-time = "2026-05-28T12:01:51.408Z" }, - { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151, upload-time = "2026-05-28T12:01:53.43Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195, upload-time = "2026-05-28T12:01:54.901Z" }, - { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850, upload-time = "2026-05-28T12:01:56.601Z" }, - { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" }, - { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" }, - { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" }, - { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, - { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" }, - { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820, upload-time = "2026-05-28T12:02:06.401Z" }, - { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243, upload-time = "2026-05-28T12:02:08.013Z" }, - { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541, upload-time = "2026-05-28T12:02:09.661Z" }, - { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, -] - -[[package]] -name = "scikit-learn" -version = "1.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "joblib" }, - { name = "narwhals" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "threadpoolctl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767, upload-time = "2026-06-02T11:54:32.706Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/be/e844fd9586e66540a15b71924d17a6cbc1bb749e81ddd0a796bcdba4c055/scikit_learn-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9db6f4d34e68c8899e4cab27fdf8eafe6ed21f2ba52ceb25ea250cd237f8e47b", size = 8789686, upload-time = "2026-06-02T11:53:05.439Z" }, - { url = "https://files.pythonhosted.org/packages/42/e2/ff880f62677a17d035817d543cb0fc8727d01eccbee81c5f7fc733a9d856/scikit_learn-1.9.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f401448645a3e7bc115aa3c094097865155b34bff1cba8101857d9104e99074c", size = 8256782, upload-time = "2026-06-02T11:53:08.904Z" }, - { url = "https://files.pythonhosted.org/packages/25/64/eb40435e1a508ab1b4e284ce43ae80f6a162e5be5e38ed5a6fab467a9ea4/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd3a8ef0c758555a3b23c03adaa858af32f7736785ded50ad5991f59c4ed03fa", size = 8992419, upload-time = "2026-06-02T11:53:11.551Z" }, - { url = "https://files.pythonhosted.org/packages/8d/da/4810a28e473185429e45a57eebcc91fc991b33d889cc0676063e671db03d/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7e254636164090da847715a27f8e5478feb98c40a9e0ee90cbd277de9e5ceb8", size = 9281411, upload-time = "2026-06-02T11:53:15.063Z" }, - { url = "https://files.pythonhosted.org/packages/3b/67/be3d369f40d8178ba3bd86635d132e08cb5329b023e4669d9426d84bc007/scikit_learn-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:5dc1818c77575d149e25fce9ef82dd7b7263ae372f03494158668ad632a69759", size = 8272736, upload-time = "2026-06-02T11:53:18.108Z" }, - { url = "https://files.pythonhosted.org/packages/37/79/a733f02dc2118da7e77a134b34f39f40201a353311b011d20859d2db3556/scikit_learn-1.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:366652351f092b219c248f1e72821e841960a63d8f358f1dcfd54dc1cbdbbc28", size = 7919564, upload-time = "2026-06-02T11:53:21.2Z" }, - { url = "https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2bd41b0d201bc81575531b96b713d3eb5e5f50fb0b82101ff0f92294fdc236ac", size = 8741122, upload-time = "2026-06-02T11:53:24.08Z" }, - { url = "https://files.pythonhosted.org/packages/cc/d5/2b5148f2279196775e1db2aeb85d14b70ac80e7e32b3b28e7ebeafb0901d/scikit_learn-1.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5be45aa4a42a68a533913a6ed736cf309de2226411c79ef8d609a5456f1939b1", size = 8261512, upload-time = "2026-06-02T11:53:27.183Z" }, - { url = "https://files.pythonhosted.org/packages/a0/ee/5adbc77656b71f9456a2f5a7a9fdb4bcf9207a6b962889f1c2f9323afa4e/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e50ed4da51974e86e940690e9a3d82e729b62b5a49f7c9bac534d515d39d86f", size = 8837603, upload-time = "2026-06-02T11:53:30.328Z" }, - { url = "https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8", size = 9132097, upload-time = "2026-06-02T11:53:33.456Z" }, - { url = "https://files.pythonhosted.org/packages/83/a4/c8e67227c680e2259c8864ae72ff48b06e16a6f51253a22167aa02a8aa4e/scikit_learn-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:4306775fad04cc4b472a1b15af1ae9cede1540fbfcc17fbce3767cd8dc7ae283", size = 8211173, upload-time = "2026-06-02T11:53:36.602Z" }, - { url = "https://files.pythonhosted.org/packages/cf/fd/3c0863792e98e67e9184aa4029288a175935eb65443afcd30d4f143450cf/scikit_learn-1.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:26e22435f63bcdcf396b574273f29f13dd531f5ea035801f5be10ba1540a4e60", size = 7867451, upload-time = "2026-06-02T11:53:39.075Z" }, - { url = "https://files.pythonhosted.org/packages/3c/01/cf3310626b6d48d3e9be69a1223f9180360b5e6edb045f50fade723ce494/scikit_learn-1.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:80746d63bd4b6eaca54d36fe5feaf4d28bb38dc6f9470f81c7cad7c40155f119", size = 8705188, upload-time = "2026-06-02T11:53:41.964Z" }, - { url = "https://files.pythonhosted.org/packages/3e/04/5acd7ae280c5f93b6ac5ef6cdec14eef4c8d1cd91d85b3292989c94d96b1/scikit_learn-1.9.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5b934c45c252844a91d69fda3a34cff5e7307e1db10d77cb10a3980312c74713", size = 8228299, upload-time = "2026-06-02T11:53:44.817Z" }, - { url = "https://files.pythonhosted.org/packages/0c/39/ffe829a5b8ecb40a518724a997794657fdc354ada5e8fe8e64d998c0bac9/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:38c3dcb9a1ffb85505ec53d54c7b4aea0cff70050425a7760c2af661ac85df05", size = 8789690, upload-time = "2026-06-02T11:53:47.461Z" }, - { url = "https://files.pythonhosted.org/packages/1f/88/8dab5de10c638c083772a6be83a3d8106ced492f74a928c8693638e5bb50/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da76d09304a4706db7cc1e3ebaa3b6b98a67365cc11d2996c4f1e58ba47df714", size = 9087723, upload-time = "2026-06-02T11:53:50.702Z" }, - { url = "https://files.pythonhosted.org/packages/20/3f/7917ca72464038f6240ec70c29f94862d08a34a74291ae4d4ec5eb8186a0/scikit_learn-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5808d98f15c6bf6d9d96d2348c1997392a5888ce7097e664105f930c4bca1277", size = 8184330, upload-time = "2026-06-02T11:53:53.396Z" }, - { url = "https://files.pythonhosted.org/packages/78/c7/15739eb2f61fda3c54639e9942414e5a19ad8a8d1f5a3266afad7cb7df80/scikit_learn-1.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:d77f54c017633791bc0225a43e2f8d03745fdcfe4880268fcc4df15f505dec2e", size = 7840653, upload-time = "2026-06-02T11:53:56.035Z" }, - { url = "https://files.pythonhosted.org/packages/f4/7d/c9a35cf59b20a86fec24d306f1547b78dec194b08d367ce2a3e4854169d9/scikit_learn-1.9.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9656acd4e93f74e0b66c8a36c88830a99252dfa900044d36bc2212ae89a47162", size = 8713289, upload-time = "2026-06-02T11:53:58.788Z" }, - { url = "https://files.pythonhosted.org/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:24360002ae845e7866522b0a5bbf690802e7bc388cac8663502e78aa98598aa2", size = 8245141, upload-time = "2026-06-02T11:54:01.694Z" }, - { url = "https://files.pythonhosted.org/packages/7d/79/f4a0c4fe9711154cddabf913471153af79056382ddc612cfe5ee0ff4b72e/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5162ad10a418c8a282dde04c9aa06965de3e9a65f33c1440c0ae69bb1a09d913", size = 8847671, upload-time = "2026-06-02T11:54:04.448Z" }, - { url = "https://files.pythonhosted.org/packages/f0/af/4d72d9e475ac83719160c662619e4bf7b95c19507cd582e7d0167a3c3dae/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fea2cc5677ab49d6f5bade978c866da44957b712d92e9635e8b4f723013c3cb", size = 9118104, upload-time = "2026-06-02T11:54:07.205Z" }, - { url = "https://files.pythonhosted.org/packages/a2/d5/6a58eea2cb9abbb9b3f2bb8b2cfb3243d1152d69f442d256c7af71304769/scikit_learn-1.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:64fa347efc1c839c487433e40c5144d38c336e8a2b59c81aa8660373945c2673", size = 8290674, upload-time = "2026-06-02T11:54:10.087Z" }, - { url = "https://files.pythonhosted.org/packages/65/5b/d4c879cf358f1187141cf90ced473f087183489090244f50c124a2ee478b/scikit_learn-1.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:1b944b6db288f6b926e3650026ddafb988929de95d11fc2cc5fa117773c9ba42", size = 7978807, upload-time = "2026-06-02T11:54:12.769Z" }, - { url = "https://files.pythonhosted.org/packages/8a/43/bfae3121ec67ae09150d453c442c7c1cc166e9aefe056e6ab3b7728a5cfc/scikit_learn-1.9.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4ccacf04ca5f4b492158a5f28afe0ace43f81b2571e4b9a66d34848b46128949", size = 9031941, upload-time = "2026-06-02T11:54:15.436Z" }, - { url = "https://files.pythonhosted.org/packages/75/b0/20a4546eb17f3b25d3c66df15810411c14ed5065bcfab50b53c96fb627b2/scikit_learn-1.9.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:ee1a8db2c18c08e34c7412d4b10be1cac214cd4ea7dc9715a6a327eb49a37c96", size = 8613528, upload-time = "2026-06-02T11:54:18.842Z" }, - { url = "https://files.pythonhosted.org/packages/18/3c/e440e039bb82cd19004edaaad00acbde0fb9b461083c3ecf37941c557312/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:147e9329ef0e39f75d4cffa02b2aa48d827832684926cd5210d9a2cb5c57246b", size = 8855050, upload-time = "2026-06-02T11:54:21.699Z" }, - { url = "https://files.pythonhosted.org/packages/43/26/b341b8dab5998da6270a3a42c2152c578501354d36f944b5856757035ef8/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bad8f8b9950321b54c965fdcbac6c6c55e79e16646b49977bcf3668d3870a1a", size = 9097190, upload-time = "2026-06-02T11:54:24.454Z" }, - { url = "https://files.pythonhosted.org/packages/fb/de/b650b4d69b84468cfa2e28a3ff7b8103743029e6446ce1a97fe060ef688c/scikit_learn-1.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:78fc56eafd4edb9575d2d8950d1dd152061abb573341a1cb7e099fc40f6c6666", size = 8963204, upload-time = "2026-06-02T11:54:27.428Z" }, - { url = "https://files.pythonhosted.org/packages/ee/f3/ff83d76d7418112e5a61326443cdda87be3545dd8d6599c95b2481a4419e/scikit_learn-1.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa", size = 8222661, upload-time = "2026-06-02T11:54:30.192Z" }, -] - -[[package]] -name = "scipy" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, - { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, - { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, - { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, - { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057, upload-time = "2026-02-23T00:16:36.931Z" }, - { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300, upload-time = "2026-02-23T00:16:49.108Z" }, - { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333, upload-time = "2026-02-23T00:17:01.293Z" }, - { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314, upload-time = "2026-02-23T00:17:12.576Z" }, - { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512, upload-time = "2026-02-23T00:17:23.424Z" }, - { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248, upload-time = "2026-02-23T00:17:34.561Z" }, - { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, - { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, - { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, - { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, - { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, - { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, - { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, - { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, - { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, - { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, - { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, - { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, - { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, - { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, - { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, - { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, - { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, - { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, - { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, - { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, - { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, - { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, - { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, - { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, - { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, - { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, - { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510, upload-time = "2026-02-23T00:21:01.015Z" }, - { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131, upload-time = "2026-02-23T00:21:05.888Z" }, - { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032, upload-time = "2026-02-23T00:21:09.904Z" }, - { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766, upload-time = "2026-02-23T00:21:14.313Z" }, - { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007, upload-time = "2026-02-23T00:21:19.663Z" }, - { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333, upload-time = "2026-02-23T00:21:25.278Z" }, - { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066, upload-time = "2026-02-23T00:21:31.358Z" }, - { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763, upload-time = "2026-02-23T00:21:37.247Z" }, - { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984, upload-time = "2026-02-23T00:22:35.023Z" }, - { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877, upload-time = "2026-02-23T00:22:39.798Z" }, - { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750, upload-time = "2026-02-23T00:21:42.289Z" }, - { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858, upload-time = "2026-02-23T00:21:47.706Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723, upload-time = "2026-02-23T00:21:52.039Z" }, - { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098, upload-time = "2026-02-23T00:21:56.185Z" }, - { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397, upload-time = "2026-02-23T00:22:01.404Z" }, - { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163, upload-time = "2026-02-23T00:22:07.024Z" }, - { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291, upload-time = "2026-02-23T00:22:12.585Z" }, - { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317, upload-time = "2026-02-23T00:22:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327, upload-time = "2026-02-23T00:22:24.442Z" }, - { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, -] - -[[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, 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, upload-time = "2024-12-04T17:35:26.475Z" }, -] - -[[package]] -name = "sortedcontainers" -version = "2.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, -] - -[[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, 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, upload-time = "2023-09-30T13:58:03.53Z" }, -] - -[[package]] -name = "termcolor" -version = "3.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/46/79/cf31d7a93a8fdc6aa0fbb665be84426a8c5a557d9240b6239e9e11e35fc5/termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5", size = 14434, upload-time = "2025-12-29T12:55:21.882Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/d1/8bb87d21e9aeb323cc03034f5eaf2c8f69841e40e4853c2627edf8111ed3/termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5", size = 7734, upload-time = "2025-12-29T12:55:20.718Z" }, -] - -[[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, 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, upload-time = "2025-03-13T13:49:21.846Z" }, -] - -[[package]] -name = "toolz" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613, upload-time = "2025-10-17T04:03:21.661Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093, upload-time = "2025-10-17T04:03:20.435Z" }, -] - -[[package]] -name = "tqdm" -version = "4.68.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/b3/36c8ecf72e8925200671613332db156d84b99b3aee742a41c1938ebb0808/tqdm-4.68.1.tar.gz", hash = "sha256:fc163d96b287bd031e1aa24421ce4411b25559bd0a1be4fe649bdaa4d2c02bf5", size = 171236, upload-time = "2026-06-05T17:23:15.267Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/47/aa/218a0eb34de1f753c83e4d0d1c8e7c4cef27f20dcb8342e024f63a80dc86/tqdm-4.68.1-py3-none-any.whl", hash = "sha256:fea4a90e4023f764914569f7802a297277c5ab1a66be5144143e142e1a4031d8", size = 78354, upload-time = "2026-06-05T17:23:13.654Z" }, -] - -[[package]] -name = "traitlets" -version = "5.15.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344, upload-time = "2026-06-03T12:26:06.181Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858, upload-time = "2026-06-03T12:26:04.395Z" }, -] - -[[package]] -name = "ty" -version = "0.0.44" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/f4/fbb120226e4f239652525a664bad976a23fea58c646d1323f2296fee8a61/ty-0.0.44.tar.gz", hash = "sha256:5886229830ab77022842a1c55d2ef57405621a91fc465969fa6d538661898173", size = 5803665, upload-time = "2026-06-05T03:33:48.612Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/c6/b5b8c4762efb4d85401652658786506867553ecfc2beac3bcf361a15937f/ty-0.0.44-py3-none-linux_armv6l.whl", hash = "sha256:272d31e7ad49b1dc5e8465a9fe700354e14c755b40d9c75f08f031d786903df3", size = 11607267, upload-time = "2026-06-05T03:33:27.154Z" }, - { url = "https://files.pythonhosted.org/packages/1c/5c/f4b405570737f44ab0fc4214117fe43353f8f0825a1823d9e99e9c8e57be/ty-0.0.44-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b92c4ddd7a3daf2049715edec9dc70cf6fd31a5a318ee647258f90dd75495eed", size = 11382826, upload-time = "2026-06-05T03:33:54.374Z" }, - { url = "https://files.pythonhosted.org/packages/9d/aa/fb9835aa492b148d7754cb4c3db07f31a7e2e09f0d8e0e8e297f01125dd2/ty-0.0.44-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4d42cfd84a690f6654b2a4f0515027c21b692cf2512d32e6433f754893a95609", size = 10809741, upload-time = "2026-06-05T03:33:33.22Z" }, - { url = "https://files.pythonhosted.org/packages/47/f5/0b20ba6b66837a5a37bab7f74ac0732c66e766b5f0b2d55b30816b15f348/ty-0.0.44-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc47ae87e4cb7db2a9166bb23b78a905c3626e523296ec5bccf36b5e89bda6b", size = 11318153, upload-time = "2026-06-05T03:34:09.403Z" }, - { url = "https://files.pythonhosted.org/packages/ca/bb/b82ea730774a4f950f06d355fbc120d51eac7da23b57fc79ef6ff7c79cbb/ty-0.0.44-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46d867e80f16f421ac72c9a85240dbf050d62d9b3fbd10a8b5b082fb21679e0b", size = 11403108, upload-time = "2026-06-05T03:33:57.745Z" }, - { url = "https://files.pythonhosted.org/packages/8b/41/e2c83856165291049c702eda4e2ef3d3ebd875e8a0a77b8cc4ef3156aa1c/ty-0.0.44-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:411f5de0f96a4e4e5cccc3e0d55954c41f6a99ee6ca1fe5a7226cbc68406e053", size = 11944815, upload-time = "2026-06-05T03:34:15.793Z" }, - { url = "https://files.pythonhosted.org/packages/66/95/1fa6a101eb9d5bec042b87e5ca9c8fc349b75961beca6306f95af5cd5539/ty-0.0.44-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b15f01ecb4e2b46c05a1769293f9d32c3d4a1e4e7dfccf37c604d705dc3e3f4", size = 12476121, upload-time = "2026-06-05T03:33:51.529Z" }, - { url = "https://files.pythonhosted.org/packages/72/6a/da4b45b1229d39207c6140681c2aaf4f5691bcb1dc830b84450ca25c8f57/ty-0.0.44-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:edd32b7467af509c99c0244c2226a4e4c03400699003ec33373282ab931654d9", size = 12091340, upload-time = "2026-06-05T03:33:36.289Z" }, - { url = "https://files.pythonhosted.org/packages/16/c7/e1c9260ea5188195962ff1214ace418b5d69187e8fa7c0a1ec4994b8071b/ty-0.0.44-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503a585f4007387c3afc58bae23a7ca1b9f236cbdb1a881dc36110655ceb1937", size = 11986201, upload-time = "2026-06-05T03:34:00.624Z" }, - { url = "https://files.pythonhosted.org/packages/92/f9/312bb112da9b1a7da295bb0426be85e72ad48da4e4266c36d77256b4058d/ty-0.0.44-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d28bcfa83243d77c2316944e8cf197f73597bf17d1ddc047d0b10a762531252", size = 12168475, upload-time = "2026-06-05T03:33:30.386Z" }, - { url = "https://files.pythonhosted.org/packages/02/de/64978d603f6c3e5dd7cb97eca2214567d8ad0c85fa4a7435b7852ae4b779/ty-0.0.44-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:56fd2dd0192def189715b25f5338f6222fb827884dc34111e50aa1c4e061cee5", size = 11292937, upload-time = "2026-06-05T03:34:06.448Z" }, - { url = "https://files.pythonhosted.org/packages/64/63/a625d8a3c71dcaa01988d330f849c465fe72ead4b0bbab44fe4bd6e672b5/ty-0.0.44-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7f8d990489032de1984e73c159f3e760d754cf83a602b874827d943821f63595", size = 11421560, upload-time = "2026-06-05T03:33:23.995Z" }, - { url = "https://files.pythonhosted.org/packages/99/96/61aeba0e629b0c91bd316ff94d00e38817ec493ae4316f39508988daa287/ty-0.0.44-py3-none-musllinux_1_2_i686.whl", hash = "sha256:f61ffe72996a755432922fe90b28db593f572eb5cbf48e3ef4e67b282533d1b0", size = 11580282, upload-time = "2026-06-05T03:34:03.308Z" }, - { url = "https://files.pythonhosted.org/packages/fa/f7/256e1538ce21cab67b381201444c42454de69d310059c4929d92a0ee9c48/ty-0.0.44-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2b237a143bac4f30cec9257d45f01e72da97030a80a09a2b69cfef065f09c37f", size = 12085723, upload-time = "2026-06-05T03:33:45.953Z" }, - { url = "https://files.pythonhosted.org/packages/d3/76/ec3957c10872643a98db7a7895101ad89c5b7cba4bc6c4aebbbfc91756cc/ty-0.0.44-py3-none-win32.whl", hash = "sha256:6a24586c65419223ac5bab4822d49ab493a5d19ea2a897514284c232b9d6166a", size = 10892978, upload-time = "2026-06-05T03:34:12.603Z" }, - { url = "https://files.pythonhosted.org/packages/a5/7d/ba24050432196e7d7f03945e5c379951593c48e04e5c5d5275cfc4624791/ty-0.0.44-py3-none-win_amd64.whl", hash = "sha256:8cccb27e348c89a9733fbad1b2efadfbad79b107c7e52adb52dfd8a70156a38d", size = 11987058, upload-time = "2026-06-05T03:33:42.692Z" }, - { url = "https://files.pythonhosted.org/packages/71/34/16ec3f1fec75292d9c56a8b5fef037ceaba85a5c30562206c1a245a00a67/ty-0.0.44-py3-none-win_arm64.whl", hash = "sha256:58049504e7a12bf1957f24a5384a332c94d5590127083a80db5e5a1bed34190b", size = 11329961, upload-time = "2026-06-05T03:33:39.427Z" }, -] - -[[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, 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, upload-time = "2025-08-25T13:49:24.86Z" }, -] - -[[package]] -name = "typing-inspection" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, -] - -[[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, 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, upload-time = "2026-04-24T15:22:05.876Z" }, -] - -[[package]] -name = "urllib3" -version = "2.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, -] - -[[package]] -name = "wcwidth" -version = "0.8.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/49/b4/51fe890511f0f242d07cb1ebe6a5b6db417262b9d2568b460347c57d95cc/wcwidth-0.8.1.tar.gz", hash = "sha256:faf5b4a5366a72dc49cad48cdf21f52bdf63bdda995178e483ba247ff79089b9", size = 1466072, upload-time = "2026-06-08T05:57:23.146Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/6e/95b0e537de1f4d4301f76f944642c6da50d1511cc7b3d64dc418a66c7509/wcwidth-0.8.1-py3-none-any.whl", hash = "sha256:f453740b1e4a4f3291faa37944c555d71056c4da08d59809b307ef4feba695c8", size = 323092, upload-time = "2026-06-08T05:57:21.413Z" }, -] - -[[package]] -name = "wget" -version = "3.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/47/6a/62e288da7bcda82b935ff0c6cfe542970f04e29c756b0e147251b2fb251f/wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061", size = 10857, upload-time = "2015-10-22T15:26:37.51Z" } - -[[package]] -name = "xarray" -version = "2026.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "packaging" }, - { name = "pandas" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4b/a6/6fe936a798a3a38a79c7422d1a31afd2e9a14690fcb0ccff96bc01f04bf2/xarray-2026.4.0.tar.gz", hash = "sha256:c4ac9a01a945d90d5b1628e2af045099a9d4943536d4f2ee3ae963c3b222d15b", size = 3132311, upload-time = "2026-04-13T19:45:36.688Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/83/6d810a8a9ebc9c307989b418840c20e46907c74d707beb67ab566773e6fc/xarray-2026.4.0-py3-none-any.whl", hash = "sha256:d43751d9fb4a90f9249c30431684f00c41bc874f1edccd862631a40cbc0edf08", size = 1414326, upload-time = "2026-04-13T19:45:34.659Z" }, -] - -[[package]] -name = "zipp" -version = "4.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, -] diff --git a/pproc/workflows/cd.yml b/pproc/workflows/cd.yml new file mode 100644 index 00000000..cf58fe88 --- /dev/null +++ b/pproc/workflows/cd.yml @@ -0,0 +1,12 @@ +name: cd + +on: + push: + tags: + - '[0-9]+.[0-9]+.[0-9]+' # NOTE there are other tags for generating "unstable modules", those should *not* trigger pypi upload + +jobs: + + pypi: + uses: ecmwf/reusable-workflows/.github/workflows/cd-pypi.yml@v2 + secrets: inherit diff --git a/pproc/workflows/sync.yml b/pproc/workflows/sync.yml new file mode 100644 index 00000000..fc06d5d9 --- /dev/null +++ b/pproc/workflows/sync.yml @@ -0,0 +1,26 @@ +name: sync + +# Controls when the workflow will run +on: + + # Trigger the workflow on all pushes + push: + branches: + - '**' + tags: + - '**' + + # Trigger the workflow when a branch or tag is deleted + delete: ~ + +jobs: + + # Calls a reusable CI workflow to sync the current with a remote repository. + # It will correctly handle addition of any new and removal of existing Git objects. + sync: + name: sync + uses: ecmwf/reusable-workflows/.github/workflows/sync.yml@v2 + secrets: + target_repository: ecsdk/pproc + target_username: ClonedDuck + target_token: ${{ secrets.BITBUCKET_PAT }} diff --git a/pproc/workflows/test-pypi.yml b/pproc/workflows/test-pypi.yml new file mode 100644 index 00000000..4a4e8a22 --- /dev/null +++ b/pproc/workflows/test-pypi.yml @@ -0,0 +1,11 @@ +name: test cd + +on: + workflow_dispatch: ~ + +jobs: + deploy: + uses: ecmwf/reusable-workflows/.github/workflows/cd-pypi.yml@v2 + secrets: inherit + with: + testpypi: true From 4055e3eabda02ed781c44c7db5f3446347a8581d Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 14:39:34 +0100 Subject: [PATCH 72/95] Fix workflows --- .github/workflows/cd-pproc.yml | 86 ++++------------------------------ .github/workflows/sync.yml | 10 ++-- pproc/workflows/cd.yml | 12 ----- pproc/workflows/sync.yml | 26 ---------- pproc/workflows/test-pypi.yml | 11 ----- 5 files changed, 14 insertions(+), 131 deletions(-) delete mode 100644 pproc/workflows/cd.yml delete mode 100644 pproc/workflows/sync.yml delete mode 100644 pproc/workflows/test-pypi.yml diff --git a/.github/workflows/cd-pproc.yml b/.github/workflows/cd-pproc.yml index b99c17b5..afb957e0 100644 --- a/.github/workflows/cd-pproc.yml +++ b/.github/workflows/cd-pproc.yml @@ -1,82 +1,14 @@ -name: Publish pproc to PyPI or TestPyPI +name: cd on: - workflow_dispatch: - inputs: - tag: - description: 'Release tag X.Y.Z' - required: true - type: string - environment: - description: 'Publish to' - required: true - type: choice - options: - - testpypi - - pypi - default: testpypi + push: + tags: + - '[0-9]+.[0-9]+.[0-9]+' # NOTE there are other tags for generating "unstable modules", those should *not* trigger pypi upload jobs: - test: - runs-on: ubuntu-latest - strategy: - fail-fast: true - matrix: - python_version: ["3.11", "3.12", "3.13"] - steps: - - uses: astral-sh/setup-uv@v7 - - name: Run pproc tests - run: | - cd pproc - uv sync --python "${{ matrix.python_version }}" --all-packages - uv run prek --directory . --config ../.pre-commit-config.yaml - if [ -d "tests" ]; then - uv run --prerelease allow -m tests/ -v - fi - publish: - needs: test - runs-on: ubuntu-latest - strategy: - fail-fast: true - matrix: - python_version: ["3.11", "3.12", "3.13"] - permissions: - id-token: write - contents: read - - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ inputs.tag }} - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python_version }} - - - name: Install build tools - run: python -m pip install --upgrade build twine - - - name: Build package - run: | - cd pproc - python -m build - - - name: Check package - run: | - cd pproc - twine check dist/* - - - name: Publish to Test PyPI - if: inputs.environment == 'testpypi' - uses: pypa/gh-action-pypi-publish@release/v1 - with: - packages-dir: pproc/dist/ - repository-url: https://test.pypi.org/legacy/ - - - name: Publish to PyPI - if: inputs.environment == 'pypi' - uses: pypa/gh-action-pypi-publish@release/v1 - with: - packages-dir: pproc/dist/ + pypi: + uses: ecmwf/reusable-workflows/.github/workflows/cd-pypi.yml@v2 + with: + working-directory: pproc + secrets: inherit diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index 3597c7bc..fc06d5d9 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -1,20 +1,20 @@ name: sync - + # Controls when the workflow will run on: - + # Trigger the workflow on all pushes push: branches: - '**' tags: - '**' - + # Trigger the workflow when a branch or tag is deleted delete: ~ - + jobs: - + # Calls a reusable CI workflow to sync the current with a remote repository. # It will correctly handle addition of any new and removal of existing Git objects. sync: diff --git a/pproc/workflows/cd.yml b/pproc/workflows/cd.yml deleted file mode 100644 index cf58fe88..00000000 --- a/pproc/workflows/cd.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: cd - -on: - push: - tags: - - '[0-9]+.[0-9]+.[0-9]+' # NOTE there are other tags for generating "unstable modules", those should *not* trigger pypi upload - -jobs: - - pypi: - uses: ecmwf/reusable-workflows/.github/workflows/cd-pypi.yml@v2 - secrets: inherit diff --git a/pproc/workflows/sync.yml b/pproc/workflows/sync.yml deleted file mode 100644 index fc06d5d9..00000000 --- a/pproc/workflows/sync.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: sync - -# Controls when the workflow will run -on: - - # Trigger the workflow on all pushes - push: - branches: - - '**' - tags: - - '**' - - # Trigger the workflow when a branch or tag is deleted - delete: ~ - -jobs: - - # Calls a reusable CI workflow to sync the current with a remote repository. - # It will correctly handle addition of any new and removal of existing Git objects. - sync: - name: sync - uses: ecmwf/reusable-workflows/.github/workflows/sync.yml@v2 - secrets: - target_repository: ecsdk/pproc - target_username: ClonedDuck - target_token: ${{ secrets.BITBUCKET_PAT }} diff --git a/pproc/workflows/test-pypi.yml b/pproc/workflows/test-pypi.yml deleted file mode 100644 index 4a4e8a22..00000000 --- a/pproc/workflows/test-pypi.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: test cd - -on: - workflow_dispatch: ~ - -jobs: - deploy: - uses: ecmwf/reusable-workflows/.github/workflows/cd-pypi.yml@v2 - secrets: inherit - with: - testpypi: true From c256b95c49bf5fc9b19dfa648dca7728301f8220 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 15:38:51 +0100 Subject: [PATCH 73/95] Add tests and entrypoints to pproc-core --- pproc/pyproject.toml | 21 +- .../tests/templates/{ => v2}/clustereps.yaml | 2 +- pproc/tests/templates/{ => v2}/ensms.yaml | 8 +- pproc/tests/templates/{ => v2}/extreme.yaml | 8 +- pproc/tests/templates/{ => v2}/prob.yaml | 4 +- pproc/tests/templates/{ => v2}/quantiles.yaml | 8 +- pproc/tests/templates/{ => v2}/t850.yaml | 6 +- pproc/tests/templates/{ => v2}/thermo.yaml | 14 +- pproc/tests/templates/{ => v2}/wind.yaml | 7 +- pproc/tests/templates/v3/ensms.yaml | 223 ++ pproc/tests/templates/v3/prob.yaml | 157 + pproc/tests/templates/v3/quantiles.yaml | 1209 +++++++ pproc/tests/templates/v3/thermo.yaml | 886 ++++++ pproc/tests/test_products.py | 66 +- pproc/uv.lock | 2824 +++++++++++++++++ 15 files changed, 5409 insertions(+), 34 deletions(-) rename pproc/tests/templates/{ => v2}/clustereps.yaml (99%) rename pproc/tests/templates/{ => v2}/ensms.yaml (92%) rename pproc/tests/templates/{ => v2}/extreme.yaml (94%) rename pproc/tests/templates/{ => v2}/prob.yaml (97%) rename pproc/tests/templates/{ => v2}/quantiles.yaml (92%) rename pproc/tests/templates/{ => v2}/t850.yaml (97%) rename pproc/tests/templates/{ => v2}/thermo.yaml (87%) rename pproc/tests/templates/{ => v2}/wind.yaml (92%) create mode 100644 pproc/tests/templates/v3/ensms.yaml create mode 100644 pproc/tests/templates/v3/prob.yaml create mode 100644 pproc/tests/templates/v3/quantiles.yaml create mode 100644 pproc/tests/templates/v3/thermo.yaml create mode 100644 pproc/uv.lock diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index 50c538da..69ef4675 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -16,7 +16,7 @@ requires-python = ">=3.10" dependencies = [ "code-meters >= 0.0.3", "conflator >= 0.1.7", - "earthkit-data >= 0.19.0", + "earthkit-data[fdb,mars] >= 0.19.0,<1", "earthkit-meteo >= 0.6.1", "earthkit-time >= 0.1.3", "earthkit-utils >= 0.2.1", @@ -26,9 +26,10 @@ dependencies = [ "numexpr", "numpy >= 1.21.2", "pandas >= 1.3.3", + "pproc-core", "psutil", "pydantic", - "pyfdb", + "pyfdb <= 0.1.3", "pyyaml", "scikit-learn", "scipy >= 1.8", @@ -38,7 +39,7 @@ dependencies = [ dynamic = ["version"] [project.optional-dependencies] -tcycl = ["pyinfero >= 0.1.1", "wget"] +tcycl = ["pyinfero @ git+https://github.com/ecmwf/infero.git@develop#subdirectory=src/infero/api/pyinfero", "wget"] test = ["pytest", "requests"] [project.scripts] @@ -69,6 +70,8 @@ pproc-monthly-stats = "pproc.monthly_stats:main" pproc-config="pproc.config_generation:main" pproc-ecpoint = "pproc.ecpoint:main" pproc-flight-levels = "pproc.flight_levels:main" +ppcore-config = "ppcore.config:main" +ppcore-product = "ppcore.product:main" [tool.pytest.ini_options] minversion = "6.0" @@ -85,5 +88,17 @@ write_to = "src/pproc/_version.py" write_to_template = '''# Do not change! Do not track in version control! __version__ = "{version}" ''' +root = ".." local_scheme = "no-local-version" scm.git.describe_command = ['git', 'describe', '--dirty', '--tags', '--long', '--abbrev=40', '--match', '[0-9]*'] + +[tool.uv] +package = true + +[tool.uv.sources] +pproc-core = { workspace = true } + +[tool.uv.workspace] +members = [ + "../pproc-core", +] diff --git a/pproc/tests/templates/clustereps.yaml b/pproc/tests/templates/v2/clustereps.yaml similarity index 99% rename from pproc/tests/templates/clustereps.yaml rename to pproc/tests/templates/v2/clustereps.yaml index 35c9a579..f87f7dd6 100644 --- a/pproc/tests/templates/clustereps.yaml +++ b/pproc/tests/templates/v2/clustereps.yaml @@ -185,4 +185,4 @@ indexes: null deterministic_is_control: true date: 2024-05-07 00:00:00 compute_spread: true -pca_output: null \ No newline at end of file +pca_output: null diff --git a/pproc/tests/templates/ensms.yaml b/pproc/tests/templates/v2/ensms.yaml similarity index 92% rename from pproc/tests/templates/ensms.yaml rename to pproc/tests/templates/v2/ensms.yaml index bf5aeba0..16bb81a3 100644 --- a/pproc/tests/templates/ensms.yaml +++ b/pproc/tests/templates/v2/ensms.yaml @@ -4,7 +4,7 @@ parallelisation: queue_size: 2 parameters: 2t: - inputs: + inputs: fc: request: param: '167.128' @@ -34,12 +34,12 @@ inputs: type: pf number: [1, 2, 3, 4, 5] source: - type: "fdb" + type: "fdb" outputs: default: metadata: mars.expver: '0001' numberOfForecastsInEnsemble: 6 perturbationNumber: 0 - target: - type: "fdb" \ No newline at end of file + target: + type: "fdb" diff --git a/pproc/tests/templates/extreme.yaml b/pproc/tests/templates/v2/extreme.yaml similarity index 94% rename from pproc/tests/templates/extreme.yaml rename to pproc/tests/templates/v2/extreme.yaml index e38d6382..22d319bf 100644 --- a/pproc/tests/templates/extreme.yaml +++ b/pproc/tests/templates/v2/extreme.yaml @@ -16,7 +16,7 @@ parameters: request: param: 228004 step: - 12-36: 0-24 + 12-36: 0-24 accumulations: step: type: legacywindow @@ -52,10 +52,10 @@ inputs: stream: enfo date: 20240507 time: 12 - type: pf + type: pf number: [1, 2, 3, 4, 5] source: - type: fdb + type: fdb clim: request: class: od @@ -71,4 +71,4 @@ inputs: outputs: default: target: - type: fdb \ No newline at end of file + type: fdb diff --git a/pproc/tests/templates/prob.yaml b/pproc/tests/templates/v2/prob.yaml similarity index 97% rename from pproc/tests/templates/prob.yaml rename to pproc/tests/templates/v2/prob.yaml index 3a30a28c..0dfbc3ca 100644 --- a/pproc/tests/templates/prob.yaml +++ b/pproc/tests/templates/v2/prob.yaml @@ -20,7 +20,7 @@ parameters: metadata: paramId: 131073 value: 273.15 -inputs: +inputs: fc: request: class: od @@ -41,5 +41,5 @@ outputs: localDefinitionNumber: 5 mars.expver: '0001' type: ep - target: + target: type: "fdb" diff --git a/pproc/tests/templates/quantiles.yaml b/pproc/tests/templates/v2/quantiles.yaml similarity index 92% rename from pproc/tests/templates/quantiles.yaml rename to pproc/tests/templates/v2/quantiles.yaml index faf1594f..94a3f8fd 100644 --- a/pproc/tests/templates/quantiles.yaml +++ b/pproc/tests/templates/v2/quantiles.yaml @@ -5,7 +5,7 @@ parallelisation: quantiles: 3 parameters: 2t: - inputs: + inputs: fc: request: param: '167.128' @@ -39,10 +39,10 @@ inputs: type: pf number: [1, 2, 3, 4, 5] source: - type: "fdb" + type: "fdb" outputs: default: metadata: mars.expver: '0001' - target: - type: "fdb" \ No newline at end of file + target: + type: "fdb" diff --git a/pproc/tests/templates/t850.yaml b/pproc/tests/templates/v2/t850.yaml similarity index 97% rename from pproc/tests/templates/t850.yaml rename to pproc/tests/templates/v2/t850.yaml index 9053bc68..658cbc25 100644 --- a/pproc/tests/templates/t850.yaml +++ b/pproc/tests/templates/v2/t850.yaml @@ -55,7 +55,7 @@ parameters: bitsPerValue: 24 - coords: [[0], [12]] operation: maximum - std_anomaly: true + std_anomaly: true thresholds: - metadata: {"paramId": 133093} comparison: '>' @@ -71,7 +71,7 @@ parameters: packingType: grid_ccsds - coords: [[0], [12]] operation: minimum - std_anomaly: true + std_anomaly: true thresholds: - metadata: {"paramId": 133096} comparison: < @@ -140,4 +140,4 @@ outputs: localDefinitionNumber: 5 bitsPerValue: 8 target: - type: fdb \ No newline at end of file + type: fdb diff --git a/pproc/tests/templates/thermo.yaml b/pproc/tests/templates/v2/thermo.yaml similarity index 87% rename from pproc/tests/templates/thermo.yaml rename to pproc/tests/templates/v2/thermo.yaml index d2c7e4ff..8b69a6c7 100644 --- a/pproc/tests/templates/thermo.yaml +++ b/pproc/tests/templates/v2/thermo.yaml @@ -1,7 +1,7 @@ parallelisation: n_par_compute: 2 -defs: - base_request: &base_request +defs: + base_request: &base_request class: od domain: g expver: '0001' @@ -29,9 +29,9 @@ parameters: step: coords: [[0]] indices: - inputs: - accum: - request: + inputs: + accum: + request: <<: *base_request date: 20240605 param: *accum_params @@ -53,7 +53,7 @@ parameters: - wbt - wbgt - 2r -inputs: +inputs: inst: request: <<: *base_request @@ -76,4 +76,4 @@ outputs: path: "intermediate.grib" indices: target: - type: fdb \ No newline at end of file + type: fdb diff --git a/pproc/tests/templates/wind.yaml b/pproc/tests/templates/v2/wind.yaml similarity index 92% rename from pproc/tests/templates/wind.yaml rename to pproc/tests/templates/v2/wind.yaml index 01753ab8..9f25ac09 100644 --- a/pproc/tests/templates/wind.yaml +++ b/pproc/tests/templates/v2/wind.yaml @@ -1,4 +1,7 @@ -parallelisation: 1 +parallelisation: + n_par_compute: 2 + n_par_read: 2 + queue_size: 2 inputs: fc: request: @@ -49,4 +52,4 @@ outputs: indicatorOfParameter: 10 mars.expver: '0001' target: - type: fdb \ No newline at end of file + type: fdb diff --git a/pproc/tests/templates/v3/ensms.yaml b/pproc/tests/templates/v3/ensms.yaml new file mode 100644 index 00000000..3d8893ba --- /dev/null +++ b/pproc/tests/templates/v3/ensms.yaml @@ -0,0 +1,223 @@ +log: + level: INFO + format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' +execution: + hosts: 1 + workers: 1 +products: +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: 20240507 + legBaseTime: 1200 + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: '{num_fields}:int' + stream: enfo + type: em + operation: mean + output: + targets: + - name: fdb + request: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: cf + param: 167 + step: 12 + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pf + param: 167 + step: 12 + number: + - 1 + - 2 + - 3 + - 4 + - 5 + dtype: float64 +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: 20240507 + legBaseTime: 1200 + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: '{num_fields}:int' + stream: enfo + type: es + operation: std + output: + targets: + - name: fdb + request: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: cf + param: 167 + step: 12 + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pf + param: 167 + step: 12 + number: + - 1 + - 2 + - 3 + - 4 + - 5 + dtype: float64 +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: 20240507 + legBaseTime: 1200 + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: '{num_fields}:int' + stream: enfo + type: em + operation: mean + output: + targets: + - name: fdb + request: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: cf + param: 167 + step: 36 + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pf + param: 167 + step: 36 + number: + - 1 + - 2 + - 3 + - 4 + - 5 + dtype: float64 +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + oceanAtmosphereCoupling: 2 + legBaseDate: 20240507 + legBaseTime: 1200 + legNumber: 1 + perturbationNumber: 0 + bitsPerValue: 16 + numberOfForecastsInEnsemble: '{num_fields}:int' + stream: enfo + type: es + operation: std + output: + targets: + - name: fdb + request: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: cf + param: 167 + step: 36 + - class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pf + param: 167 + step: 36 + number: + - 1 + - 2 + - 3 + - 4 + - 5 + dtype: float64 diff --git a/pproc/tests/templates/v3/prob.yaml b/pproc/tests/templates/v3/prob.yaml new file mode 100644 index 00000000..77ffd86b --- /dev/null +++ b/pproc/tests/templates/v3/prob.yaml @@ -0,0 +1,157 @@ +log: + level: INFO + format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' +execution: + hosts: 1 + workers: 1 +products: +- name: ensemble + preprocessing: + actions: [] + accumulations: + step: + operation: minimum + coords: + - - 12 + deaccumulate: false + statistics: + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + paramId: 131073 + stream: enfo + type: ep + operation: threshold_probability + thresholds: + - lower_scale_factor: 2 + lower_comparison: <= + lower_value: 273.15 + upper_scale_factor: 0 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: cf + date: '20240507' + time: '1200' + param: '167' + step: 12 + - class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: pf + date: '20240507' + time: '1200' + param: '167' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 12 + dtype: float64 + output: + targets: + - name: fdb + request: + class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: ep + date: 20240507 + time: 12 + param: 131073 + step: 12 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: + step: + operation: minimum + coords: + - 24 + - 36 + deaccumulate: false + name: + type: default + length: 24 + statistics: + metadata: + localDefinitionNumber: 5 + bitsPerValue: 8 + paramId: 131073 + stream: enfo + type: ep + operation: threshold_probability + thresholds: + - lower_scale_factor: 2 + lower_comparison: <= + lower_value: 273.15 + upper_scale_factor: 0 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: cf + date: '20240507' + time: '1200' + param: '167' + step: + - 24 + - 36 + - class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: pf + date: '20240507' + time: '1200' + param: '167' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: + - 24 + - 36 + dtype: float64 + output: + targets: + - name: fdb + request: + class: od + domain: g + expver: '0001' + levtype: sfc + stream: enfo + type: ep + date: 20240507 + time: 12 + param: 131073 + step: 12-36 + metadata: {} +input_overrides: {} +output_overrides: {} diff --git a/pproc/tests/templates/v3/quantiles.yaml b/pproc/tests/templates/v3/quantiles.yaml new file mode 100644 index 00000000..6a337172 --- /dev/null +++ b/pproc/tests/templates/v3/quantiles.yaml @@ -0,0 +1,1209 @@ +log: + level: INFO + format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' +execution: + hosts: 1 + workers: 1 +products: +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: 0:3 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 12 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 12 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 12 + quantile: 0:3 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '1:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 12 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 12 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 12 + quantile: '1:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '2:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 12 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 12 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 12 + quantile: '2:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '3:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 12 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 12 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 12 + quantile: '3:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: 0:3 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 18 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 18 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 18 + quantile: 0:3 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '1:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 18 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 18 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 18 + quantile: '1:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '2:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 18 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 18 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 18 + quantile: '2:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '3:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 18 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 18 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 18 + quantile: '3:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: 0:3 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 24 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 24 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 24 + quantile: 0:3 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '1:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 24 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 24 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 24 + quantile: '1:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '2:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 24 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 24 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 24 + quantile: '2:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '3:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 24 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 24 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 24 + quantile: '3:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: 0:3 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 30 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 30 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 30 + quantile: 0:3 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '1:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 30 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 30 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 30 + quantile: '1:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '2:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 30 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 30 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 30 + quantile: '2:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '3:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 30 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 30 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 30 + quantile: '3:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: 0:3 + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 36 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 36 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 36 + quantile: 0:3 + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '1:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 36 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 36 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 36 + quantile: '1:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '2:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 36 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 36 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 36 + quantile: '2:3' + metadata: {} +- name: ensemble + preprocessing: + actions: [] + accumulations: {} + statistics: + metadata: + localDefinitionNumber: 30 + stream: enfo + type: pb + operation: quantiles + quantiles: '3:3' + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: cf + param: '167.128' + step: 36 + - class: od + date: '20240507' + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: '1200' + type: pf + param: '167.128' + number: + - 1 + - 2 + - 3 + - 4 + - 5 + step: 36 + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + date: 20240507 + domain: g + levtype: sfc + expver: '0001' + stream: enfo + time: 12 + type: pb + param: '167.128' + step: 36 + quantile: '3:3' + metadata: {} +input_overrides: {} +output_overrides: {} diff --git a/pproc/tests/templates/v3/thermo.yaml b/pproc/tests/templates/v3/thermo.yaml new file mode 100644 index 00000000..5413bccd --- /dev/null +++ b/pproc/tests/templates/v3/thermo.yaml @@ -0,0 +1,886 @@ +log: + level: INFO + format: '%(asctime)s; %(name)s; %(levelname)s - %(message)s' +execution: + hosts: 1 + workers: 1 +products: +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: ppruntime.thermal_indices.calc_cossza + params: + - '167' + - '228021' + deaccumulate: + - '228021' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 214001 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_mrt + params: + - '167' + - '214001' + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + deaccumulate: + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261002 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: + - 0 + - 1 + expver: '0001' + levtype: sfc + param: + - '47' + - '228021' + - '169' + - '175' + - '176' + - '177' + date: '20260720' + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: '167' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261002 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_cossza + params: + - '167' + - '228021' + deaccumulate: + - '228021' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 214001 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_mrt + params: + - '167' + - '214001' + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + deaccumulate: + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261002 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_utci + params: + - '167' + - '168' + - '207' + - '261002' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261001 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: + - 0 + - 1 + expver: '0001' + levtype: sfc + param: + - '169' + - '175' + - '176' + - '177' + - '228021' + - '47' + date: '20260720' + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261001 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: ppruntime.thermal_indices.calc_heatx + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260004 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 260004 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_wcf + params: + - '167' + - '207' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260005 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 260005 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_rhp + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260242 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_aptmp + params: + - '167' + - '260242' + - '207' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260255 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 260255 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: ppruntime.thermal_indices.calc_rhp + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260242 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 260242 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: ppruntime.thermal_indices.calc_hmdx + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261016 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261016 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_rhp + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260242 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_nefft + params: + - '167' + - '207' + - '260242' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261018 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261018 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_cossza + params: + - '167' + - '228021' + deaccumulate: + - '228021' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 214001 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_mrt + params: + - '167' + - '214001' + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + deaccumulate: + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261002 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_gt + params: + - '167' + - '207' + - '261002' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261015 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: + - 0 + - 1 + expver: '0001' + levtype: sfc + param: + - '169' + - '175' + - '176' + - '177' + - '228021' + - '47' + date: '20260720' + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261015 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: norm + params: + - '165' + - '166' + metadata: + paramId: 207 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_cossza + params: + - '167' + - '228021' + deaccumulate: + - '228021' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 214001 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_mrt + params: + - '167' + - '214001' + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + deaccumulate: + - '47' + - '169' + - '228021' + - '175' + - '177' + - '176' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261002 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_wbgt + params: + - '167' + - '168' + - '207' + - '261002' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261014 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: + - 0 + - 1 + expver: '0001' + levtype: sfc + param: + - '169' + - '175' + - '176' + - '177' + - '228021' + - '47' + date: '20260720' + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '165' + - '166' + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261014 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +- name: ensemble + preprocessing: + actions: + - operation: thermal_index + function: ppruntime.thermal_indices.calc_rhp + params: + - '167' + - '168' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 260242 + join: true + - operation: thermal_index + function: ppruntime.thermal_indices.calc_wbt + params: + - '167' + - '260242' + metadata: + edition: 2 + bitsPerValue: 16 + packingType: grid_ccsds + typeOfGeneratingProcess: 2 + paramId: 261023 + join: false + accumulations: {} + inputs: + fc: + sources: + - name: fdb + stream: true + requests: + - class: od + stream: oper + type: fc + time: '1200' + domain: g + step: 1 + expver: '0001' + levtype: sfc + param: + - '167' + - '168' + date: '20260720' + expand_exclude: [] + dtype: float32 + output: + targets: + - name: fdb + request: + class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: 261023 + date: '20260720' + time: 12 + expver: '0001' + step: 1 + metadata: {} +input_overrides: {} +output_overrides: {} diff --git a/pproc/tests/test_products.py b/pproc/tests/test_products.py index ffd54979..d66975e1 100644 --- a/pproc/tests/test_products.py +++ b/pproc/tests/test_products.py @@ -17,9 +17,9 @@ from pproc.ensms import main as ensms_main from pproc.extreme import main as extreme_main from pproc.quantiles import main as quantiles_main -from pproc.wind import main as wind_main from pproc.thermal_indices import main as thermo_main from pproc.clustereps.__main__ import main as clustereps_main +from ppcore.product import main as ppcore_main from conftest import DATA_DIR TEST_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -80,7 +80,7 @@ ], [ "wind", - wind_main, + ensms_main, [], { "type": "es", @@ -155,9 +155,9 @@ "clustereps", ], ) -def test_products(tmpdir, monkeypatch, fdb, product, main, custom_args, req, length): +def test_products_v2(tmpdir, monkeypatch, fdb, product, main, custom_args, req, length): monkeypatch.chdir(tmpdir) # To avoid polluting cwd with grib templates - args = [product, "--config", f"{TEST_DIR}/templates/{product}.yaml"] + [ + args = [product, "--config", f"{TEST_DIR}/templates/v2/{product}.yaml"] + [ x.format_map( { "test_dir": str(tmpdir), @@ -182,3 +182,61 @@ def test_products(tmpdir, monkeypatch, fdb, product, main, custom_args, req, len request.update(req) messages = list(eccodes.StreamReader(test_fdb.retrieve(request))) assert len(messages) == length + + +@pytest.mark.parametrize( + "product, req, length", + [ + [ + "ensms", + {"type": "em", "param": 167, "step": [12, 36]}, + 2, + ], + [ + "prob", + {"type": "ep", "param": 131073, "step": ["12", "12-36"]}, + 2, + ], + [ + "quantiles", + { + "type": "pb", + "param": 167, + "step": [12, 18, 24, 30, 36], + "quantile": ["{}:3".format(x) for x in range(4)], + }, + 20, + ], + [ + "thermo", + { + "stream": "oper", + "type": "fc", + "param": [261002, 261001, 260004, 260005, 260255, 260242, 261016, 261018, 261015, 261014, 261023], + "step": [1], + "date": 20260720, + "time": 12, + }, + 11, + ], + ], + ids=["ensms", "prob", "quantiles", "thermo"], +) +def test_products_v3(tmpdir, monkeypatch, fdb, product, req, length): + monkeypatch.chdir(tmpdir) # To avoid polluting cwd with grib templates + args = [product, "--config", f"{TEST_DIR}/templates/v3/{product}.yaml"] + monkeypatch.setattr("sys.argv", args) + ppcore_main() + test_fdb = pyfdb.FDB() + request = { + "class": "od", + "expver": "0001", + "stream": "enfo", + "date": 20240507, + "time": 12, + "levtype": "sfc", + "domain": "g", + } + request.update(req) + messages = list(eccodes.StreamReader(test_fdb.retrieve(request))) + assert len(messages) == length diff --git a/pproc/uv.lock b/pproc/uv.lock new file mode 100644 index 00000000..b71f8ecb --- /dev/null +++ b/pproc/uv.lock @@ -0,0 +1,2824 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.12' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.12' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.12' and sys_platform == 'emscripten'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] + +[manifest] +members = [ + "pproc", + "pproc-core", +] + +[[package]] +name = "annotated-types" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, +] + +[[package]] +name = "array-api-compat" +version = "1.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/12/65d297d3e425cb7fe5247b7ec14b4ed83539e9b5e89b65c15ea7ee274182/array_api_compat-1.15.0.tar.gz", hash = "sha256:53c5f922491bf15f62847afafc4e39eedfae57d218988fefb8cce39c2a9b3dea", size = 129305, upload-time = "2026-06-07T20:53:24.964Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/16/1a8fd2b19544b84575cf84ef7aa3ad4c173b756d5f087c91f85d1b295777/array_api_compat-1.15.0-py3-none-any.whl", hash = "sha256:7b1b9c53269061403fd5f45a8de349f16e7887653328bfa0c5f2d45299ff0a8e", size = 79113, upload-time = "2026-06-07T20:53:23.621Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/25/1e/faf0f247f6f881b98fc4d6d07e14085cb89d13665084e6d6ac1dc2c03d0b/asttokens-3.0.2.tar.gz", hash = "sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2", size = 63136, upload-time = "2026-07-12T03:31:49.084Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/2b/04b8a15f3a1c77bc79ddf5c73875327f34b4fa75982df2b76e45e402d364/asttokens-3.0.2-py3-none-any.whl", hash = "sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933", size = 28702, upload-time = "2026-07-12T03:31:47.542Z" }, +] + +[[package]] +name = "atlaslib-ecmwf" +version = "0.46.0.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/b2/9a09dffb2b9def1f5cf0f4e3a8cb25a39fdc48ed41214e43b01554b73bd0/atlaslib_ecmwf-0.46.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4db3ca8319143af942bfde5a6334d10d60931c0e32dc876e5fd59582f5a6ed12", size = 5200839, upload-time = "2026-07-17T13:27:18.716Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ba/87905f125cfa3198193d4c6780ae65cb7de2bb280f5b00f1a0e86eb5d6a8/atlaslib_ecmwf-0.46.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:9bcd0444e225131064aa2b3d0fa4fe2900e8480168e846da1fe68ddebc1827a5", size = 5712549, upload-time = "2026-07-17T13:23:37.599Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fb/0bc4cc7dde2daeb4174ef264dfd7af35c7652a2bbcd6aae9d03a088982a0/atlaslib_ecmwf-0.46.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:977ecdffa7d14b664bfb44837f2b5960e6809fff78b6f444b3e10ad5d447aca9", size = 6062331, upload-time = "2026-07-17T13:16:40.343Z" }, + { url = "https://files.pythonhosted.org/packages/e4/dd/b022f3e71199ed819156086ad4e2e351018fc209a4530e2f97f49d70e513/atlaslib_ecmwf-0.46.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:376bd697906b346ae60e45e467133720f1a4e34117fd4f8195ca7c5439da76c7", size = 6423487, upload-time = "2026-07-17T13:32:35.996Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ed/257d774da7803a86739990351cea4c808fbbbd234c7fb9d454bb2eb224d7/atlaslib_ecmwf-0.46.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:7e082635d8be0cd6de29e927c3286c7315230886936987406bf3bb8cab888252", size = 5200837, upload-time = "2026-07-17T13:59:21.463Z" }, + { url = "https://files.pythonhosted.org/packages/0c/48/bfd4fbb3f78e456ea31c43e2ce09a6727534b6dd4ac59be67d8de9edc368/atlaslib_ecmwf-0.46.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:f1f2823efec418f6811fe4a445d0f16648fd28dfb3a5289276fa12c94736c6aa", size = 5712561, upload-time = "2026-07-17T13:46:37.58Z" }, + { url = "https://files.pythonhosted.org/packages/cd/6b/1896493b0ccce45efd56c705ea89c0e077d3f2115163b3ce40aa8d5907e9/atlaslib_ecmwf-0.46.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:df61850318fcad8055949d4aacab5c0ac1bc128235cad38e18c428f9fc787dbb", size = 6062325, upload-time = "2026-07-17T13:16:58.857Z" }, + { url = "https://files.pythonhosted.org/packages/cb/da/6192049ee1cdb22fc3b8bc34e18163852da07589b4157ab80ceb9f3ca46c/atlaslib_ecmwf-0.46.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:59ada48b4bfac8dc59cb626ec4b09cfec988c85506f949e824bd3aa082842191", size = 6423492, upload-time = "2026-07-17T13:31:43.162Z" }, + { url = "https://files.pythonhosted.org/packages/c9/73/6301050439b9e2cbbc9887c8a8b7b6ae5c6fb572b79e8c3b3435f3934fd8/atlaslib_ecmwf-0.46.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:ceb4914a07fbbe9f1f968b93cbc5ac00fde728a2c7ac3694c3214ee814fa10da", size = 5200846, upload-time = "2026-07-17T13:15:42.274Z" }, + { url = "https://files.pythonhosted.org/packages/d8/2e/fe86dec20a1aa34ef6b21566faf25283cfb29101f878e950ca437df09fd5/atlaslib_ecmwf-0.46.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:8993e823e1bf3ee78a8b60ff539d38886c346cdca04406dad8544600b28e9cdb", size = 5706278, upload-time = "2026-07-17T13:43:31.548Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ec/02c2aa71f610e09f26c1b81dc5dca821b792a6e5ccec22931ce5e80fbc22/atlaslib_ecmwf-0.46.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:cf9e8ed30906f3df1c87660c58c84957a4078ee80f7d53e8eb44376e10678742", size = 6062296, upload-time = "2026-07-17T13:16:49.267Z" }, + { url = "https://files.pythonhosted.org/packages/a9/4c/d5bbbdd643a6319011c6e2a3fe5e0306aaf10ef9ea6e3c179522fbbe11ba/atlaslib_ecmwf-0.46.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:31607725a5f4bcc4512c5cf445e264718602b9b29212f76ca0825f2adec10c82", size = 6423486, upload-time = "2026-07-17T13:28:58.598Z" }, + { url = "https://files.pythonhosted.org/packages/ea/bc/9d0f7fed54b7dcff382fc0d7ce1a12bc8515bad29f6a09dd9dceab20ba6c/atlaslib_ecmwf-0.46.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:0ded369d12923d91c3fce81237cbfe443a40a95ceedd71f8951df132dbc6dc29", size = 5200844, upload-time = "2026-07-17T13:58:52.991Z" }, + { url = "https://files.pythonhosted.org/packages/58/91/61308161d4dd72e63c67a1a93a1468aab6b48b8a8c0debe0808f78f74097/atlaslib_ecmwf-0.46.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:4c0257d0a2f309fe12d489ab5e46408b6e5f51768937658c233adb6f066a51d9", size = 5706269, upload-time = "2026-07-17T13:21:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/84/91/867537823d5b5b0753edeb5f9f62ea4c9ae0621c5c5488ebe1000ae7c8cc/atlaslib_ecmwf-0.46.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:aa600616407f4201abb1b1f934b71f22b088dad089f73266a685e4e45ed867de", size = 6062338, upload-time = "2026-07-17T13:17:25.495Z" }, + { url = "https://files.pythonhosted.org/packages/75/d0/ec7f1c7aab7168909a34c162bec99729ce6474191394f6b3b0f94f658f30/atlaslib_ecmwf-0.46.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:eba6324c4ea2ad772c28822f8f3803df72143d197e66131ad697122878dd29bd", size = 6423485, upload-time = "2026-07-17T13:29:46.309Z" }, +] + +[[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, 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 = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "cffi" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/5f/ff100cae70ebe9d8df1c01a00e510e45d9adb5c1fdda84791b199141de97/cffi-2.1.0.tar.gz", hash = "sha256:efc1cdd798b1aaf39b4610bba7aad28c9bea9b910f25c784ccf9ec1fa719d1f9", size = 531036, upload-time = "2026-07-06T21:34:30.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/67/85c89a59ba36a671e79638f44d466749f08179266a57e4f2ffdf92174072/cffi-2.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:02cb7ff33ded4f1532476731f89ede53e2e488a8e6205515a82144246ffa7dcc", size = 183845, upload-time = "2026-07-06T21:32:26.32Z" }, + { url = "https://files.pythonhosted.org/packages/ea/dd/e3b0baa2d3d6a857ac72b7efbf18e32e487c9cdafcc13049ad765495b15e/cffi-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5bce581e6b8c235e566a14768a943b172ada3ed73537bb0c0be1edee312d4e7", size = 184186, upload-time = "2026-07-06T21:32:28.025Z" }, + { url = "https://files.pythonhosted.org/packages/65/68/9f3ef890cf3c6ab97bd531c5677f67613d302165d16f8142b2811782a614/cffi-2.1.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:30b65779d598c370374fefabf138d456fd6f3216bfa7bedfab1ba82025b0cd93", size = 211892, upload-time = "2026-07-06T21:32:29.565Z" }, + { url = "https://files.pythonhosted.org/packages/22/d7/1a74539db16d8bfd839ff1515948948efbb162e574650fd3d846896eea95/cffi-2.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88023dfe18799507b73f1dbb0d14326a17465de1bc9c9c7655c22845e9ddc3a2", size = 218793, upload-time = "2026-07-06T21:32:30.951Z" }, + { url = "https://files.pythonhosted.org/packages/ec/d1/9a5b7169499e8e8d8e636de70b97ac7c9447104d2ff1a2cd94790cea5162/cffi-2.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0a96b74cda968eebbad56d973efe5098974f0a9fb323865bf99ea1fd24e3e64c", size = 205737, upload-time = "2026-07-06T21:32:32.216Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b0/e131a9c41f10607926278453d9596163594fe1c4ebc46efe3b5e5b34eb84/cffi-2.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a5781494d4d400a3f47f8f1da94b324f6e6b440a53387774002890a2a2f4b50f", size = 204909, upload-time = "2026-07-06T21:32:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d2/4398416cd699b35167947c6e22aca52c47e69ad5695073c9f1f2c52e04aa/cffi-2.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aa7a1b53a2a4452ada2d1b5dade9960b2522f1e61293a811a077439e39029565", size = 217883, upload-time = "2026-07-06T21:32:35.173Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a5/d4fe77b589e5e82d43ebc809bf2e6474afe8e48e32ea050b9357645b6471/cffi-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d8272c0e483b024e1b9ad029821470ed8ec65631dbd90217469da0e7cd89f1c", size = 221251, upload-time = "2026-07-06T21:32:36.527Z" }, + { url = "https://files.pythonhosted.org/packages/22/f0/a2fc43084c0433caf7f461bccc013e28f848d04ee1c5ed7fce71423cf4d9/cffi-2.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7762faa47e8ff7eb80bd261d9a7d8eea2d8baa69de5e95b70c1f338bbe712f02", size = 214250, upload-time = "2026-07-06T21:32:37.852Z" }, + { url = "https://files.pythonhosted.org/packages/04/8c/b925975448cf20634a9fbd5efceb807219db452653648d2897c0989cab2d/cffi-2.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89095c1968b4ba8285840e131bf2891b09ae137fe2146905acae0354fbce1b5e", size = 219441, upload-time = "2026-07-06T21:32:39.146Z" }, + { url = "https://files.pythonhosted.org/packages/eb/da/5c4918a2d61d86fa927d716cb3d8e4626ef8dc8f605a599d32f33897f59a/cffi-2.1.0-cp311-cp311-win32.whl", hash = "sha256:64c753a0f87a256020004f37a1c8c02c480e725f910f0b2a0f3f07debd1b2479", size = 174496, upload-time = "2026-07-06T21:32:40.467Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c8/6c2de1d55cf35ef8b92885d5ef280790f0fb9634d87ea1cc315176aecd61/cffi-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f26194e3d95e06501b942642855aed4f953d55e95d7d01b7c4483db3ecff458", size = 185113, upload-time = "2026-07-06T21:32:41.761Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4e/e8d7cb5783f1841a3c8fb3a7735838d7484d08ec08c9f984b14cac1ac0e9/cffi-2.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:35aaea0c7ee0e58a5cd8c2fd1a48fdf7ece0d2699b7ecdda08194e9ce5dd9b3d", size = 179927, upload-time = "2026-07-06T21:32:42.961Z" }, + { url = "https://files.pythonhosted.org/packages/1e/85/990925db5df586ec90beb97529c853497e7f85ba0234830447faf41c3057/cffi-2.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:df2b82571a1b30f58a87bf4e5a9e78d2b1eff6c6ce8fd3aa3757221f93f0863f", size = 184829, upload-time = "2026-07-06T21:32:44.324Z" }, + { url = "https://files.pythonhosted.org/packages/4b/92/e7bb136ad6b5352603732cf907ef862ca103f20f2031c1735a46300c20c9/cffi-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78474632761faa0fb96f30b1c928c84ebcf68713cbb80d15bab09dfe61640fde", size = 184728, upload-time = "2026-07-06T21:32:45.683Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c0/d1ec30ffb370f748f2fb54425972bfef9871e0132e82fb589c46b6676049/cffi-2.1.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5972433ad71a9e46516584ef60a0fda12d9dc459938d1539c3ddecf9bdc1368d", size = 214815, upload-time = "2026-07-06T21:32:48.557Z" }, + { url = "https://files.pythonhosted.org/packages/1b/dc/5620cf930688be01f2d673804291de757a934c90b946dbdc3d84130c2ea4/cffi-2.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6422532152adf4e59b110cb2808cee7a033800952f5c036b4af047ee43199e7", size = 222429, upload-time = "2026-07-06T21:32:49.848Z" }, + { url = "https://files.pythonhosted.org/packages/4b/a4/77b53abbf7a1e0beb9637edbef2a94d15f9c822f591e85d439ffd91519a6/cffi-2.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:46b1c8db8f6122420f32d02fffb924c2fe9bc772d228c7c711748fff56aabb2b", size = 210315, upload-time = "2026-07-06T21:32:51.221Z" }, + { url = "https://files.pythonhosted.org/packages/58/0c/f528df19cc94b675087324d4760d9e6d5bfae97d6217aa4fac43de4f5fcc/cffi-2.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9fafc5aa2e2a39aaf7f8cc0c1f044a9b07fca12e558dca53a3cc5c654ad67a7", size = 208859, upload-time = "2026-07-06T21:32:52.512Z" }, + { url = "https://files.pythonhosted.org/packages/62/f2/c9522a81c32132799a1972c39f5c5f8b4c8b9f00488a23feaa6c06f07741/cffi-2.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e9f50d192a3e525b15a75ab5114e442d83d657b7ec29182a991bc9a88fd3a66", size = 221844, upload-time = "2026-07-06T21:32:53.704Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/bd53988b9833e8f8ad539d26f4c07a6b3f6bcb1e9e02e7ca038250b3428d/cffi-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98fff996e983a36d3aa2eca83af40c5821202e7e6f32d13ae94e3d2286f10cfe", size = 225287, upload-time = "2026-07-06T21:32:54.907Z" }, + { url = "https://files.pythonhosted.org/packages/79/99/0d0fd37f055224085f42bbb2c022d002e17dde4a97972822327b07d84101/cffi-2.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:379de10ce1ba048b1448599d1b37b24caee16309d1ac98d3982fc997f768700b", size = 223681, upload-time = "2026-07-06T21:32:56.329Z" }, + { url = "https://files.pythonhosted.org/packages/b0/80/c138990aa2a70b1a269f6e06348729836d733d6f970867943f61d367f8cc/cffi-2.1.0-cp312-cp312-win32.whl", hash = "sha256:9b8f0f26ca4e7513c534d351eca551947d053fac438f2a04ac96d882909b0d3a", size = 175269, upload-time = "2026-07-06T21:32:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/a8/eb/f636456ff21a83fc13c032b58cc5dde061691546ac79efa284b2989b7982/cffi-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:c97f080ea627e2863524c5af3836e2270b5f5dfff1f104392b959f8df0c5d384", size = 185881, upload-time = "2026-07-06T21:32:59.253Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/400ea43e721727dca8a65c4521390e9196757caba4a45643acb2b63271b8/cffi-2.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:6d194185eabd279f1c05ebe3504265ddfc5ad2b58d0714f7db9f01da592e9eb6", size = 180088, upload-time = "2026-07-06T21:33:02.278Z" }, + { url = "https://files.pythonhosted.org/packages/96/88/a996879e2eeccb815f6e3a5967b12a308257412acec882039d386bd2aa7b/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:10537b1df4967ca26d21e5072d7d54188354483b91dc75058968d3f0cf13fbda", size = 194331, upload-time = "2026-07-06T21:33:03.697Z" }, + { url = "https://files.pythonhosted.org/packages/58/85/7ae00d5c8dd6266f4e944c3db630f3c5c9a98b61d469c714d848b1d8138a/cffi-2.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a95b05f9baf29b91171b3a8bd2020b028835243e7b0ff6bb23e2a3c228518b1b", size = 196966, upload-time = "2026-07-06T21:33:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e9/45c3a76ad8d43ad9261f4c95436da61128d3ca545d72b9612c0ab5be0b1c/cffi-2.1.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:15faec4adfff450819f3aee0e2e02c812de6edb88203aa58807955db2003472a", size = 184795, upload-time = "2026-07-06T21:33:06.699Z" }, + { url = "https://files.pythonhosted.org/packages/84/4c/82f132cb4418ee6d953d982b19191e87e2a6372c8a4ce36e50b69d6ade4a/cffi-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:716ff8ec22f20b4d988b12884086bcef0fc99737043e503f7a3935a6be99b1ea", size = 184746, upload-time = "2026-07-06T21:33:08.071Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1c/4ed5a0e5bdca6cbc275556de3328dd1b76fd0c11cc13c88fe66d1d8715f2/cffi-2.1.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:63960549e4f8dc41e31accb97b975abaecfc44c03e396c093a6436763c2ea7db", size = 214747, upload-time = "2026-07-06T21:33:09.671Z" }, + { url = "https://files.pythonhosted.org/packages/3a/a6/e879bb68cc23a2bc9ba8f4b7d8019f0c2694bad2ab6c4a3701d429439f58/cffi-2.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff067a8d8d880e7809e4ac88eb009bb848870115317b306666502ccad30b147f", size = 222392, upload-time = "2026-07-06T21:33:10.896Z" }, + { url = "https://files.pythonhosted.org/packages/88/f6/01890cfd63c08f8eb96a8319b0443690197d240a8bd6346048cf7bde9190/cffi-2.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3b926723c13eba9f81d2ef3820d63aeceec3b2d4639906047bf675cb8a7a500d", size = 210285, upload-time = "2026-07-06T21:33:12.251Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cf/2b684132056f438567b61e19d690dd31cd0921ace051e0a458be6074369e/cffi-2.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:47ff3a8bfd8cb9da1af7524b965127095055654c177fcfc7578debcb015eecd0", size = 208801, upload-time = "2026-07-06T21:33:13.617Z" }, + { url = "https://files.pythonhosted.org/packages/6f/08/f2e7d62c460faae0926f2d6e423694aa409ced3bc1fe2927a0a6e5f05416/cffi-2.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:799416bae98336e400981ff6e532d67d5c709cfb30afb79865a1315f94b0e224", size = 221808, upload-time = "2026-07-06T21:33:15.466Z" }, + { url = "https://files.pythonhosted.org/packages/38/37/04f54b8e63a02f3d908332c9effbf8c366167c6f733ed8a3d4f79b7e2a1e/cffi-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:961be50688f7fba2fa65f63712d3b9b341a22311f5253460ce933f52f0de1c8c", size = 225241, upload-time = "2026-07-06T21:33:16.869Z" }, + { url = "https://files.pythonhosted.org/packages/a9/d6/c72eecca433cd3e681c65ed313ab4835d9d4a379704d0f628a6a05f51c2e/cffi-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bf5c6cf48238b0eb4c086978c492ad1cbc22373fc5b2d7353b3a598ce6db887a", size = 223588, upload-time = "2026-07-06T21:33:18.239Z" }, + { url = "https://files.pythonhosted.org/packages/c6/4b/e706f67279140f92939da3475ad610df18bfd52d50f14953a8e5fede71d5/cffi-2.1.0-cp313-cp313-win32.whl", hash = "sha256:db3eb7d46527159a878ec3460e9d40615bc25ba337d477db681aea6e4f05c5d2", size = 175248, upload-time = "2026-07-06T21:33:19.799Z" }, + { url = "https://files.pythonhosted.org/packages/5a/47/59eb7975cb0e4ef0afa764ea945b29a5bb4537a9f771cb7d6c8a5dd74c95/cffi-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:8e74a6135550c4748af665b1b1118b6aab33b1fc6a16f9aff630af107c3b4512", size = 185717, upload-time = "2026-07-06T21:33:21.47Z" }, + { url = "https://files.pythonhosted.org/packages/5a/af/34fee85c48f8d94efc8597bc09470c9dd274c145f1c12e0fbc6ab6d38d74/cffi-2.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:2282cd5e38aa8accd03e99d1256af8411c84cdbee6a89d841b563fdbd1f3e50f", size = 180114, upload-time = "2026-07-06T21:33:22.515Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f0/81478e482afa03f6d18dc8f2afb5edc45b3080853b634b5ed91961be0998/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d2117334c3af3bdcb9a88522b844a2bdb5efdc4f71c6c822df55486ae1c3347a", size = 194142, upload-time = "2026-07-06T21:33:23.657Z" }, + { url = "https://files.pythonhosted.org/packages/7d/95/8de304305cd9204974b0ca051b86d307cafca13aa575a0ef1b44d92c0d8c/cffi-2.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:702c436735fbe99d59ada02a1f65cfc0d31c0ee8b7290912f8fbc5cd1e4b16c3", size = 196819, upload-time = "2026-07-06T21:33:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/20/71/7c8372d30e42415602ed9f268f7cfd66f1b855fed881ecd168bcb45dbc0b/cffi-2.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1ff3456eab0d889592d1936d6125bbfbc7ae4d3354a700f8bd80450a66445d4d", size = 184965, upload-time = "2026-07-06T21:33:26.605Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/584e626835f0375c928176c04137c96927165cb8733cdb3150ec04e5ee5e/cffi-2.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c4165821e131d6d4ca444347c2b694e2311bcfa3fe5a861cc72968f28867beac", size = 184952, upload-time = "2026-07-06T21:33:27.823Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d2/065fcae1c73979fac8e054462478d0ff8a29c40cdc2ed7ea5676a061df53/cffi-2.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:276f20fffd7b396e12516ba8edf9509210ac248cbbc5acbc39cd512f9f59ebe6", size = 222353, upload-time = "2026-07-06T21:33:29.178Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a5/e8bbb1ce5b3ac2f53ad6a10bde44318a5a8d99d4f4a000d44a6e39aeb3e4/cffi-2.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7d5980a3433d4b71a5e120f9dd551403d7824e31e2e67124fe2769c404c06913", size = 210051, upload-time = "2026-07-06T21:33:30.534Z" }, + { url = "https://files.pythonhosted.org/packages/28/ed/c127d3ac36e899c965e3361357c3befacd6578c03f40125183e41c3b219e/cffi-2.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6ca4919c6e4f89aa99c42510b42cf54596892c00b3f9077f6bdd1505e24b9c8d", size = 208630, upload-time = "2026-07-06T21:33:31.753Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d7/97d3136f81db489ec8d1d67748c110d6c994268fd7528014aa9f2b085e4e/cffi-2.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d53d10f7da99ae46f7373b9150393e9c5eab9b224909982b43832668de4779f5", size = 221593, upload-time = "2026-07-06T21:33:33.044Z" }, + { url = "https://files.pythonhosted.org/packages/d3/27/93195977168ee63aed233a1a0993a2178798654d1f4bddcdd321d6fd3b21/cffi-2.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c351efb95e832a853a29361675f33a7ce53de1a109cd73fd47af0712213aa4ce", size = 225146, upload-time = "2026-07-06T21:33:34.224Z" }, + { url = "https://files.pythonhosted.org/packages/b3/c1/6dbd291ee2ae5a50a034aa057207081f545923bbf15dad4511e985aafff5/cffi-2.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7c7a88e2bac086f06d14577332760bdeecc42bdec8ac4077f6260557d9326", size = 223240, upload-time = "2026-07-06T21:33:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/0f/6f/ade5ce9863a57992a6ea3d0d10d7e29b8749fc127204b3d493d667b2815f/cffi-2.1.0-cp314-cp314-win32.whl", hash = "sha256:1854b724d00f6654c742097d5387569021be12d3a0f770eae1df8f8acfcc6acd", size = 177723, upload-time = "2026-07-06T21:33:51.626Z" }, + { url = "https://files.pythonhosted.org/packages/41/de/92b9eeed4ae4a21d6fd9b2a2c8505cbed573299902ea73981cc13f7ff62c/cffi-2.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:1b96bfe2c4bd825681b7d311ad6d9b7280a091f43e8f63da5729638083cd3bfb", size = 187937, upload-time = "2026-07-06T21:33:53.403Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/cc6ae6c2913a03aab8898eee57963cf1035b8df5872ed8b9115fcc7e2be8/cffi-2.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:7d28dff1db6764108bc30788d85d61c876beff416d9a49cb9dd7c5a9f34f5804", size = 183001, upload-time = "2026-07-06T21:33:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/14/f0/134c00ce0779ec86dea2aa1aac69339c2741a8045072676763512363a2ea/cffi-2.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ea6b3e2c4250ff1de21c630fe72d0f63eb95c2c32ffbf64a358cf4a8836d714", size = 188538, upload-time = "2026-07-06T21:33:36.792Z" }, + { url = "https://files.pythonhosted.org/packages/50/d8/3b86aba791cb610d24e8a3e1b2cd529e71fa15096b04e4d4e360049d4a4c/cffi-2.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6af371f3767faeffc6ac1ef57cdfd25844403e9d3f476c5537caee499de96376", size = 188230, upload-time = "2026-07-06T21:33:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/14/d0/117dcd9209255ad8571fbc8c92ef32593a1d294dcec91ddc4e4db50606f2/cffi-2.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb4e8997a49aa2c08a3e43c9045d224448b8941d88e7ac163c7d383e560cbf98", size = 223899, upload-time = "2026-07-06T21:33:39.514Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3d/f20f8b886b254e3ad10e15cd4186d3aed49f3e6a35ab37aab9f8f25f7c03/cffi-2.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf01d8c84cbea96b944c73b22182e6c7c432b3475632b8111dbfdc95ddad6e13", size = 211652, upload-time = "2026-07-06T21:33:40.851Z" }, + { url = "https://files.pythonhosted.org/packages/28/3b/fad54de07260b93ddeef4b96d0131d57ea900675df1d410ae1deee52d7a6/cffi-2.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:33eb1ad83ebe8f313e0df035c406227d55a79456704a863fad9842136af5ad7d", size = 210755, upload-time = "2026-07-06T21:33:42.183Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/3d5c705acb7abbba9bbd7d79b8e62e0f25b6120eb7ae6ac49f1b721722fe/cffi-2.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ac0f1a2d0cfa7eea3f2aaf006ab6e70e8feeb16b75d65b7e5939982ca2f11056", size = 223933, upload-time = "2026-07-06T21:33:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/6c/d0/47e338384ab6b1004241002fa616301020cea4fc95f283506565d252f276/cffi-2.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c16914df9fb7f500e440e6875fa23ff5e0b31db01fa9c06af98d59a91f0dc2e4", size = 226749, upload-time = "2026-07-06T21:33:45.046Z" }, + { url = "https://files.pythonhosted.org/packages/70/25/65bd5b58ea4bfdfc15cde02cb5365f89ef8ab8b2adfb8fe5c4bd4233382f/cffi-2.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5ecbd0499275d57506d397eebe1981cee87b47fcd9ef5c22cab7ed7644a39a94", size = 225703, upload-time = "2026-07-06T21:33:46.374Z" }, + { url = "https://files.pythonhosted.org/packages/dc/78/aa01ac599a8a4322533d45a1f9bc93b338276d2d59dabbe7c6d92a775c81/cffi-2.1.0-cp314-cp314t-win32.whl", hash = "sha256:7d034dcffa09e9a46c93fa3a3be402096cb5354ac6e41ab8e5cc9cd8b642ad76", size = 182857, upload-time = "2026-07-06T21:33:47.696Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/d00496b22de4d4228f32dde94ad996f350c8aad676d63bcca0743c8dea4d/cffi-2.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0582a58f3051372229ca8e7f5f589f9e5632678208d8636fea3676711fdf7fe5", size = 194065, upload-time = "2026-07-06T21:33:48.953Z" }, + { url = "https://files.pythonhosted.org/packages/d5/dd/0c7dbf815a579ff005008a2d815a55d6bb047c349eef536d9dc53d3f0a8d/cffi-2.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:510aeeeac94811b138077451da1fb18b308a5feab47dd2b603af55804155e1c8", size = 186404, upload-time = "2026-07-06T21:33:50.309Z" }, + { url = "https://files.pythonhosted.org/packages/55/c7/8c8c50cb11c6750051daf12164098a9a6f027ac4356967fd4d800a07f242/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:2e9dabb9abcb7ad15938c7196ad5c1718a4e6d33cc79b4c0209bdb64c4a54a5c", size = 194121, upload-time = "2026-07-06T21:33:56.109Z" }, + { url = "https://files.pythonhosted.org/packages/99/e2/67680bf19a6b60d2bb7ff83baefa2a4c3d2d7dc0f3277034b802e1fc504c/cffi-2.1.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:37f525a7e7e50c017fdebe58b787be310ad59357ae43a053943a6e1a6c526001", size = 196820, upload-time = "2026-07-06T21:33:57.288Z" }, + { url = "https://files.pythonhosted.org/packages/ed/da/4bbe583a3b3a5c8c60892124fe17f3fa3656523faf0d3484eae90f091853/cffi-2.1.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:95f2954c2c9473d892eca6e0409f3568b37ab62a8eedb122461f73cc273476e3", size = 184936, upload-time = "2026-07-06T21:33:58.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/4b/1f4c36ab273980d7aa75bb126ea4f8971f24a96108acad3a0a084028c57b/cffi-2.1.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:cdf2448aab5f661c9315308ec8b93f4e8a1a67a3c733f8631067a2b67d5913dc", size = 185045, upload-time = "2026-07-06T21:34:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c3/ad299dc38f3583f8d916b299f028af418a9ec98bc695fcbebeae7420691c/cffi-2.1.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:90bec57cf82089383bd06a605b3eb8daebf7e5a668520beaf6e327a83a947699", size = 222342, upload-time = "2026-07-06T21:34:01.814Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d8/df4543cc087245044ed02ef3ad8e0a26619d0075ac7a77a12dc81177851b/cffi-2.1.0-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6274dcb2d15cef48daa73ed1be5a40d501d74dccd0cd6db364776d12cb6ba022", size = 210073, upload-time = "2026-07-06T21:34:03.255Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/fac738d73728c6cea2a88a2883dca54892496cbba88a1dc1f2909cb8a6f5/cffi-2.1.0-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:2b71d409cccee78310ab5dec549aed052aaea483346e282c7b02362596e01bb0", size = 208551, upload-time = "2026-07-06T21:34:04.433Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3f/0b04a700dd64f465c93020253a793a82c9b4dff9961f48facd0df945d9b8/cffi-2.1.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d3538f9c0e50670f4deb93dbb696576e60590369cae2faf7de681e597a8a1f1", size = 221649, upload-time = "2026-07-06T21:34:06.157Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/b7379a5704c79eda57ce075869ba70a0368d1c850f803b3c0d078d39dcaf/cffi-2.1.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:8f9ec95b8a043d3dfbc74d9abc6f7baf524dd27a8dc160b0a32ff9cdab650c28", size = 225203, upload-time = "2026-07-06T21:34:07.489Z" }, + { url = "https://files.pythonhosted.org/packages/5a/02/d5e6c43ea85c41bda2a184a3418f195fe7cf602967a8d2b94e085b83deef/cffi-2.1.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:af5e2915d41fe6c961694d7bfdc8562942638200f3ce2765dfb8b745cf997629", size = 223263, upload-time = "2026-07-06T21:34:08.712Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d8/772b8259bf75749adffb1c546828978381fb516f60cf701f6c83daf60c85/cffi-2.1.0-cp315-cp315-win32.whl", hash = "sha256:0a42c688d19fca6e095a53c6a6e2295a5b050a8b289f109adab02a9e61a25de6", size = 177696, upload-time = "2026-07-06T21:34:26.355Z" }, + { url = "https://files.pythonhosted.org/packages/2f/dd/afa2191fc6d57fedd26e5844a2fe2fcc0bbfa00961bbaa5a41e4921e7cca/cffi-2.1.0-cp315-cp315-win_amd64.whl", hash = "sha256:bccbbb5ee76a61f9d99b5bf3846a51d7fca4b6a732fe46f89295610edaf41853", size = 187914, upload-time = "2026-07-06T21:34:27.58Z" }, + { url = "https://files.pythonhosted.org/packages/05/ef/6cd4f8c671517162379dc79cfae5aea9106bc38abb89628d5c16adf6a838/cffi-2.1.0-cp315-cp315-win_arm64.whl", hash = "sha256:8d35c139744adb3e727cd51b1a18324bbe44b8bd41bf8322bca4d41289f48eda", size = 183004, upload-time = "2026-07-06T21:34:28.905Z" }, + { url = "https://files.pythonhosted.org/packages/11/b6/12fc55092817a5faa26fb8c40c7f9d662e11a46ee248c137aafc42517d92/cffi-2.1.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:f9912624a0c0b834b7520d7769b3644453aabc0a7e1c839da7359f050750e9bc", size = 188378, upload-time = "2026-07-06T21:34:09.926Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2e/cdac88979f295fde5daa69622c7d2111e56e7ceb94f211357fbe452339e4/cffi-2.1.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:df92f2aba50eb4d96718b68ef76f2e57a57b54f2fa62333496d16c6d585a85ca", size = 188319, upload-time = "2026-07-06T21:34:11.101Z" }, + { url = "https://files.pythonhosted.org/packages/e0/27/1d0b408497e41a74795af122d7b603c418c5fed0171450f899afd04e594f/cffi-2.1.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0520e1f4c35f44e209cbbb421b67eec42e6a157f59444dfb6058874ff3610e5d", size = 223904, upload-time = "2026-07-06T21:34:12.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/31/e115c985105dd7ffb32444505f18ceb874bb42d992af05d5dced7ecf1980/cffi-2.1.0-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:3681e031db29958a7502f5c0c9d6bbc4c36cb20f7b104086fa642d1799631ff8", size = 211554, upload-time = "2026-07-06T21:34:13.987Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/9e6e09409336d9e515c58367e7cfcf4f89df06ad25252675595a58eb59d5/cffi-2.1.0-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:762f99479dcb369f60ab9017ad4ab97a36a1dd7c1ee5a3b15db0f4b8659120cd", size = 210795, upload-time = "2026-07-06T21:34:15.972Z" }, + { url = "https://files.pythonhosted.org/packages/19/e5/d3cc82a4a0be7902af279c04181ad038449c096734464a5ae1de3e1401bd/cffi-2.1.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0611e7ebf90573a535ebdc33ae9da222d037853983e13359f580fab781ca017f", size = 223843, upload-time = "2026-07-06T21:34:17.509Z" }, + { url = "https://files.pythonhosted.org/packages/b9/65/b434abc97ce7cecc2c640fde160507c0ecc7e21544b483ba3325d2e2ea17/cffi-2.1.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86cf8755a791f72c85dc287128cc62d4f24d392e3f1e15837245623f4a33cccc", size = 226773, upload-time = "2026-07-06T21:34:19.05Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9f/d4dc66ca651eb1145a133314cda721abf13cfac3d28c4a0402263ae6ad75/cffi-2.1.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:ba00f661f8ba35d075c937174e27c2c421cec3942fd2e0ea3e66996757c0fdd9", size = 225719, upload-time = "2026-07-06T21:34:20.576Z" }, + { url = "https://files.pythonhosted.org/packages/68/5a/e536c528bc8057496c360c0978559a2dc45653f89dd6151078aa7d8fca1a/cffi-2.1.0-cp315-cp315t-win32.whl", hash = "sha256:cb96698e3c7413d906ce83f8ffd245ec1bd94707541f299d0ce4d6b0193e982b", size = 182760, upload-time = "2026-07-06T21:34:22.059Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0b/0ffe8b82d3875bced5fa1e7986a7a46b748262a40ab7f60b475eb9fb1bb3/cffi-2.1.0-cp315-cp315t-win_amd64.whl", hash = "sha256:f146d154428a2523f9cc7936c02353c2459b8f6cf07d3cd1ee1c0a611109c5d5", size = 193769, upload-time = "2026-07-06T21:34:23.589Z" }, + { url = "https://files.pythonhosted.org/packages/a0/17/1073b53b68c9b5ca6914adf5f8bf55aacc2d3be102418c90700160ea8605/cffi-2.1.0-cp315-cp315t-win_arm64.whl", hash = "sha256:cbb7640ce37159548d2147b5b8c241f962143d4c71231431820783f4dc78f210", size = 186405, upload-time = "2026-07-06T21:34:24.857Z" }, +] + +[[package]] +name = "cfgrib" +version = "0.9.15.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "click" }, + { name = "eccodes" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/51/cace2747a517667bbbe5fcab1f35958ad05c778251a452c461b8b3649dbe/cfgrib-0.9.15.1.tar.gz", hash = "sha256:d959d8b97e55a63646fa86686b297905ff7f2918a91e3a11d6292dab09598e4d", size = 9746591, upload-time = "2025-09-30T22:46:14.133Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/e8/16c58c57c9ce1474dd1e50090ebd78b008c70fc4f06793da65f9a0aba391/cfgrib-0.9.15.1-py3-none-any.whl", hash = "sha256:f1bee90e86917389be9f767051bf32d00f95f6f4e4312b344567511b3cfd62d2", size = 49123, upload-time = "2025-09-30T22:46:12.206Z" }, +] + +[[package]] +name = "cftime" +version = "1.6.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/dc/470ffebac2eb8c54151eb893055024fe81b1606e7c6ff8449a588e9cd17f/cftime-1.6.5.tar.gz", hash = "sha256:8225fed6b9b43fb87683ebab52130450fc1730011150d3092096a90e54d1e81e", size = 326605, upload-time = "2025-10-13T18:56:26.352Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/f6/9da7aba9548ede62d25936b8b448acd7e53e5dcc710896f66863dcc9a318/cftime-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:474e728f5a387299418f8d7cb9c52248dcd5d977b2a01de7ec06bba572e26b02", size = 512733, upload-time = "2025-10-13T18:56:00.189Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d5/d86ad95fc1fd89947c34b495ff6487b6d361cf77500217423b4ebcb1f0c2/cftime-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ab9e80d4de815cac2e2d88a2335231254980e545d0196eb34ee8f7ed612645f1", size = 492946, upload-time = "2025-10-13T18:56:01.262Z" }, + { url = "https://files.pythonhosted.org/packages/4f/93/d7e8dd76b03a9d5be41a3b3185feffc7ea5359228bdffe7aa43ac772a75b/cftime-1.6.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ad24a563784e4795cb3d04bd985895b5db49ace2cbb71fcf1321fd80141f9a52", size = 1689856, upload-time = "2025-10-13T19:39:12.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8d/86586c0d75110f774e46e2bd6d134e2d1cca1dedc9bb08c388fa3df76acd/cftime-1.6.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a3cda6fd12c7fb25eff40a6a857a2bf4d03e8cc71f80485d8ddc65ccbd80f16a", size = 1718573, upload-time = "2025-10-13T18:56:02.788Z" }, + { url = "https://files.pythonhosted.org/packages/bb/fe/7956914cfc135992e89098ebbc67d683c51ace5366ba4b114fef1de89b21/cftime-1.6.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:28cda78d685397ba23d06273b9c916c3938d8d9e6872a537e76b8408a321369b", size = 1788563, upload-time = "2025-10-13T18:56:04.075Z" }, + { url = "https://files.pythonhosted.org/packages/e5/c7/6669708fcfe1bb7b2a7ce693b8cc67165eac00d3ac5a5e8f6ce1be551ff9/cftime-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:93ead088e3a216bdeb9368733a0ef89a7451dfc1d2de310c1c0366a56ad60dc8", size = 473631, upload-time = "2025-10-13T18:56:05.159Z" }, + { url = "https://files.pythonhosted.org/packages/82/c5/d70cb1ab533ca790d7c9b69f98215fa4fead17f05547e928c8f2b8f96e54/cftime-1.6.5-cp311-cp311-win_arm64.whl", hash = "sha256:3384d69a0a7f3d45bded21a8cbcce66c8ba06c13498eac26c2de41b1b9b6e890", size = 459383, upload-time = "2026-01-02T21:16:47.317Z" }, + { url = "https://files.pythonhosted.org/packages/b6/c1/e8cb7f78a3f87295450e7300ebaecf83076d96a99a76190593d4e1d2be40/cftime-1.6.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:eef25caed5ebd003a38719bd3ff8847cd52ef2ea56c3ebdb2c9345ba131fc7c5", size = 504175, upload-time = "2025-10-13T18:56:06.398Z" }, + { url = "https://files.pythonhosted.org/packages/50/1a/86e1072b09b2f9049bb7378869f64b6747f96a4f3008142afed8955b52a4/cftime-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87d2f3b949e45463e559233c69e6a9cf691b2b378c1f7556166adfabbd1c6b0", size = 485980, upload-time = "2025-10-13T18:56:08.669Z" }, + { url = "https://files.pythonhosted.org/packages/35/28/d3177b60da3f308b60dee2aef2eb69997acfab1e863f0bf0d2a418396ce5/cftime-1.6.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:82cb413973cc51b55642b3a1ca5b28db5b93a294edbef7dc049c074b478b4647", size = 1591166, upload-time = "2025-10-13T19:39:14.109Z" }, + { url = "https://files.pythonhosted.org/packages/d1/fd/a7266970312df65e68b5641b86e0540a739182f5e9c62eec6dbd29f18055/cftime-1.6.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85ba8e7356d239cfe56ef7707ac30feaf67964642ac760a82e507ee3c5db4ac4", size = 1642614, upload-time = "2025-10-13T18:56:09.815Z" }, + { url = "https://files.pythonhosted.org/packages/c4/73/f0035a4bc2df8885bb7bd5fe63659686ea1ec7d0cc74b4e3d50e447402e5/cftime-1.6.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:456039af7907a3146689bb80bfd8edabd074c7f3b4eca61f91b9c2670addd7ad", size = 1688090, upload-time = "2025-10-13T18:56:11.442Z" }, + { url = "https://files.pythonhosted.org/packages/88/15/8856a0ab76708553ff597dd2e617b088c734ba87dc3fd395e2b2f3efffe8/cftime-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:da84534c43699960dc980a9a765c33433c5de1a719a4916748c2d0e97a071e44", size = 464840, upload-time = "2025-10-13T18:56:12.506Z" }, + { url = "https://files.pythonhosted.org/packages/3a/85/451009a986d9273d2208fc0898aa00262275b5773259bf3f942f6716a9e7/cftime-1.6.5-cp312-cp312-win_arm64.whl", hash = "sha256:c62cd8db9ea40131eea7d4523691c5d806d3265d31279e4a58574a42c28acd77", size = 450534, upload-time = "2026-01-02T21:16:48.784Z" }, + { url = "https://files.pythonhosted.org/packages/2e/60/74ea344b3b003fada346ed98a6899085d6fd4c777df608992d90c458fda6/cftime-1.6.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4aba66fd6497711a47c656f3a732c2d1755ad15f80e323c44a8716ebde39ddd5", size = 502453, upload-time = "2025-10-13T18:56:13.545Z" }, + { url = "https://files.pythonhosted.org/packages/1e/14/adb293ac6127079b49ff11c05cf3d5ce5c1f17d097f326dc02d74ddfcb6e/cftime-1.6.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89e7cba699242366e67d6fb5aee579440e791063f92a93853610c91647167c0d", size = 484541, upload-time = "2025-10-13T18:56:14.612Z" }, + { url = "https://files.pythonhosted.org/packages/4f/74/bb8a4566af8d0ef3f045d56c462a9115da4f04b07c7fbbf2b4875223eebd/cftime-1.6.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f1eb43d7a7b919ec99aee709fb62ef87ef1cf0679829ef93d37cc1c725781e9", size = 1591014, upload-time = "2025-10-13T19:39:15.346Z" }, + { url = "https://files.pythonhosted.org/packages/ba/08/52f06ff2f04d376f9cd2c211aefcf2b37f1978e43289341f362fc99f6a0e/cftime-1.6.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e02a1d80ffc33fe469c7db68aa24c4a87f01da0c0c621373e5edadc92964900b", size = 1633625, upload-time = "2025-10-13T18:56:15.745Z" }, + { url = "https://files.pythonhosted.org/packages/cf/33/03e0b23d58ea8fab94ecb4f7c5b721e844a0800c13694876149d98830a73/cftime-1.6.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18ab754805233cdd889614b2b3b86a642f6d51a57a1ec327c48053f3414f87d8", size = 1684269, upload-time = "2025-10-13T18:56:17.04Z" }, + { url = "https://files.pythonhosted.org/packages/a4/60/a0cfba63847b43599ef1cdbbf682e61894994c22b9a79fd9e1e8c7e9de41/cftime-1.6.5-cp313-cp313-win_amd64.whl", hash = "sha256:6c27add8f907f4a4cd400e89438f2ea33e2eb5072541a157a4d013b7dbe93f9c", size = 465364, upload-time = "2025-10-13T18:56:18.05Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e8/ec32f2aef22c15604e6fda39ff8d581a00b5469349f8fba61640d5358d2c/cftime-1.6.5-cp313-cp313-win_arm64.whl", hash = "sha256:31d1ff8f6bbd4ca209099d24459ec16dea4fb4c9ab740fbb66dd057ccbd9b1b9", size = 450468, upload-time = "2026-01-02T21:16:50.193Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6c/a9618f589688358e279720f5c0fe67ef0077fba07334ce26895403ebc260/cftime-1.6.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c69ce3bdae6a322cbb44e9ebc20770d47748002fb9d68846a1e934f1bd5daf0b", size = 502725, upload-time = "2025-10-13T18:56:19.424Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e3/da3c36398bfb730b96248d006cabaceed87e401ff56edafb2a978293e228/cftime-1.6.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e62e9f2943e014c5ef583245bf2e878398af131c97e64f8cd47c1d7baef5c4e2", size = 485445, upload-time = "2025-10-13T18:56:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/32/93/b05939e5abd14bd1ab69538bbe374b4ee2a15467b189ff895e9a8cdaddf6/cftime-1.6.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da5fdaa4360d8cb89b71b8ded9314f2246aa34581e8105c94ad58d6102d9e4f", size = 1584434, upload-time = "2025-10-13T19:39:17.084Z" }, + { url = "https://files.pythonhosted.org/packages/7f/89/648397f9936e0b330999c4e776ebf296ec3c6a65f9901687dbca4ab820da/cftime-1.6.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bff865b4ea4304f2744a1ad2b8149b8328b321dd7a2b9746ef926d229bd7cd49", size = 1609812, upload-time = "2025-10-13T18:56:21.971Z" }, + { url = "https://files.pythonhosted.org/packages/e7/0f/901b4835aa67ad3e915605d4e01d0af80a44b114eefab74ae33de6d36933/cftime-1.6.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e552c5d1c8a58f25af7521e49237db7ca52ed2953e974fe9f7c4491e95fdd36c", size = 1669768, upload-time = "2025-10-13T18:56:24.027Z" }, + { url = "https://files.pythonhosted.org/packages/22/d5/e605e4b28363e7a9ae98ed12cabbda5b155b6009270e6a231d8f10182a17/cftime-1.6.5-cp314-cp314-win_amd64.whl", hash = "sha256:e645b095dc50a38ac454b7e7f0742f639e7d7f6b108ad329358544a6ff8c9ba2", size = 463818, upload-time = "2025-10-13T18:56:25.376Z" }, + { url = "https://files.pythonhosted.org/packages/3d/89/a8f85ae697ff10206ec401c2621f5ca9f327554f586d62f244739ceeb347/cftime-1.6.5-cp314-cp314-win_arm64.whl", hash = "sha256:b9044d7ac82d3d8af189df1032fdc871bbd3f3dd41a6ec79edceb5029b71e6e0", size = 459862, upload-time = "2026-01-02T20:45:02.625Z" }, + { url = "https://files.pythonhosted.org/packages/ab/05/7410e12fd03a0c52717e74e6a1b49958810807dda212e23b65d43ea99676/cftime-1.6.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ef56460cb0576e1a9161e1428c9e1a633f809a23fa9d598f313748c1ae5064e", size = 533781, upload-time = "2026-01-02T20:45:04.818Z" }, + { url = "https://files.pythonhosted.org/packages/44/ba/10e3546426d3ed9f9cc82e4a99836bb6fac1642c7830f7bdd0ac1c3f0805/cftime-1.6.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4f4873d38b10032f9f3111c547a1d485519ae64eee6a7a2d091f1f8b08e1ba50", size = 515218, upload-time = "2026-01-02T20:45:06.788Z" }, + { url = "https://files.pythonhosted.org/packages/bd/68/efa11eae867749e921bfec6a865afdba8166e96188112dde70bb8bb49254/cftime-1.6.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccce0f4c9d3f38dd948a117e578b50d0e0db11e2ca9435fb358fd524813e4b61", size = 1579932, upload-time = "2026-01-02T20:45:11.194Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6c/0971e602c1390a423e6621dfbad9f1d375186bdaf9c9c7f75e06f1fbf355/cftime-1.6.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19cbfc5152fb0b34ce03acf9668229af388d7baa63a78f936239cb011ccbe6b1", size = 1555894, upload-time = "2026-01-02T20:45:16.351Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fc/8475a15b7c3209a4a68b563dfc5e01ce74f2d8b9822372c3d30c68ab7f39/cftime-1.6.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4470cd5ef3c2514566f53efbcbb64dd924fa0584637d90285b2f983bd4ee7d97", size = 513027, upload-time = "2026-01-02T20:45:20.023Z" }, + { url = "https://files.pythonhosted.org/packages/f7/80/4ecbda8318fbf40ad4e005a4a93aebba69e81382e5b4c6086251cd5d0ee8/cftime-1.6.5-cp314-cp314t-win_arm64.whl", hash = "sha256:034c15a67144a0a5590ef150c99f844897618b148b87131ed34fda7072614662", size = 469065, upload-time = "2026-01-02T20:45:23.398Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/2a/23f34ec9d04624958e137efdc394888716353190e75f25dd22c7a2c7a8aa/charset_normalizer-3.4.9.tar.gz", hash = "sha256:673611bbd43f0810bec0b0f028ddeaaa501190339cac411f347ac76917c3ae7b", size = 152439, upload-time = "2026-07-07T14:34:58.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/e3/85ec501f206fb049259288c1f3506e53876937fb00edb47009348e66756b/charset_normalizer-3.4.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0e94703ec9684807f20cfb5eed95c70f67f2a8f21ad620146d7b5a13677b93e5", size = 317075, upload-time = "2026-07-07T14:32:56.021Z" }, + { url = "https://files.pythonhosted.org/packages/c3/69/2a5385192e67175f7d8bd5ce4f57c24bc956439adeae5c13a99aa28a53d1/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a441ea71902098ffe78c5abe6c494f44160b4af614ed16c3d9a3b1d17fd8ee2", size = 213837, upload-time = "2026-07-07T14:32:57.78Z" }, + { url = "https://files.pythonhosted.org/packages/b3/46/03ddc7da576d814fe0a36dd1f0fd3258e95404b4b2e3c026b7923d7e133f/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:304b13570067b2547562e308af560b3963857b1fa90bd6afd978130130fe2d6a", size = 235503, upload-time = "2026-07-07T14:32:59.205Z" }, + { url = "https://files.pythonhosted.org/packages/4e/6e/de0229a7ef40f6f9d28a837eebf4ec47bdca5dab4e900c84f22919af636a/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4773092f8019072343a7447203308b176e10199920eb02d6195e81bbb3274c29", size = 229944, upload-time = "2026-07-07T14:33:00.803Z" }, + { url = "https://files.pythonhosted.org/packages/a5/34/49b9060e8418b14fb5cba9cf6bfb383111e2538a03a1fb18e66a95aeb3d5/charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04ce310cb89c15df659582aee80a0603788732a5e017d5bd5c81158106ce249c", size = 221276, upload-time = "2026-07-07T14:33:02.199Z" }, + { url = "https://files.pythonhosted.org/packages/44/95/80282cce0fae9c3061203d723ee87da996aed79679e65d8935050ee7ca1f/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:c0323c9daef75ef2e5083624b4585018a0c9d5e3b40f607eed81a311270b934b", size = 205260, upload-time = "2026-07-07T14:33:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/0c/74/2f62c8821b969ea3bd67cc2e6976834f48ca5d12664d2559ebcd9bcfbed7/charset_normalizer-3.4.9-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:871ff67ea1aad4dfd91736464934d56b32dac49f9fbe16cddba36198a7b3a0db", size = 217786, upload-time = "2026-07-07T14:33:05.12Z" }, + { url = "https://files.pythonhosted.org/packages/d9/8d/feabb82cb49fcad14515b1d7d1ca4787b0da7fc723a212bf89bc9e0fac52/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67830fc78e67501f47bb950471b2dcb9b35b140084429318e862895a8e89c993", size = 216798, upload-time = "2026-07-07T14:33:06.629Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ff/c946d63bc3786d5b84d960b0f7ab7e25b828486a946b5aa997625bcaf6a6/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3d92613ec25e43b05f042302531ec0f00b8445190e43325880cbd6ab7c2581da", size = 206429, upload-time = "2026-07-07T14:33:08.006Z" }, + { url = "https://files.pythonhosted.org/packages/af/ba/5e5007c370702f85d2ef75791fac7943ed41e080364a673b20142e430e3e/charset_normalizer-3.4.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:280081916dc341820640489a66e4696049401ef1cf6dd672f672e70ad915aca3", size = 223066, upload-time = "2026-07-07T14:33:09.783Z" }, + { url = "https://files.pythonhosted.org/packages/83/d5/9096aa3cf532dfad237861544eb47a0f20d5adbf1039760fed8eaae935d9/charset_normalizer-3.4.9-cp311-cp311-win32.whl", hash = "sha256:ac351b3b8014eead140e77e9717e2992c6bbe30b63bc3422422eb84865412e3d", size = 150456, upload-time = "2026-07-07T14:33:11.217Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a1/e29995109e455dc8eff8d0fac6ae509be39561318a7cfeac5d33ad029213/charset_normalizer-3.4.9-cp311-cp311-win_amd64.whl", hash = "sha256:6366a16e1a25018694d6a5d784d09b046edc9eac40ea2b54065c3052672516a1", size = 161410, upload-time = "2026-07-07T14:33:12.743Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8d/1569f4d0032d6ba2a4fe4591c35bf87868c600c41a71eb5c2e1ffa8464c2/charset_normalizer-3.4.9-cp311-cp311-win_arm64.whl", hash = "sha256:1d22856ffbe153a602df38e4a5464f0b748a54002e0d69ac6d2ad0a197cc99ec", size = 152649, upload-time = "2026-07-07T14:33:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/70/4a/ecbd131485c07fcdfad54e28946d513e3da22ef3b4bd854dcafae54ec739/charset_normalizer-3.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:45b0cc4e3556cd875e09102988d1ab8356c998b596c9fced84547c8138b487a0", size = 319300, upload-time = "2026-07-07T14:33:15.666Z" }, + { url = "https://files.pythonhosted.org/packages/ec/96/5d9364e3342d69f3a045e1777bc47c85c383e6e9466d561b33fdb419d1f9/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9b2aff1c7b3884512b9512c3eaadd9bab39fb45042ffaaa1dd08ff2b9f8109d9", size = 215802, upload-time = "2026-07-07T14:33:17.031Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4c/5361f9aa7f2cb58d94f2ab831b3d493f69efb1d239654b4744e3c09527cb/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9104ed0bd76a429d46f9ec0dbc9b08ad1d2dcdf2b00a5a0daa1c145329b35b44", size = 237171, upload-time = "2026-07-07T14:33:18.576Z" }, + { url = "https://files.pythonhosted.org/packages/50/78/ce342ca4ff30b2eb49fe6d9578df85974f90c67d294113e94efdd9664cbd/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b86a2b16095d250c6f58b3d9b2eee6f4147754344f3dab0922f7c9bf7d226c9", size = 233075, upload-time = "2026-07-07T14:33:20.084Z" }, + { url = "https://files.pythonhosted.org/packages/01/c4/4fa4c8b3097a11f3c5f09a35b72ed6855fb1d332469504962ab7bafcc702/charset_normalizer-3.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e226f6218febc71f6c1fc2fafb91c226f75bdc1d8fb12d66823716e891608fd", size = 224256, upload-time = "2026-07-07T14:33:21.747Z" }, + { url = "https://files.pythonhosted.org/packages/87/3a/ad914516df7e358a81aae018caa5e0470ba827fa6d763b1d2e87d920a5f6/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:90c44bc373b7687f6948b693cceaea1348ae0975d7474746559494468e3c1d84", size = 208784, upload-time = "2026-07-07T14:33:23.313Z" }, + { url = "https://files.pythonhosted.org/packages/d7/74/3c12f9755717dfe5c5c87da63f35d765fa0c00382ec26bf23f7fae34f2ba/charset_normalizer-3.4.9-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cdef90ae47919cae358d8ab15797a800ed41da7aba5d72419fb510729e2ed4b", size = 219928, upload-time = "2026-07-07T14:33:24.814Z" }, + { url = "https://files.pythonhosted.org/packages/33/9a/895095b83e7907abd6d3d99aad3a38ad0d9686cc186cb0c94c24320fe63e/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:60f44ade2cf573dad7a277e6f8ca9a51a21dda572b13bd7d8539bb3cd5dbedde", size = 218489, upload-time = "2026-07-07T14:33:26.42Z" }, + { url = "https://files.pythonhosted.org/packages/a1/34/ef5c05f412f42520d7709b7d3784d19640839eb7366ded1755511585429f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a1786910334ed46ab1dd73222f2cd1e05c2c3bb39f6dddb4f8b36fc382058a39", size = 210267, upload-time = "2026-07-07T14:33:27.952Z" }, + { url = "https://files.pythonhosted.org/packages/83/dc/9b29fa4412b318bf3bfea985c35d67eb55e04b59a7c3f2237168b0e0be6f/charset_normalizer-3.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03d07803992c6c7bbc976327f34b18b6160327fc81cb82c9d504720ac0be3b62", size = 226030, upload-time = "2026-07-07T14:33:29.397Z" }, + { url = "https://files.pythonhosted.org/packages/0e/42/6dbc00b8cd16011691203e33570fa42ed5746599a2e878112d16eab403a3/charset_normalizer-3.4.9-cp312-cp312-win32.whl", hash = "sha256:78841cccf1af7b40f6f716338d50c0902dbe88d9f800b3c973b7a9a0a693a642", size = 151185, upload-time = "2026-07-07T14:33:30.781Z" }, + { url = "https://files.pythonhosted.org/packages/80/cc/f920afd1a23c58ccd53c1d36085a71893a4737ff5e66e0371efab6809850/charset_normalizer-3.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:4b3dac63058cc36820b0dd072f89898604e2d39686fe05321729d00d8ac185a0", size = 162557, upload-time = "2026-07-07T14:33:32.176Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e6/0386d43a261ff4e4b30c5857af7df877254b46bec7b9d1b74b6bf969a90b/charset_normalizer-3.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:78fa18e436a1a0e58dbd7e02fc4473f3f32cceb12df9dfca542d075961c307d2", size = 152665, upload-time = "2026-07-07T14:33:33.711Z" }, + { url = "https://files.pythonhosted.org/packages/b2/06/97ec2aeae780b31d742b6352218b43841a6871e2564578ca522dce4a45c3/charset_normalizer-3.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:440eede837960000d74978f0eba527be106b5b9aee0daf779d395276ed0b0614", size = 317688, upload-time = "2026-07-07T14:33:35.408Z" }, + { url = "https://files.pythonhosted.org/packages/d0/39/8ff066c672434225f8d25f8b739f992af250944392173dcc88362681c9bf/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e764fd1e70b6a3e205a0e46f3051701f98a8cb3fad66eeb80e48bb502f8698", size = 214982, upload-time = "2026-07-07T14:33:36.996Z" }, + { url = "https://files.pythonhosted.org/packages/92/8f/3a47a3667c83c2df9483d91644c6c107de3bf8874aa1793da9d3012eb986/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e4fd89cc178bced6ad29cb3e6dd4aa63fa5017c3524dbd0b25998fb64a87cc8b", size = 236460, upload-time = "2026-07-07T14:33:38.536Z" }, + { url = "https://files.pythonhosted.org/packages/f1/60/b22cdbee7e4013dab8b0d7647fc6181120fbbbc8f7025c226d15bd5a47fc/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bd47ba7fc3ca94896759ea0109775132d3e7ab921fbf54038e1bab2e46c313c9", size = 232003, upload-time = "2026-07-07T14:33:40.059Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f8/72eb13dcabe7257035cea8aefd922caad2f110d252bf9f67c4c2ca763aee/charset_normalizer-3.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:84fd18bcc17526fc2b3c1af7d2b9217d32c9c04448c16ec693b9b4f1985c3d33", size = 223149, upload-time = "2026-07-07T14:33:41.631Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3e/faee8f9de92b14ee1198e9163252bb15efee7301b31256a3b6d9ebfdd0dd/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:5b10cd92fc5c498b35a8635df6d5a100207f88b63a4dc1de7ef9a548e1e2cd63", size = 207901, upload-time = "2026-07-07T14:33:43.209Z" }, + { url = "https://files.pythonhosted.org/packages/3a/25/45f30093ae27dd7b92a793b61882a38685f993700113ca36e0c9c14965e1/charset_normalizer-3.4.9-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a4fbdde9dd4a9ce5fd52c2b3a347bb50cc89483ef783f1cb00d408c13f7a96c0", size = 219176, upload-time = "2026-07-07T14:33:44.725Z" }, + { url = "https://files.pythonhosted.org/packages/48/18/c8f397329c35e32f6a837e488986f4ae03bd2abebc453b48714991630c2f/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:416c229f77e5ea25b3dfd4b582f8d73d7e43c22320302b9ab128a2d3a0b38efe", size = 217356, upload-time = "2026-07-07T14:33:46.192Z" }, + { url = "https://files.pythonhosted.org/packages/86/7e/5ce0bba863470fd1902d5e5843968951bddf38abe4742fc97116ef4598b3/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:75286256590a6320cf106a0d28970d3560aad9ee09aa7b34fb40524792436d35", size = 209614, upload-time = "2026-07-07T14:33:47.705Z" }, + { url = "https://files.pythonhosted.org/packages/6c/ef/2473d3c4d869155be4af1191111d59c4d5c4e0173026f7e85b176e23bf65/charset_normalizer-3.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69b157c5d3292bcd443faca052f3096f637f1e074b98212a933c074ae23dc3b8", size = 224991, upload-time = "2026-07-07T14:33:49.238Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a3/53ddae3db108a088156aa8ddfafd411ebbc1340f48c5573f697b27f69a39/charset_normalizer-3.4.9-cp313-cp313-win32.whl", hash = "sha256:51307f5c71007673a2bf8232ad973483d281e74cb99c8c5a990af1eefa6277d9", size = 150622, upload-time = "2026-07-07T14:33:50.711Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ef/6953a77c7cf2c2ff9998e6f575ab3e380119f100223381565a4f94c1f836/charset_normalizer-3.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:fe2c7201c642b7c308f1675355ad7ff7b66acfe3541625efe5a3ad38f29d6115", size = 161947, upload-time = "2026-07-07T14:33:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/6e/fb/d560d1d1555debbfe7849d9cac6145c1b537709d79576bf22557ed803b82/charset_normalizer-3.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:611057cc5d5c0afc743ba8be6bd828c17e0aaa8643f9d0a9b9bb7dea80eb8012", size = 152594, upload-time = "2026-07-07T14:33:53.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8d/496817fa0944239ecae662dd57ea765cfeaec6a735f9f025d4b7b72e7143/charset_normalizer-3.4.9-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:0327fcd59a935777d83410750c50600ee9571af2846f71ce40f25b13da1ef380", size = 317253, upload-time = "2026-07-07T14:33:54.994Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f9/ef4a69ea338ad3c0deceea0f5f7d2380ae8b52132b06d652cb0d2cd86706/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a79d9f4d8001473a30c163556b3c3bfebec837495a412dde78b51672f6134f9", size = 215898, upload-time = "2026-07-07T14:33:56.334Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e7/5ddfd76fc061eb52de219658a4aa431cbacadf0a0219c8854f00da50d289/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33bdcc2a32c0a0e861f60841a512c8acc658c87c2ac59d89e3a46dacf7d866e4", size = 236718, upload-time = "2026-07-07T14:33:57.9Z" }, + { url = "https://files.pythonhosted.org/packages/49/ba/768fa3f36048d81c477a0ce61f813bc1454d80917ccfe550abd9f44f5e24/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f840ed6d8ecba8255df8c42b87fadeda98ddfc6eeec05e2dc66e26d46dd6f58a", size = 232519, upload-time = "2026-07-07T14:33:59.811Z" }, + { url = "https://files.pythonhosted.org/packages/f4/c4/b3e049d2aa3766180c78507110543d9d50894cc97f57de543f1be521dcdc/charset_normalizer-3.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c25fe15c70c59eb7c5ce8c06a1f3fa1da0ecc5ea1e7a5922c40fd2fa9b0d5046", size = 223143, upload-time = "2026-07-07T14:34:01.517Z" }, + { url = "https://files.pythonhosted.org/packages/19/79/55c32d06d76ae4feafe053f061f3e3ab70bcf19f4007797ce8c3efda7830/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:f7fb7d750cfa0a070d2c24e831fd3481019a60dd317ea2b39acbcebc08b6ed81", size = 206742, upload-time = "2026-07-07T14:34:03.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/e0/47c079dd82d217c807479cd59ffd30af56307ea31c108b75758970459ad3/charset_normalizer-3.4.9-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1c96a7a18b9690a4d46df09e3e3382406ae3213727cd1019ebade1c4a81917", size = 219191, upload-time = "2026-07-07T14:34:04.657Z" }, + { url = "https://files.pythonhosted.org/packages/42/ab/b9bc2e77d6b44a7e46ef62ec5cac1c9a6ba7b9135a5d560f002696ec9995/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a4cfde78a9f2880208d16a93b795726a3017d5977e08d1e162a7a31322479c41", size = 218328, upload-time = "2026-07-07T14:34:06.115Z" }, + { url = "https://files.pythonhosted.org/packages/f1/78/c9c71d599f5aa2d42bcdd35cbbd46d7f535351a57e40ff7d8e5a7e219401/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4d6fcde76f94f5cb9e43e9e9a61f16dacefd228cbbf6f1a09bd9b219a92f1a1", size = 207406, upload-time = "2026-07-07T14:34:07.554Z" }, + { url = "https://files.pythonhosted.org/packages/f6/39/c914445c321a845097ce4f6ac7de9a18228a77b766272125a1ce00d851eb/charset_normalizer-3.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:898f0e9068ca27d37f8e83a5b962821df851532e6c4a7d615c1c033f9da6eedf", size = 225157, upload-time = "2026-07-07T14:34:09.061Z" }, + { url = "https://files.pythonhosted.org/packages/9b/f2/c0d4b8508565a36bc5c624e88ed297f5b0b1095011034d7f5b83a69908b5/charset_normalizer-3.4.9-cp314-cp314-win32.whl", hash = "sha256:c1c948747b03be832dceed96ca815cef7360de9aa19d37c730f8e3f6101aca48", size = 151095, upload-time = "2026-07-07T14:34:10.901Z" }, + { url = "https://files.pythonhosted.org/packages/49/fd/a1d26144398c67486422a72bf5812cda22cb4ccfcd95a290fb41ceb4b8e2/charset_normalizer-3.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:16b65ea0f2465b6fb52aa22de5eca612aa964ddfec00a912e26f4656cbef890b", size = 162796, upload-time = "2026-07-07T14:34:12.47Z" }, + { url = "https://files.pythonhosted.org/packages/20/95/d75e82f8ce9fd323ebf059c16c9aadefb22a1ecde13b7840b35835e4886c/charset_normalizer-3.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:40a126142a56b2dfc0aacbad1de8310cbf60da7656db0e6b16eebd48e3e93519", size = 153334, upload-time = "2026-07-07T14:34:14.044Z" }, + { url = "https://files.pythonhosted.org/packages/00/5e/17398df3a139985ba9d11ed072531986f408c8fca952835ef1ab1820c02b/charset_normalizer-3.4.9-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:609b3ba8fcc0fb5ab7af00719d0fb6ad0cb518e48e7712d12fd68f1327951198", size = 338848, upload-time = "2026-07-07T14:34:15.688Z" }, + { url = "https://files.pythonhosted.org/packages/cd/91/7253a32e86b7e1d1239b1b36ba6dd0f021a21107ab33054b53119cc083b9/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51447e9aa2684679af07ca5021c3db526e0284347ebf4ffcec1154c3350cfe32", size = 223022, upload-time = "2026-07-07T14:34:17.248Z" }, + { url = "https://files.pythonhosted.org/packages/cb/32/2e64bd2be10e89c61e57ebe6a93fd98ae88eb7ebe414b5121f22c96c69eb/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cc1b0fff8ead343dae06305f954eb8468ba0ec1a97881f42489d198e4ce3c632", size = 241590, upload-time = "2026-07-07T14:34:18.813Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ef/d96ec496cfea0c21db43b0ad03891308b02388d054cc902cf0e5a1ad6a88/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa36ec09ef71d158186bc79e359ff5fdd6e7996fe8ab638f00d6b93139ba4fcf", size = 239584, upload-time = "2026-07-07T14:34:20.52Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ce/9af95f7876194bd7a14e3dfe4a4de2e0bff02666a3910d72beafd06cc297/charset_normalizer-3.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df115d4d83168fdf2cae48ef1ff6d1cb4c466364e30861b37121de0f3bf1b990", size = 230224, upload-time = "2026-07-07T14:34:22.189Z" }, + { url = "https://files.pythonhosted.org/packages/52/94/af74dde74a3996bd959c350709bfe50e297823d70a8c1cbd54b838880863/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f86c6358749bd4fda175388691e3ba8c46e24c5347d0afd20f9b7edfc9faf07d", size = 212667, upload-time = "2026-07-07T14:34:23.857Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f0/f1c4fe746c395922961b5916ed1d7d6e7d4c84851d19ed43cc89980ec953/charset_normalizer-3.4.9-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:32286a2c8d167e897177b673176c1e3e00d4057caf5d2b64eef9a3666b03018e", size = 227179, upload-time = "2026-07-07T14:34:25.586Z" }, + { url = "https://files.pythonhosted.org/packages/e4/56/6c745619ac397e8871e2bcd3cea1eec86b877488f33888b3aef5c3ed506e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:83aed2c10721ddd90f68140685391b50811a880af20654c59af6b6c66c40513c", size = 225372, upload-time = "2026-07-07T14:34:27.212Z" }, + { url = "https://files.pythonhosted.org/packages/78/ad/98aae8630ac71f16711968e38a5acfecce41b778bf2f0312851020f565a8/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cd6c3d4b783c556fa00bf540854e42f135e2f256abd29669fcd0da0f2dec79c2", size = 215222, upload-time = "2026-07-07T14:34:28.774Z" }, + { url = "https://files.pythonhosted.org/packages/f7/40/9593d54209765207a7f11073c06494c1721e4ca4a0a426c597679bf7f91e/charset_normalizer-3.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ee2f2a527e3c1a6e6411eb4209642e138b544a2d72fe5d0d76daf77b24063534", size = 231958, upload-time = "2026-07-07T14:34:30.345Z" }, + { url = "https://files.pythonhosted.org/packages/b1/27/693ee5e8a18191eb38647360c51cd505013e2bd3b366aa43fd5344c21e3c/charset_normalizer-3.4.9-cp314-cp314t-win32.whl", hash = "sha256:0d861473f743244d349b50f850d10eb87aeb22bbdcc8e64f79273c94af5a8226", size = 155580, upload-time = "2026-07-07T14:34:31.884Z" }, + { url = "https://files.pythonhosted.org/packages/80/3f/bd97d3d9c613013d07cb7733d299385b41df37f0471310f5a73dc359f0b8/charset_normalizer-3.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:9b8e0f3107e2200b76f6054de99016eac3ee6762713587b36baaa7e4bd2ae177", size = 167620, upload-time = "2026-07-07T14:34:33.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/c6/eee9dca4439b1061f76373f06ea855678cc4a64c1c3c90b50e479edbb8eb/charset_normalizer-3.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:19ac87f93086ce37b86e098888555c4b4bc48102279bae3350098c0ed664b501", size = 158037, upload-time = "2026-07-07T14:34:35.018Z" }, + { url = "https://files.pythonhosted.org/packages/98/2b/f97f1c193fb855c345d678f5077d6926034db0722df74c8f057020e05a25/charset_normalizer-3.4.9-py3-none-any.whl", hash = "sha256:68e5f26a1ad57ded6d1cfb85331d1c1a195314756471d97758c48498bb4dcdf5", size = 64538, upload-time = "2026-07-07T14:34:56.993Z" }, +] + +[[package]] +name = "click" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + +[[package]] +name = "code-meters" +version = "0.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/c6/49cb64fc3f7cdb12f10aad07f5ab7a6a750f81c5fc9c6cd912a7471364cf/code-meters-0.0.3.tar.gz", hash = "sha256:1c9b9e4f078d0df9290ea48bdeed5d3e7102261c3fccb68253e9fea9071bafdb", size = 10129, upload-time = "2024-02-23T15:50:40.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/3d/ed5fea1e8b2b6f86116a8fbe7cf50194f488276db86871fce39c74e620fb/code_meters-0.0.3-py3-none-any.whl", hash = "sha256:d77fbe9bdfb2b50239addc1976a66867dff6031e1c79be5962ede903fba92ef6", size = 8801, upload-time = "2024-02-23T15:50:38.443Z" }, +] + +[[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, 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, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "conflator" +version = "0.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "rich-argparse" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cf/19/e8143a210b58494025803a684de9eb94998b7b8288f42f15fbee0161019c/conflator-0.1.8.tar.gz", hash = "sha256:9ee8958a3eebbfeb6fafc4b0b7b77c8a97d1752fd725ca8a514046a596f26508", size = 9753, upload-time = "2025-12-01T12:37:00.038Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/aa/0d6a2c96234fb5cc3d55a3f5078268ef6bc4e69d202f86b93f17b3f8d2eb/conflator-0.1.8-py3-none-any.whl", hash = "sha256:7e621da64183bc9207b3857cebaa9cd1aee52ea6cb4aea7492aa9d9a4b4968c5", size = 10806, upload-time = "2025-12-01T12:36:58.839Z" }, +] + +[[package]] +name = "dask" +version = "2026.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "cloudpickle" }, + { name = "fsspec" }, + { name = "importlib-metadata", marker = "python_full_version < '3.12'" }, + { name = "packaging" }, + { name = "partd" }, + { name = "pyyaml" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/39/cbd21c9133d02b4e60899ed466ad5e876553ea68ebffee6209e7dcafc8d4/dask-2026.7.1.tar.gz", hash = "sha256:5727484427665f051e86bf87d021a64d6411141cdc8a20bfe3c1ad2968cc06b7", size = 11548794, upload-time = "2026-07-14T01:06:22.46Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/5f/7c22733da92b3a6cc4dddcaa8731089d213c2790bbc997e51c429a4e8f8b/dask-2026.7.1-py3-none-any.whl", hash = "sha256:985ffd6c5e9d7979ede515e84ae8d39b647d6aa64f77600f15714ff65f578fe6", size = 1496882, upload-time = "2026-07-14T01:06:20.341Z" }, +] + +[[package]] +name = "decorator" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" }, +] + +[[package]] +name = "deprecation" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788, upload-time = "2020-04-20T14:23:38.738Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" }, +] + +[[package]] +name = "earthkit-data" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgrib" }, + { name = "dask" }, + { name = "deprecation" }, + { name = "earthkit-utils" }, + { name = "eccodes" }, + { name = "entrypoints" }, + { name = "filelock" }, + { name = "jinja2" }, + { name = "jsonschema" }, + { name = "lru-dict" }, + { name = "markdown" }, + { name = "multiurl" }, + { name = "netcdf4" }, + { name = "pandas" }, + { name = "pdbufr" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "xarray" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/66/623d201df141f5bb2800d55b6bff0493c7a0d4fd6d1af86ee27c338e4243/earthkit_data-0.20.0.tar.gz", hash = "sha256:17eff8ce863722c016b0d9456d5fe76353dc8c7671ec1091aa7e7189615e80e9", size = 5656819, upload-time = "2026-05-13T12:22:44.707Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/d3/a00aeee76005909eaa1f7fcb1e1f2333d9f4b53866666e1bb7f9e9e15148/earthkit_data-0.20.0-py3-none-any.whl", hash = "sha256:e1df4d93354bb5bd30b967ad17d52454b4df4d6a37511fc91f950aebba592056", size = 398525, upload-time = "2026-05-13T12:22:43.362Z" }, +] + +[package.optional-dependencies] +fdb = [ + { name = "pyfdb" }, +] +mars = [ + { name = "ecmwf-api-client" }, +] + +[[package]] +name = "earthkit-meteo" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "earthkit-utils" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/14/87/162771cba3c4371e054914750164851e32bafe924c674153105789f01c88/earthkit_meteo-0.6.2.tar.gz", hash = "sha256:2823ed56947dd2c9c69aae6fe19153eec393c80392126ab84cc760419d0b952b", size = 370304, upload-time = "2026-03-31T09:40:37.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/d3/988c1807b315a71cb4f6e5b2b739b115246083dc678b50fa9ff97c8a417a/earthkit_meteo-0.6.2-py3-none-any.whl", hash = "sha256:7380464a3a62422d4027bcfc20fbd4ee3a7bfc51eb1f89d1a5027f24c7f32a4d", size = 57004, upload-time = "2026-03-31T09:40:36.633Z" }, +] + +[[package]] +name = "earthkit-time" +version = "0.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/fa/37a9a90303908685fba892402248789de689071f6ad4c1373dfd195ac34e/earthkit_time-0.1.8.tar.gz", hash = "sha256:d211f1647c169b34cf79177aed17ac4f472cb8bd3096f98b08d7f77293dfcd81", size = 32560, upload-time = "2026-02-16T17:40:08.144Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/96/614cc95e2bd7f2075b8b4f4b85b37df655c3cc3028f949b799224f4546d4/earthkit_time-0.1.8-py3-none-any.whl", hash = "sha256:a09de208a3696f497e2d9495e535a9e2fc805f0148d4e2555abefd0da759216d", size = 28772, upload-time = "2026-02-16T17:40:07.195Z" }, +] + +[[package]] +name = "earthkit-utils" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "array-api-compat" }, + { name = "pint" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/0b/1a834f5e57294b163aba0713b371810ba28ef5ef73f43ee0cafbeab54e07/earthkit_utils-0.3.0.tar.gz", hash = "sha256:1f49e792683ddd7b40642c41839718d25d101b0f5fbe63a372d0fcd33a7e3cd0", size = 43013, upload-time = "2026-03-24T14:57:10.184Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/cb/0c9f59b0ca2a5ed941b65c52a4a005a7e16511f52fc3965eb45c53565b76/earthkit_utils-0.3.0-py3-none-any.whl", hash = "sha256:167e0385e062800d6c9f2d25a2a3075d7d91b67c3a02af52d772175b2313aa89", size = 35650, upload-time = "2026-03-24T14:57:08.869Z" }, +] + +[[package]] +name = "earthkit-workflows" +version = "0.15.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "array-api-compat" }, + { name = "cloudpickle" }, + { name = "earthkit-data" }, + { name = "fire" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "orjson" }, + { name = "pydantic" }, + { name = "pyrsistent" }, + { name = "pyzmq" }, + { name = "qubed" }, + { name = "sortedcontainers" }, + { name = "xarray" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/06/79fb057cfd15a979b4ecc7e61f4620551671b5095c218d29b5a4dc7109a4/earthkit_workflows-0.15.4.tar.gz", hash = "sha256:3c5c55872d718992476866c8c6a013426544df4f9c5055dc3bfe68bba5490df4", size = 10866443, upload-time = "2026-07-29T09:49:59.207Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/15/486d3f4a2ac02dd913fa1d79b59440575c987d8f4caf363d209471badb89/earthkit_workflows-0.15.4-py3-none-any.whl", hash = "sha256:1b31130e17bdb5160baf2d791812edecd84632f78e0c512aac9a8854d83f9a1a", size = 214914, upload-time = "2026-07-29T09:49:57.226Z" }, +] + +[package.optional-dependencies] +vizualize = [ + { name = "networkx" }, + { name = "pyvis" }, +] + +[[package]] +name = "eccodes" +version = "2.47.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "cffi" }, + { name = "findlibs" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/8d/63d8287e912a99a73fa37b9c821883fb8f09a900187a8c917ba72e3743be/eccodes-2.47.0.tar.gz", hash = "sha256:ae9207ef27c67656d068aab97f172abeb85fc3620f56faa22fdac5b1be75de69", size = 2467378, upload-time = "2026-04-22T11:30:08.465Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/40/42bb2d98bc6103194d25fa8da141cd43cabf32277cbf2ab513fe35532196/eccodes-2.47.0-cp311-cp311-win_amd64.whl", hash = "sha256:3b71ae31bca13e4b62712405d7eb3c988b71b0b0bbd85fe4d3eacac7fc67ae27", size = 7435928, upload-time = "2026-04-22T11:29:40.702Z" }, + { url = "https://files.pythonhosted.org/packages/31/01/d8bfb2ac2ec4831789a82cc06afc609a599f5f545dc885da1c8671a308e5/eccodes-2.47.0-cp312-cp312-win_amd64.whl", hash = "sha256:7ab3b689fd3caa07451f7bcf07329b2268acdc7434bcedac8b13d1f20d3389c0", size = 7436009, upload-time = "2026-04-22T11:29:36.343Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ba/4cbca5157e90d90c318b2acae178d38b0c6c6df73b434e6a2b6a8cb23a2b/eccodes-2.47.0-cp313-cp313-win_amd64.whl", hash = "sha256:f5f9b71b6e2cb8c9b8349b88a09791e8fb6d51a4396d7160b3da2a83149a4973", size = 7436001, upload-time = "2026-04-22T11:29:36.596Z" }, + { url = "https://files.pythonhosted.org/packages/b3/a3/f58ff573ba0f678ff8116686e868afe436627b19b457a2aba62cd463c9ad/eccodes-2.47.0-py3-none-any.whl", hash = "sha256:13d0b28bd58e94e2c303f42415ca0dcc56ab3febf0f52b1fb0f1d4aa5e7db8e1", size = 91567, upload-time = "2026-04-22T11:30:06.789Z" }, +] + +[[package]] +name = "eccodeslib" +version = "2.48.0.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/a9/670a1e84381324c167b339a130e22f50a18528b9d7d09cfbd4e88aa1a7b2/eccodeslib-2.48.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:8a9bfdf8a7d081c108150c769a0fdb349d917ea1333fcf627460505ce594765a", size = 9097184, upload-time = "2026-07-17T13:27:21.841Z" }, + { url = "https://files.pythonhosted.org/packages/6d/03/bccf65f813ffe9094b7acc4c8ac861130844778de0bb030dee95c28e1578/eccodeslib-2.48.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6567970b2c6cb1dcf31741ff515153aa684f317d913a7cd6659fb85ab9dd5696", size = 8911899, upload-time = "2026-07-17T13:23:40.789Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d4/d57cbf1e278a36aae33fff842a060ff8763e7da58b5ab03daa7037d0691e/eccodeslib-2.48.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:daa351d56a2539601e48d2b57db33aa5dbfe506fa8cc9b778aeab50450f749b4", size = 9303576, upload-time = "2026-07-17T13:16:42.531Z" }, + { url = "https://files.pythonhosted.org/packages/48/af/32011bf877fc14043d618d87ad4e95537b552c5da06fe74834f494f897a7/eccodeslib-2.48.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:56b632e229afdd0c7d5a5906f12be55c18fccc4974f276252da5efde76f4c278", size = 9092983, upload-time = "2026-07-17T13:32:39.84Z" }, + { url = "https://files.pythonhosted.org/packages/40/58/bc1aacba6ba814c56f4c4d55ab825cc01ef27e545c6d8e1d194a49e72f2f/eccodeslib-2.48.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:ead5acb5214fb79a4d9d1f3aebec67defa1f7f18088fcf38fed968d66be60e65", size = 9097221, upload-time = "2026-07-17T13:59:24.485Z" }, + { url = "https://files.pythonhosted.org/packages/20/2c/8d64cc3899a48c7edb2fc5119fd57c957bae8e36fc3113f0cbc9fa4a5b64/eccodeslib-2.48.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:78c2e9b4b86648806ebe9b300329696222f43930f2aaccdaf048292b594981ae", size = 8911920, upload-time = "2026-07-17T13:46:44.763Z" }, + { url = "https://files.pythonhosted.org/packages/7f/9e/1700cd553d6bcec8fd519aa473ad67402cdb94d73123293aa97f7e924cca/eccodeslib-2.48.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a4908810573a15d969a1ccaed815445482874101dc6707a54394eda6ad96610b", size = 9303577, upload-time = "2026-07-17T13:17:01.157Z" }, + { url = "https://files.pythonhosted.org/packages/4e/85/6c2bf17daa7de0207f550922c59c4e1f9267277636edbe46ce8287fdd4bc/eccodeslib-2.48.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5892ef7bac9a1ecc2b4d4cd7e3d6bd2b31581f41b82c0e7a04dfa87b572369fa", size = 9092981, upload-time = "2026-07-17T13:31:46.775Z" }, + { url = "https://files.pythonhosted.org/packages/31/f1/f338e1a5dd5f4e9b078c37bb239a53381db35e6eb6947533535f121488b9/eccodeslib-2.48.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:1abe306e41a317fa9812ac78452c485abf8fd19285d3c5177b610d17f036cf56", size = 9097177, upload-time = "2026-07-17T13:15:45.699Z" }, + { url = "https://files.pythonhosted.org/packages/44/92/df6a63dbfed66ba1feb78062e33cd20ddd67bb01231bfdeaa5c2bde74e34/eccodeslib-2.48.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:c1bc7b1a3675ac876be208f2b11ff35709d83b6a462ff18239d295c9d4d5fec1", size = 8911903, upload-time = "2026-07-17T13:43:35.098Z" }, + { url = "https://files.pythonhosted.org/packages/2d/ec/99267a6e10af2999255fc7492330b11a0c407e45a918d932d365c5e04a18/eccodeslib-2.48.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:a1427aa201114b0b586606facb25ae8b65e4292b5ce883c8d880556c1390f893", size = 9303577, upload-time = "2026-07-17T13:16:51.708Z" }, + { url = "https://files.pythonhosted.org/packages/1a/13/15ee59c9c0066768abc73ce22b401a507c1d8582132805911a2f89679f0f/eccodeslib-2.48.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:b833ed9900d348b04ffe7a1b8acaa5b12851da07ddd854966f03d4b3d105ea44", size = 9092982, upload-time = "2026-07-17T13:29:02.352Z" }, + { url = "https://files.pythonhosted.org/packages/70/7a/27420329eb9fc11abaecd3a0ef375c1a709bfa24bf785b6d604484a8c7e7/eccodeslib-2.48.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:27a3cc3d711dfa49968c61d7098e16f8ee939c1f3b2942892aebbffddd00c48d", size = 9097231, upload-time = "2026-07-17T13:58:56.049Z" }, + { url = "https://files.pythonhosted.org/packages/34/5c/d07302687852b166be933ad99f7941845b16f90b2e1ca0ee08f7efe9b1fb/eccodeslib-2.48.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:bac6340aaecfd0cb21b8eae7b957f009c25912d468284c9821567edcaed950bc", size = 8911895, upload-time = "2026-07-17T13:21:52.004Z" }, + { url = "https://files.pythonhosted.org/packages/f3/76/1b86868da7e9ffc563d54c4a8c874278ec686bbd551904a3c02b712ee3ad/eccodeslib-2.48.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:3e18afbb2e3bb51288845401f1d37f93f4927389a0276ab2c0496fd099595ee0", size = 9303576, upload-time = "2026-07-17T13:17:27.668Z" }, + { url = "https://files.pythonhosted.org/packages/86/5f/21e45a69b772d36b8aa6ddd02414c813c8e9420e56e3ead5070d1e7121f5/eccodeslib-2.48.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:b8806183d2d633f761e67bb33e430b8d2b5b1324439c8aa5581ee2b1a244dc73", size = 9092982, upload-time = "2026-07-17T13:29:50.111Z" }, +] + +[[package]] +name = "eckit" +version = "2.1.1.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eckitlib" }, + { name = "findlibs" }, + { name = "pyyaml" }, + { name = "requests" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/8b/54d3275f712799ee4c95da7abe5a02325775c8b67ecb2bd2e1afffa07f0d/eckit-2.1.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:910ea47a3107f3d6626b5a1f835309a70e67eda36efa1aeded4a977d6ac8abe2", size = 62992, upload-time = "2026-07-17T13:27:24.579Z" }, + { url = "https://files.pythonhosted.org/packages/d6/cf/77895689aac55cc586d60611b5eca028d9476af68f7b33cd03dacc99a3e8/eckit-2.1.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:58a4f85f88217b2df20fe066bcc87c54b3c2f54babec21e3c9cad9c6de48528d", size = 61831, upload-time = "2026-07-17T13:23:43.702Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f0/0fea63b4f4c57875dcb6ae20b84c0a692a506f0e9ec449965cf63a5e2682/eckit-2.1.1.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e6e8f2cc7b160b7d773874dccf27124e4d7419acfac3b8688299f2789fc5a121", size = 68050, upload-time = "2026-07-17T13:16:45.248Z" }, + { url = "https://files.pythonhosted.org/packages/62/ba/18c9b0474fe6dafb96508eaa04613117ae82cf0a072563b09062f39ee6c5/eckit-2.1.1.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:29041c5f13bbe8a90b18ed036b10fa7ce099b481ce342b8e7e5a04c88c049831", size = 67399, upload-time = "2026-07-17T13:32:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/0a/94/7bdae5e7e8be76f938e12deeaf3fef837e94c687a1285c3381af19d01f16/eckit-2.1.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:3e7c74b8b56c91aea77d8a2abfeec8efbd7460fcf56508fbf0de25accf02b220", size = 63637, upload-time = "2026-07-17T13:59:27.159Z" }, + { url = "https://files.pythonhosted.org/packages/2d/a6/b1efb232ace93a76d3edebd2f550ee2ad617a18566aea08e4814dba1a938/eckit-2.1.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:8051f71fdb1a3f06fbaf35d37759585084e39253d2516f00223dc101196373c9", size = 63246, upload-time = "2026-07-17T13:46:47.62Z" }, + { url = "https://files.pythonhosted.org/packages/29/99/e135036fc2b22ff34b0861feed3aa4a276225aa29e27a6bcd8e21813a6ea/eckit-2.1.1.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:b5a608dbe0daa77b6d9eeedbf3f34bdb2e6540889c3378c8b55e7b875f9ff2a8", size = 69763, upload-time = "2026-07-17T13:17:03.657Z" }, + { url = "https://files.pythonhosted.org/packages/c0/55/091fdb2595adeff082bca2c45399e6447ea406d3108b38d65572e319204f/eckit-2.1.1.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0fac5c046d8d19f740fda32fcc2a3e823c79c04785037cde96ea0029405542a1", size = 69504, upload-time = "2026-07-17T13:31:50.338Z" }, + { url = "https://files.pythonhosted.org/packages/d9/cd/1327f37d0ba8045e802783d927df95c249795670de0f4fb908f73a268102/eckit-2.1.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:496e5b1d1f50f661514bf8d24cd084ad7047a1642a96f267986858c7254fc291", size = 63221, upload-time = "2026-07-17T13:15:48.354Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/27675d9fee56ca15590928dc7af01c2a923a89f51f3fd30f81d65db8e816/eckit-2.1.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:e4f7977913568a072ffa0a4323af80114ad7d9602e02bc48765e0b2e74d592ca", size = 62735, upload-time = "2026-07-17T13:43:38.111Z" }, + { url = "https://files.pythonhosted.org/packages/53/32/4b632c06c66aadbb72c7a156caffad5a473372d0ddda237a2770850ffea7/eckit-2.1.1.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:8677888e08fefb77bc39ff341b72a8af23a000492a42539100b341ad06e588a2", size = 69619, upload-time = "2026-07-17T13:16:54.057Z" }, + { url = "https://files.pythonhosted.org/packages/b0/02/089acb47f7cd81c9c987d8381468680fda4fb2995dc3d901a7ad971e48be/eckit-2.1.1.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:cc6f026210a9770e687a13cbbf814a257fcd9eba4d7f838580da632da4d06f1c", size = 69403, upload-time = "2026-07-17T13:29:05.858Z" }, + { url = "https://files.pythonhosted.org/packages/70/5f/7b87b4cb80faa54ea2ad77b115f0f4ea6f4fd2f5e11c40d0686211d6d53b/eckit-2.1.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:3089b3d10b6a28aad9b4aa9257ce33f557c5f60364898259e2a767608c3a903a", size = 63809, upload-time = "2026-07-17T13:58:58.841Z" }, + { url = "https://files.pythonhosted.org/packages/b0/72/ae233e124d26d6e5a9d9ecd9109c733e391258493dae07decc56cc462c09/eckit-2.1.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:78ed306c776335d1ee058cf1731e4f990b4e5f035165f426031bcb10ca638b83", size = 63076, upload-time = "2026-07-17T13:21:54.71Z" }, + { url = "https://files.pythonhosted.org/packages/23/ed/424f979692165c2222a61860b92ec902cafb66e1dc2f6ca97a5d00deb1ff/eckit-2.1.1.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:68759b5f36d9ed4385da44545b56d9b9474c18198d2acb3d22de1402f3ab706c", size = 70033, upload-time = "2026-07-17T13:17:30.041Z" }, + { url = "https://files.pythonhosted.org/packages/ea/15/3dad7376ee431aa054fd8db57ba2d2e0576297c2a366541ed4222902c60e/eckit-2.1.1.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:30ea4747e66007dffe79ba4302ddce462945ba98a76563722ce8d054b368255d", size = 69636, upload-time = "2026-07-17T13:29:53.606Z" }, +] + +[[package]] +name = "eckitlib" +version = "2.1.1.26" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/7f/d0734ceaecd6dc1dda92074c2dd19aa155e0e69b09eb07b04c802f1e16dd/eckitlib-2.1.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:c434f15d661b8e9cd96925560fc97bdf0692920199ba3645ae576e53f94d107d", size = 2486593, upload-time = "2026-07-17T13:27:26.805Z" }, + { url = "https://files.pythonhosted.org/packages/2e/64/c4a6346576d3cd8d7d7e42cb2f92c5d3dbeeb63e1394d6cc7c52fa7ad424/eckitlib-2.1.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:52a730578fbfec59472dce90946ea6c0e796810225a5595fac569e82095d2009", size = 2623443, upload-time = "2026-07-17T13:23:46.312Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6f/cfb50af2ca8df6879bb06acab1650adbab88dab926e652614393257e7b4c/eckitlib-2.1.1.26-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:169c3c188cbb769f2c47c382c26a4730a48b47cdd1411404f1c2ccb6b08ae487", size = 7046373, upload-time = "2026-07-17T13:16:46.875Z" }, + { url = "https://files.pythonhosted.org/packages/da/03/464ffd0681e3f93625865b011d05c6b26e60488e753558caefa11ee898b6/eckitlib-2.1.1.26-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcb2cf107b86a8757fedd26961c5c4d26458e07ef3a9e5c202ef6907465c6691", size = 7173537, upload-time = "2026-07-17T13:32:46.467Z" }, + { url = "https://files.pythonhosted.org/packages/c7/9e/c86bfda3293247f469db5271482b0e08ae2520001f918b8fd4f12bdd7065/eckitlib-2.1.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:ee0103b532e9e5dfd454d5de3616defe295d84115b8f6e5922acca1f70857dbc", size = 2486595, upload-time = "2026-07-17T13:59:29.52Z" }, + { url = "https://files.pythonhosted.org/packages/fc/0d/4e13acec84430356f69a1646b6c6d503add0703978d0ba116738675c49d6/eckitlib-2.1.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:a5caf612b4fe2322a1f594a2cb0687c2509926418f8bf9ba235736114ce6ccd1", size = 2623445, upload-time = "2026-07-17T13:46:50.23Z" }, + { url = "https://files.pythonhosted.org/packages/2c/56/13f1cf010ba2b4f0087e50f1c824f614e97b52c16914e4460db167a789ef/eckitlib-2.1.1.26-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:213e667f5533ed7ded1b30beecad3e34560ed34c92da44a9945be991d9bc2c64", size = 7046378, upload-time = "2026-07-17T13:17:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/6b/6d/cdbd51f0848cf9a4410761c666361c2c35d93635e9bfb7cbc715aa39950a/eckitlib-2.1.1.26-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d719d9580f04d37b34fa85f41d849e40b77d8b2be3e2af1d5dab5e42d25605ed", size = 7173535, upload-time = "2026-07-17T13:31:53.667Z" }, + { url = "https://files.pythonhosted.org/packages/46/7f/66e225af369c0a20d07bc5db686bb4cb63172d65d1170d4cd95be4e10d1f/eckitlib-2.1.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:11ee25ef262e23fef6478fdc26db020a388ee32c0510fa7b685f09821829471c", size = 2486593, upload-time = "2026-07-17T13:15:50.997Z" }, + { url = "https://files.pythonhosted.org/packages/bd/fa/01b51ee8cda87c75f55ecafc569d52929badfe5f4984ff179cc40e470bfd/eckitlib-2.1.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:9d7f30627c1f8b2011fb7ce55732f7ef03e815397e74dcf7e454a03978bdf818", size = 2623448, upload-time = "2026-07-17T13:43:40.798Z" }, + { url = "https://files.pythonhosted.org/packages/7d/7a/3b67fd567503318cb589c270f7b82c30084c60f50e1074c364e140a0e950/eckitlib-2.1.1.26-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfbf7bae139c156f1c2450e51f826136708b4ee55033ce6ecdd329685c330ed9", size = 7046388, upload-time = "2026-07-17T13:16:55.824Z" }, + { url = "https://files.pythonhosted.org/packages/3b/31/56e9a7c99b0cde691977f5f02e1ea78cf88c2bbddd0723bd54998e011352/eckitlib-2.1.1.26-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b432df5e6a15cec8bba24cd21c9d7823edbad2eb944b788021cfb2eec02c459b", size = 7173537, upload-time = "2026-07-17T13:29:09.289Z" }, + { url = "https://files.pythonhosted.org/packages/b2/38/da477636044d4cb8ec936a6359355b48cb674ce30e37f356ef2901a75ddf/eckitlib-2.1.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:6f0fd96207c35cb4241ed5b88b7708eea7fe6d74068ad6dc48f2486859528496", size = 2486594, upload-time = "2026-07-17T13:59:01.301Z" }, + { url = "https://files.pythonhosted.org/packages/30/dc/aaeb8766288c5ff9870757a17c3a08228cad24f4b57d95210af9e5390114/eckitlib-2.1.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:3c4ac9cd84804ed67f09ff59792e551d8f91fb7a720657c0879c230d208ce861", size = 2623446, upload-time = "2026-07-17T13:21:57.204Z" }, + { url = "https://files.pythonhosted.org/packages/47/7d/43da4ab8697bf261a19e30138907aeb4e5802f23241a42da63d603ec1cfa/eckitlib-2.1.1.26-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7423149aa3742129f0929f85a8cc4bd637841ceb581d3eb9d564dc13e729e686", size = 7046375, upload-time = "2026-07-17T13:17:31.643Z" }, + { url = "https://files.pythonhosted.org/packages/9c/61/1145f9a7d335a7836e8713917d1b7cdb9c58307f064343ee4ce8bee7a8c6/eckitlib-2.1.1.26-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e5c197940585c2c3cac6f7098830b1e6e8fda2a810977b1ede4f5677c8ea5a7", size = 7173537, upload-time = "2026-07-17T13:29:56.798Z" }, +] + +[[package]] +name = "ecmwf-api-client" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/a6/23179f1fd6226c42c3c7103a265ade7c020e66f45f6068ec4bf66539068a/ecmwf_api_client-1.7.0.tar.gz", hash = "sha256:1971a047c01cc50cfc893f13fdfa710cf56fb872f1c04685b13c6f1d18431164", size = 13069, upload-time = "2026-06-17T13:12:39.688Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/c3/2d9bfd9cf6a0866dedd74936633761606c005d4aeee17be2b04764e3f1da/ecmwf_api_client-1.7.0-py3-none-any.whl", hash = "sha256:3648fa1f4cb0d56274e388acaccf5500da260f12126566e0fc0a9538e46f12d1", size = 13543, upload-time = "2026-06-17T13:12:38.383Z" }, +] + +[[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, 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, upload-time = "2022-02-02T21:30:26.024Z" }, +] + +[[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, 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, upload-time = "2025-09-01T09:48:08.5Z" }, +] + +[[package]] +name = "filelock" +version = "3.32.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c0/80/8232b582c4b318b817cf1274ba74976b07b34d35ef439b3eb948f98645a1/filelock-3.32.0.tar.gz", hash = "sha256:7be2ad23a14607ccc71808e68fe30848aeace7058ace17852f68e2a68e310402", size = 213757, upload-time = "2026-07-21T13:17:42.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl", hash = "sha256:d396bea984af47333ef05e50eae7eff88c84256de6112aea0ec48a233c064fe3", size = 97732, upload-time = "2026-07-21T13:17:41.55Z" }, +] + +[[package]] +name = "findlibs" +version = "0.1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/21/235e81c0e29a5aa84e5374d469723d508de63692049e80654b1b56d1c57e/findlibs-0.1.3.tar.gz", hash = "sha256:49bbe509c8b439ecd9c0d021c301aa9db643a2e6ab4e189a40b505ee4a49db62", size = 11335, upload-time = "2026-07-14T10:52:47.795Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/13/63305a756cb6e9408828961d4ff8542f3625d7cfb62289b19016216a9fa2/findlibs-0.1.3-py3-none-any.whl", hash = "sha256:9c14f8506cdcd37e38369259f8cd9aa3c002d58cd7c2beff4852bd205495c555", size = 10714, upload-time = "2026-07-14T10:52:46.902Z" }, +] + +[[package]] +name = "fire" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "termcolor" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/00/f8d10588d2019d6d6452653def1ee807353b21983db48550318424b5ff18/fire-0.7.1.tar.gz", hash = "sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf", size = 88720, upload-time = "2025-08-16T20:20:24.175Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/4c/93d0f85318da65923e4b91c1c2ff03d8a458cbefebe3bc612a6693c7906d/fire-0.7.1-py3-none-any.whl", hash = "sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882", size = 115945, upload-time = "2025-08-16T20:20:22.87Z" }, +] + +[[package]] +name = "flexcache" +version = "0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/b0/8a21e330561c65653d010ef112bf38f60890051d244ede197ddaa08e50c1/flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656", size = 15816, upload-time = "2024-03-09T03:21:07.555Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/cd/c883e1a7c447479d6e13985565080e3fea88ab5a107c21684c813dba1875/flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32", size = 13263, upload-time = "2024-03-09T03:21:05.635Z" }, +] + +[[package]] +name = "flexparser" +version = "0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/99/b4de7e39e8eaf8207ba1a8fa2241dd98b2ba72ae6e16960d8351736d8702/flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2", size = 31799, upload-time = "2024-11-07T02:00:56.249Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/5e/3be305568fe5f34448807976dc82fc151d76c3e0e03958f34770286278c1/flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846", size = 27625, upload-time = "2024-11-07T02:00:54.523Z" }, +] + +[[package]] +name = "frozendict" +version = "2.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082, upload-time = "2025-11-11T22:40:14.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264, upload-time = "2025-11-11T22:40:12.836Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/78/f34251dadb8f3921264a1d9b8946f5e542014ee2614b285261b4e40e6775/fsspec-2026.7.0.tar.gz", hash = "sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88", size = 317040, upload-time = "2026-07-28T16:34:51.052Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/3c/6a2bf344106328fd04963664a60b9bb6496fc25df8e962fcdc1367285fb9/fsspec-2026.7.0-py3-none-any.whl", hash = "sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279", size = 206583, upload-time = "2026-07-28T16:34:49.538Z" }, +] + +[[package]] +name = "humanize" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/ea/13a1ef3c12d12662905801495283530251918b70d62d368f1d2e0272c70d/humanize-4.16.0.tar.gz", hash = "sha256:7dc2244a2f84a4bfb1d36c37bac80cd78e35cdc5c119206d87b018e1445f3a3f", size = 89515, upload-time = "2026-06-30T16:17:29.859Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/aa/0b7365d30fed43e7a3449aba1fe20a0a7174d9cf13e282af4e69ac825441/humanize-4.16.0-py3-none-any.whl", hash = "sha256:353eb2f34c09d098b2880eee8bef21832eae6d174f48c5762fff7e5fcb74d01d", size = 137209, upload-time = "2026-06-30T16:17:28.36Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/01/15bb152d77b21318514a96f43af312635eb2500c96b55398d020c93d86ea/importlib_metadata-9.0.0.tar.gz", hash = "sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc", size = 56405, upload-time = "2026-03-20T06:42:56.999Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/3d/2d244233ac4f76e38533cfcb2991c9eb4c7bf688ae0a036d30725b8faafe/importlib_metadata-9.0.0-py3-none-any.whl", hash = "sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7", size = 27789, upload-time = "2026-03-20T06:42:55.665Z" }, +] + +[[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, 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, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "ipython" +version = "9.15.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", marker = "sys_platform != 'cygwin' and sys_platform != 'emscripten'" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/59/165d3b4d75cc34add3122c4417ecb229085140ac573103c223cd01dde96f/ipython-9.15.0.tar.gz", hash = "sha256:da2819ce2aa83135257df830660b1176d986c3d2876db24df01974fa955b2756", size = 4442580, upload-time = "2026-06-26T11:03:35.913Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/3a/948263ca3b9d65bb2b1b0c521b3a49fad5d59ada58724bd87d2bd5ff3f36/ipython-9.15.0-py3-none-any.whl", hash = "sha256:515ad9c3cdf0c932a5a9f6245419e8aba706b7bd03c3e1d3a1c83d9351d6aa6e", size = 630895, upload-time = "2026-06-26T11:03:33.809Z" }, +] + +[[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, 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, upload-time = "2025-01-17T11:24:33.271Z" }, +] + +[[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, 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, upload-time = "2026-05-01T23:38:43.919Z" }, +] + +[[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, 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, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[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, 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, upload-time = "2025-12-15T08:41:44.973Z" }, +] + +[[package]] +name = "jsonpickle" +version = "4.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/c0/dde9b4b42cc415b9579573f967f12efbb034e427a2a37e93ad5139891d87/jsonpickle-4.1.2.tar.gz", hash = "sha256:8afed18aa189fd81e2e833b426bb4af485594921f0b1d36c2001fc5637a2f210", size = 319120, upload-time = "2026-05-28T03:50:11.892Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a1/7b/fd3c7a09649aea9da1d3587aea624d8f9b29963dfd84a1bdb2aa93b36dac/jsonpickle-4.1.2-py3-none-any.whl", hash = "sha256:7ffe34426bc797684dbf1dc84185558bd864cd25b1ff5fb01b7405e392d0a937", size = 47203, upload-time = "2026-05-28T03:50:10.605Z" }, +] + +[[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, 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, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[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, 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, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "locket" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2f/83/97b29fe05cb6ae28d2dbd30b81e2e402a3eed5f460c26e9eaa5895ceacf5/locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632", size = 4350, upload-time = "2022-04-20T22:04:44.312Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3", size = 4398, upload-time = "2022-04-20T22:04:42.23Z" }, +] + +[[package]] +name = "lru-dict" +version = "1.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/0a/dec86efe38b350314c49a8d39ef01ba7cf8bbbef1d177646320eedea7159/lru_dict-1.4.1.tar.gz", hash = "sha256:cc518ff2d38cc7a8ab56f9a6ae557f91e2e1524b57ed8e598e97f45a2bd708fc", size = 13439, upload-time = "2025-11-02T10:02:13.548Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/ff/1d02bc444174f07d3ce747568989969c97dc77d0513f4c3b8b6224cb976f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc74c49cf1c26d6c28d8f6988cf0354696ca38a4f6012fa63055d2800791784b", size = 16760, upload-time = "2025-11-02T10:01:06.492Z" }, + { url = "https://files.pythonhosted.org/packages/0b/d8/e2e970272ea5fe7ba6349a5e7d0bb0fd814f5d1b88a53bc72b8c2a5e034f/lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0158db85dfb2cd2fd2ddaa47709bdb073f814e0a8a149051b70b07e59ac83231", size = 11249, upload-time = "2025-11-02T10:01:07.261Z" }, + { url = "https://files.pythonhosted.org/packages/a5/26/860b5e60f339f8038118028388926224c8b70779e8243d68772e0e0d0ab3/lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8ac5cfd56e036bd8d7199626147044485fa64a163a5bde96bfa5a1c7fea2273", size = 11728, upload-time = "2025-11-02T10:01:08.185Z" }, + { url = "https://files.pythonhosted.org/packages/61/55/fc8f71953fd343ede33810b0a000b4130e03635ae09b28569e45735ded2f/lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2eb2058cb7b329b4b72baee4cd1bb322af1feec73de79e68edb35d333c90b698", size = 30795, upload-time = "2025-11-02T10:01:08.862Z" }, + { url = "https://files.pythonhosted.org/packages/4c/26/ad549550e6a236818a91434570d38d7a93824b0410d3db1c845a53238e1f/lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffbb6f3c1e906e92d9129c14a88d81358be1e0b60195c1729b215a52e9670de", size = 31807, upload-time = "2025-11-02T10:01:09.581Z" }, + { url = "https://files.pythonhosted.org/packages/7c/39/72dae9ac0e95a8576a45e3bd62a6fc3e7dbb116794efa1337c7b450d4836/lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:11b289d78a48a086846e46d2275707d33523f5d543475336c29c56fd5d0e65dc", size = 33437, upload-time = "2025-11-02T10:01:10.676Z" }, + { url = "https://files.pythonhosted.org/packages/a8/46/221479834703a5397fa32f07212ace38f104a31ad1af8a921cf25e053677/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3fe10c1f45712e191eecb2a69604d566c64ddfe01136fd467c890ed558c3ad40", size = 31168, upload-time = "2025-11-02T10:01:11.47Z" }, + { url = "https://files.pythonhosted.org/packages/6e/13/98d36e2522fda7f6625c15332562f81f1465161a5ae021d9b3b408f8c427/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e04820e3473bd7f55440f24c946ca4335e392d5e3e0e1e948020e94cd1954372", size = 32454, upload-time = "2025-11-02T10:01:12.522Z" }, + { url = "https://files.pythonhosted.org/packages/49/18/345ff2a98d27cddae40c84cf0466fcc329f3965cd21322bb561a94e4d332/lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edc004c88911a8f9715e716116d2520c13db89afd6c37cc0f28042ba10635163", size = 30574, upload-time = "2025-11-02T10:01:13.293Z" }, + { url = "https://files.pythonhosted.org/packages/d7/92/dfea71402a7ca46332bcb854827ee68bbc9be205e2558c3a40293eca9782/lru_dict-1.4.1-cp311-cp311-win32.whl", hash = "sha256:b0b5360264b37676c405ea0a560744d7dcb2d47adff1e7837113c15fabcc7a71", size = 13031, upload-time = "2025-11-02T10:01:13.96Z" }, + { url = "https://files.pythonhosted.org/packages/3a/7b/4c7d566d77ec3ad9128f07407494c2aec57909f8dd59f0c9910bd4c05840/lru_dict-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:bb4b37daad9fe4e796c462f4876cf34e52564630902bdf59a271bc482b48a361", size = 14007, upload-time = "2025-11-02T10:01:14.857Z" }, + { url = "https://files.pythonhosted.org/packages/4f/a8/89e4c26e0e751321b41b0a3007384f97d9eae7a863c49af1c68c43005ca3/lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7fa342c6e6bc811ee6a17eb569d37b149340d5aa5a637a53438e316a95783838", size = 16683, upload-time = "2025-11-02T10:01:15.891Z" }, + { url = "https://files.pythonhosted.org/packages/f1/34/b3c6fdd120af68b6eeb524d0de3293ff27918ec57f45eed6bef1789fd085/lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd86bd202a7c1585d9dc7e5b0c3d52cf76dc56b261b4bbecfeefbbae31a5c97d", size = 11216, upload-time = "2025-11-02T10:01:16.867Z" }, + { url = "https://files.pythonhosted.org/packages/e9/7e/280267ae23f1ec1074ddaab787c5e041e090220e8e37828d51ff4e681dfd/lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4617554f3e42a8f520c8494842c23b98f5b7f4d5e0410e91a4c3ad0ea5f7e094", size = 11687, upload-time = "2025-11-02T10:01:17.485Z" }, + { url = "https://files.pythonhosted.org/packages/ca/18/fec42416ceff98ae2760067ec72b0b9fc02840e729bbc18059c6a02cb01f/lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:40927a6a4284d437047f547e652b15f6f0f40210deb6b9e5b77e556ff0faea0f", size = 31960, upload-time = "2025-11-02T10:01:18.158Z" }, + { url = "https://files.pythonhosted.org/packages/c2/ef/38e7ee1a5d32b9b1629d045fa5a495375383aacfb2945f4d9535b9af9630/lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2c07ecb6d42494e45d00c2541e6b0ae7659fc3cf89681521ba94b15c682d4fe", size = 32882, upload-time = "2025-11-02T10:01:18.841Z" }, + { url = "https://files.pythonhosted.org/packages/72/82/d56653ca144c291ab37bea5f23c5078ffbe64f7f5b466f91d400590b9106/lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85b28aa2de7c5f1f6c68221857accd084438df98edbd4f57595795734225770c", size = 34268, upload-time = "2025-11-02T10:01:19.564Z" }, + { url = "https://files.pythonhosted.org/packages/94/ae/382651533d60f0b598757efda56dc87cad5ac311fba8e61f86fb916bf236/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbbbb4b51e2529ccf7ee8a3c3b834052dbd54871a216cfd229dd2b1194ff293a", size = 32156, upload-time = "2025-11-02T10:01:20.22Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d1/d9df7e9272ccbc96f04c477dfb9abb91fa8fabde86b7fa190cb7b3c7a024/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e47040421a13de8bc6404557b3700c33f1f2683cbcce22fe5cacec4c938ce54b", size = 33395, upload-time = "2025-11-02T10:01:20.901Z" }, + { url = "https://files.pythonhosted.org/packages/e9/6e/dafe0f5943a7b3ab24d3429032ff85873acd626087934b8161b55340c13a/lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:451f7249866cb9564bb40d73bec7ac865574dafd0a4cc91627bbf35be7e99291", size = 31591, upload-time = "2025-11-02T10:01:21.606Z" }, + { url = "https://files.pythonhosted.org/packages/a6/4d/9dd35444592bfb6805548e15971cfce821400966a51130b78dc021ee8f03/lru_dict-1.4.1-cp312-cp312-win32.whl", hash = "sha256:e8996f3f94870ecb236c55d280839390edae7f201858fee770267eac27b8b47d", size = 13119, upload-time = "2025-11-02T10:01:22.61Z" }, + { url = "https://files.pythonhosted.org/packages/8d/82/7e72e30d6c15d65466b3baca87cce15e20848ba6a488868aa54e901141a6/lru_dict-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:d90774db1b60c0d5c829cfa5d7fda6db96ed1519296f626575598f9f170cca37", size = 14109, upload-time = "2025-11-02T10:01:23.322Z" }, + { url = "https://files.pythonhosted.org/packages/85/95/ee171a68ae381ab988c50e3b7b136b1c598f5f683ba4a1e10c51e2480408/lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2a5644bb1db0514abdad5e2f3d8f1beb6f7560c8cceb62079c40a4269de34b3c", size = 12248, upload-time = "2025-11-02T10:01:24.291Z" }, + { url = "https://files.pythonhosted.org/packages/a1/82/8de8e8fd96c44d46891415834ceb9f51c552840bda2d118394aca5e3153a/lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:4209864be09ec20f6059fef8544697eb3d3729d63a983bf66457054bf3e40601", size = 12243, upload-time = "2025-11-02T10:01:25.254Z" }, + { url = "https://files.pythonhosted.org/packages/53/97/251cfb357c547a8fd06c2bc40db8a7f7eed7dbacef30d8d7e543522360e1/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8fef8dd72484b4280799c502c116acfdfcf0dedf3508bc9d0d19e684a6a23267", size = 10938, upload-time = "2025-11-02T10:01:25.89Z" }, + { url = "https://files.pythonhosted.org/packages/58/14/602791d219bc87197ae80f5fa0f77ca0af8e83e9a06c7cdb89db5575839e/lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d64ddbe4c426fdc4cfc1abaea71d587d439397386a7b35d588f4fd64b695a83d", size = 11261, upload-time = "2025-11-02T10:01:26.879Z" }, + { url = "https://files.pythonhosted.org/packages/10/5d/a30a6fad150f20f084de8e243882a0488ad4929db41a2c8ce9be6cf56563/lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:000ba9a2ab4dd1ad2d91764a6d5cce75a59de51534cdda478d1ddaa3cd8d5c48", size = 10801, upload-time = "2025-11-02T10:01:27.553Z" }, + { url = "https://files.pythonhosted.org/packages/64/4d/cee327e024d42972c598b7e0cd5063a1b1d7451efba31f7de7b6ca91e7d0/lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ffad2758ce21d8fd6f0ae2628b31330732db8429a4b5994d2e107bed0ee11e68", size = 16688, upload-time = "2025-11-02T10:01:28.17Z" }, + { url = "https://files.pythonhosted.org/packages/58/c8/2f86a1e448c5257b31424b96bf1385e7f96ec7841c2376db02811bbd395f/lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1671e8d92fe35dfb38d3505a56338792d3e225032f8e94888b6e95b323120380", size = 11214, upload-time = "2025-11-02T10:01:28.888Z" }, + { url = "https://files.pythonhosted.org/packages/06/41/507c615cffaba67c35affd77dec25d3183bb87f404b41c8bb2b3053481ac/lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d5f01ada0cf0c1aa2bdc684e5ac0f6548be7eccc3ce8b4c0361db8445f867f04", size = 11689, upload-time = "2025-11-02T10:01:29.508Z" }, + { url = "https://files.pythonhosted.org/packages/4e/c1/35aa1359f80174016b389f8be5fd48c4a5af0a04a73afb4906e5d4279f4a/lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:74204239e30b8ec7976257c5b64565d7e3e8aea0cad0dd50a9b99e171aaf3898", size = 32034, upload-time = "2025-11-02T10:01:30.164Z" }, + { url = "https://files.pythonhosted.org/packages/c2/93/46301015bddd4552a1b76982ef788a7fb2a886efff83ad2c178cc7e68349/lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7da0e451faa4d6dcae21c0f2527c540000b2f23ed8326a0bc1d870130fd12b1", size = 32919, upload-time = "2025-11-02T10:01:30.971Z" }, + { url = "https://files.pythonhosted.org/packages/e6/cb/6d67145619d8ec3bba15fe145ff702ecf44991e33345d38c763501c1608a/lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:071468a716768a9afca64659c390c1abb6d937b1897e07a0b70383f75637fce0", size = 34334, upload-time = "2025-11-02T10:01:31.663Z" }, + { url = "https://files.pythonhosted.org/packages/a5/44/50daaec6793ec2042079ed6a8b6a687b4be51b270b1d8ec5efd280116493/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77d209bcd396eb236c197bf4c95fab6848c61e0c1a5031cdde7f5c787e209f4", size = 32211, upload-time = "2025-11-02T10:01:32.468Z" }, + { url = "https://files.pythonhosted.org/packages/bd/53/355397949215e6b77b6771b973ee1dbc21fdd9f955925e47dce50d9d4727/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b21688fd7ece56d04c0c13b42fd9f904d46fc9ff21e3de87d98f3f5a14c67f74", size = 33461, upload-time = "2025-11-02T10:01:33.2Z" }, + { url = "https://files.pythonhosted.org/packages/ff/fa/d660fa63144f38a0fd5b437a140517e3cff482d955ef6b9b4cf7651b9d85/lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:989ef7352b347c82e5d5047f3b7ddf34b5a938e3f7b08775cacc9f28e97dd2a8", size = 31651, upload-time = "2025-11-02T10:01:33.874Z" }, + { url = "https://files.pythonhosted.org/packages/2e/77/0fae8d0702f7546f436efe06a684b301aad5c8a167bb2df6e42b0f821de5/lru_dict-1.4.1-cp313-cp313-win32.whl", hash = "sha256:a36e6e95b5d474ef90d04a5e3ad81ca362b473ec9534ed964222f3c0444138b8", size = 13120, upload-time = "2025-11-02T10:01:34.595Z" }, + { url = "https://files.pythonhosted.org/packages/4a/20/56a3f0d74c8fe32c01d3978387f66c9fb180c7f15bfd9fcecaa01b4e7736/lru_dict-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e73a1ec2d0f476d666ce7c91464b22854086951b319544d1850c508f5ce381f", size = 14112, upload-time = "2025-11-02T10:01:35.268Z" }, + { url = "https://files.pythonhosted.org/packages/98/02/8e04a8d744b466d4153502e2d92b453c2e5a549d49bf7fabfdca1621828a/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b770c7db258625e57b6ea8e2e0503ba0fbbdcde374baacf9adb256eb9c5adfa", size = 11119, upload-time = "2025-11-02T10:01:36.239Z" }, + { url = "https://files.pythonhosted.org/packages/50/f8/ee96f30127ff47c29966603f040e0485700fe0ca0e7d7b1ecbc9bf999eea/lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:45d4dc338237cedcbacedab1afd9707b8f9867d8b601ec04e0395ec73f57405c", size = 11435, upload-time = "2025-11-02T10:01:36.857Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5a/897b33ba1974b6487848cafa5de7e93a7c4f5d9d3f43319ee010f6882830/lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:5b31e9b6636f8945ad69c630c1891d810d62a91d99e792ef0b9ca865b6c26745", size = 10988, upload-time = "2025-11-02T10:01:37.531Z" }, + { url = "https://files.pythonhosted.org/packages/19/8e/b87d0f2bfcad0169afc00e23e014bad9af252206ec2cbc6079f12bece58e/lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f9335d46c83882a1b5deffed8098a2dd9ad66d2bd6263f416fc4c73f63e26904", size = 16733, upload-time = "2025-11-02T10:01:38.194Z" }, + { url = "https://files.pythonhosted.org/packages/ab/19/d2384266864b1e5b1cc20527ae468550d3b23a71636371b40e4663276294/lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:17844b4f8dd996144d53380395d73832e2508159ad49ed4fbcb62f1787a5feaf", size = 11222, upload-time = "2025-11-02T10:01:39.093Z" }, + { url = "https://files.pythonhosted.org/packages/66/8a/94dec42ae6b5c8bdc53a86867924fa22634516434f129dca187ccc0853b8/lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2b569c7813adb753b7b631097c34e6dbc194cb1814f22299c2d2a94894779877", size = 11733, upload-time = "2025-11-02T10:01:39.739Z" }, + { url = "https://files.pythonhosted.org/packages/3f/19/0b6de1db804cf094e201c5541d58e6a96359eb5beed048fa64d0589b6520/lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:33cf1eb368d3989b8f00945937cfbfc2095d8ad2b1d2274ce1bde0af6f6d1e66", size = 32251, upload-time = "2025-11-02T10:01:40.421Z" }, + { url = "https://files.pythonhosted.org/packages/97/38/89d9425dde436b9bd894234171988289b259aeeab5965bd2c21d5104cb41/lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22d5879ec5d5955f9dde105997bdf7ec9e0522bf99612a80b55b09f356a08368", size = 33405, upload-time = "2025-11-02T10:01:41.917Z" }, + { url = "https://files.pythonhosted.org/packages/0e/24/f1a189399ee107a64f955c9d6c84d3b0aee9b64b31fc5684b1eaeb3a6fc0/lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2084363e4488aa5b4f8b26bd3cc148d70a15be92e3d347621a5b830b2b1e0a82", size = 35135, upload-time = "2025-11-02T10:01:42.935Z" }, + { url = "https://files.pythonhosted.org/packages/f8/57/58e9dcf0853d639e2995e5d9f84649ff8d6792a04a418628672a130137f4/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8198ab8ad7cc81b86340243ddd5cca882ead87daed0c9fa6cce377a10a7f2e47", size = 32620, upload-time = "2025-11-02T10:01:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/a9/bb/664922f0cf076b1e3c2e43e8258582d507b07c19bd441a72dd5547a483e9/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1f4ae6967d5873e684ce8b986e2e43985d0a1be735b09584737ad5634ff48f3", size = 34077, upload-time = "2025-11-02T10:01:44.694Z" }, + { url = "https://files.pythonhosted.org/packages/58/38/b7a6fa85b150232cada26a50c89dc4bcf9acd6ada00e987b074c3b4e57f2/lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a9bb130b5eaddd6453ca3dc38ce4a75f743512ad135b6f3994999dde0680bd79", size = 31905, upload-time = "2025-11-02T10:01:45.668Z" }, + { url = "https://files.pythonhosted.org/packages/86/7d/9c86393946d621f4aec852d543df4023241d85106e9e1e2a0e4057861f71/lru_dict-1.4.1-cp314-cp314-win32.whl", hash = "sha256:5534c69a52add5757714456d08ce3831d36b86c98972394ba900493bb0bd97f8", size = 13435, upload-time = "2025-11-02T10:01:46.397Z" }, + { url = "https://files.pythonhosted.org/packages/20/3f/b017cbeea55a8a1d18037840a8a9c9cdae29554e9985b55d4e8694305035/lru_dict-1.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:96fd677b6d912229f2d02ba61a5a1210176963c4770c1bb765b8da937cec3834", size = 14423, upload-time = "2025-11-02T10:01:47.473Z" }, + { url = "https://files.pythonhosted.org/packages/aa/73/13132af7a5155edde66979b53eb509465304e6e5a2b00769246448479c73/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6699bfebbf11dd9ff1387be7996fac6d1009fe6a6f48091ef6e069e6f19c7bce", size = 17184, upload-time = "2025-11-02T10:01:48.161Z" }, + { url = "https://files.pythonhosted.org/packages/ef/82/094985beb3e49461bf65a3c40df8de2018b8484e4ef129295090460ca5d9/lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a276f8f6f43861c3f05986824741d00e3133a973c3396598375310129535382d", size = 11459, upload-time = "2025-11-02T10:01:48.823Z" }, + { url = "https://files.pythonhosted.org/packages/14/29/836abc49f8c2b6c2efccd2ac2b2c0ad3e55b7d75a05a20cc061f17871e39/lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:090c7b6a3d54fa7f3d69ba4802abe2f33c9583b16b33f52bcb521c701f7ea46c", size = 11938, upload-time = "2025-11-02T10:01:49.448Z" }, + { url = "https://files.pythonhosted.org/packages/c2/83/1bb4e8fbc0b753fea825564d9d96180813a71715d46a9b6bb30a6dea4ce0/lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b21d06dec64fb1952385262d9fcefaec147921dc0b55210007091a79da440d93", size = 36389, upload-time = "2025-11-02T10:01:50.49Z" }, + { url = "https://files.pythonhosted.org/packages/54/f2/7df3b6d0dbc66f3be9aa6261750967cdc5619c89a563420c52200d2dd547/lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9613908a38cf8aa47f6c138ba031a8ac4ed38460299e84a2b07dba7b3b45aae", size = 38706, upload-time = "2025-11-02T10:01:51.197Z" }, + { url = "https://files.pythonhosted.org/packages/97/5f/e3ba3eeb9b864a09b92e24fbf179aef4ef48588e763a9d8d2bc10bd2c6f8/lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7558302ce8bbfcd29f08e695e07bf7a0d799c2979636d6a6a0b4e207f840969f", size = 38892, upload-time = "2025-11-02T10:01:51.899Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e3/12e0888aab0bf3ab9ce35e9849f239994a0feff6fe49380859bf57124a17/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3910396142322fb2718546115bb2a56f50ebc9144b5140327053cca084e0d375", size = 37254, upload-time = "2025-11-02T10:01:52.587Z" }, + { url = "https://files.pythonhosted.org/packages/cc/dc/06cd981718d039eb07a9c03263094aca6269721c470f765a292b24381a20/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f3f4fad5c4a9458954b275de6a6e31c67a26fbef7037c6a7354e22523a77db26", size = 37422, upload-time = "2025-11-02T10:01:53.271Z" }, + { url = "https://files.pythonhosted.org/packages/e8/82/ea88e618f39d78ff3c15b71f01a0b1a6c6ac2034ce5c6428ae41b1c30ea5/lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:85fc29363e2d3ba0a5f87b5e17f54b1078aea6d24c6dfc792725854b9d0f8d17", size = 35909, upload-time = "2025-11-02T10:01:54.356Z" }, + { url = "https://files.pythonhosted.org/packages/89/36/1dd91c602f623839cec24d6c77fa3fd1a8878bf2d716871197cd3bf084dc/lru_dict-1.4.1-cp314-cp314t-win32.whl", hash = "sha256:b3853518dfa50f28af0d6e2dcf8bb8b0a1687c5f4eb913c0b35b0da5c6d276ce", size = 13816, upload-time = "2025-11-02T10:01:55.417Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a3/113410f7b2e61e9d6f13f1f17c584dbd08b5796e65d772ecd5b063fab3af/lru_dict-1.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ff3af42922205620fdc920dcdf580c4c16b32c84a537a03b04b523e5c641a8a9", size = 15204, upload-time = "2025-11-02T10:01:56.06Z" }, + { url = "https://files.pythonhosted.org/packages/8e/47/08c61cad038706b3a89b8c7587ec74ed9731c1e536329745cccb6c840916/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9219f13e4101c064f70e1815d7c51f9be9e053983e74dfb7bcfdf92f5fcbb0e0", size = 10384, upload-time = "2025-11-02T10:02:09.656Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a1/022c4d7c68c076370231488c97cf7451131fb9ca0d60d1b2785e7baa1f5b/lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7e1ac7fb6e91e4d3212e153f9e2d98d163a4439b9bf9df247c22519262c26fe", size = 10822, upload-time = "2025-11-02T10:02:10.609Z" }, + { url = "https://files.pythonhosted.org/packages/65/b4/4c0a0877a77fececa9f58d804569e2aac1bfbe588e3a70e79647b5d8f7d4/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23424321b761c43f3021a596565f8205ecec0e175822e7a5d9b2a175578aa7de", size = 12968, upload-time = "2025-11-02T10:02:11.405Z" }, + { url = "https://files.pythonhosted.org/packages/22/06/d7e393d07dc31e656330d5a058f34e972bf590e7dc882922b426f3aec4a0/lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:804ee76f98afc3d50e9a2e9c835a6820877aa6391f2add520a57f86b3f55ec3a", size = 13904, upload-time = "2025-11-02T10:02:12.144Z" }, + { url = "https://files.pythonhosted.org/packages/e8/1e/0eee8bcc16bf01b265ac83e4b870596e2f3bcc40d88aa7ec25407180fe44/lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3be24e24c8998302ea1c28f997505fa6843f507aad3c7d5c3a82cc01c5c11be4", size = 14062, upload-time = "2025-11-02T10:02:12.878Z" }, +] + +[[package]] +name = "markdown" +version = "3.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[[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, 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, 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" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" }, +] + +[[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, 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, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "mir-python" +version = "1.29.1.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eckit" }, + { name = "findlibs" }, + { name = "mirlib" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "pyyaml" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/45/b17c9f6add1c6aabcd58e983581a88bb833338fdb9ad601ed650ab092fa5/mir_python-1.29.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1bf2bde0dc1453ca67d4b343302a2159596548cb6f65d31f564c6e76f061e2ce", size = 125800, upload-time = "2026-07-17T13:27:36.165Z" }, + { url = "https://files.pythonhosted.org/packages/84/2e/edf17da43a670357b4ff4e7ac343a6c0ffca3057e1d5a0ae03bc453ae1fc/mir_python-1.29.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:5090887138be393bc721abf293c9177a1f3ade545efe1684d96061a343008531", size = 128746, upload-time = "2026-07-17T13:23:57.466Z" }, + { url = "https://files.pythonhosted.org/packages/94/70/47f19b88ce05791c39ad662389ccd80833ba8df435bd830f44b183277dbd/mir_python-1.29.1.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:790b094d065f6b62a2862b37d1c51dbec6664a3b3cda853dea577ff5d80d1082", size = 118685, upload-time = "2026-07-17T13:16:56.674Z" }, + { url = "https://files.pythonhosted.org/packages/ac/9a/696880f0618f7725c4daedc84bd6f60bb8ccf881ad4d4d83bf49e22dff82/mir_python-1.29.1.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:0353782e561b00fa65f38b3f8a8a5958790f6e92ba6d12f3378d06e80ef1252d", size = 121404, upload-time = "2026-07-17T13:33:02.516Z" }, + { url = "https://files.pythonhosted.org/packages/9f/0c/d60e89bec16900b56b18b7dad9b5c62fe01059e8c0f95e2195da475779dc/mir_python-1.29.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:2d81051c31f2e79584e2e75ff7003fb66afee93ace90ee6fc3fc89c8912d62be", size = 126303, upload-time = "2026-07-17T13:59:38.649Z" }, + { url = "https://files.pythonhosted.org/packages/2d/84/eac68651147db28589a42e2319cfa7cbfcb18b5ea2f3194917f8d0b224f1/mir_python-1.29.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:2296b588a6956ac5bd3b3c9343e15ba644edfc89489c55e1afe6649a3dcc2fca", size = 130964, upload-time = "2026-07-17T13:47:01.376Z" }, + { url = "https://files.pythonhosted.org/packages/90/59/4cfb13022308b89c6293f47be9921f46f24e43c4e7a49c91a2b796de5785/mir_python-1.29.1.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f3f0a898a303817fd8f9d40e7c7d973c495ce7914e05ed56e7e0f07df405ebf6", size = 121514, upload-time = "2026-07-17T13:17:15.662Z" }, + { url = "https://files.pythonhosted.org/packages/88/d4/3a9664e7c29612b3142f28985d8acd2a79665e5c64fa3e030abbd506f2f7/mir_python-1.29.1.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2874f5b357ee9a74fee1fa993620be802995e16420a0bfef67710d877827e730", size = 124817, upload-time = "2026-07-17T13:32:09.599Z" }, + { url = "https://files.pythonhosted.org/packages/25/8a/0c11e67519007341f8ec099345dff27eb9fdfc4161ccf1f9955b80c5f6a7/mir_python-1.29.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:67937d7ea6b6e55652b83574e6bd047ba0f53fc44f6a6680b3e2bc8b89e86e46", size = 125709, upload-time = "2026-07-17T13:16:01.509Z" }, + { url = "https://files.pythonhosted.org/packages/9a/87/1a938c4ba4a1476e1aca196b91f079767ab7fde7f2c4701b7b7c1bccc259/mir_python-1.29.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b3efb75fc23ce63d104e63d5c04fa1cd46be050b07df5c4fa00669a4771a0979", size = 130180, upload-time = "2026-07-17T13:43:52.033Z" }, + { url = "https://files.pythonhosted.org/packages/e8/41/c55f505779dacf9f2d513346b946172976de105e4f9f014596a7fa2a7685/mir_python-1.29.1.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c5276f17e1b59c2209f2e5f7962cfd8e113113262192ec88fecd962aa4764d18", size = 121406, upload-time = "2026-07-17T13:17:10.847Z" }, + { url = "https://files.pythonhosted.org/packages/16/b5/a3dfde9299397abddaa3e3abcd9827f43da0ce67f5cab5334fc7e0c90339/mir_python-1.29.1.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:78980944a6885a4a55e94ecc9e0ff726380a699abb8f46e4eaaaf2aad0ae49b4", size = 124700, upload-time = "2026-07-17T13:29:26.096Z" }, + { url = "https://files.pythonhosted.org/packages/ad/d3/e5d995af94ec1db6e8e831eb778974cfcad52fcdfa897b216120285a1ec7/mir_python-1.29.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:5d789897a0a454e399e5e81e638e5fb4b5d0a43fed29fe1b990d812144c057d9", size = 126859, upload-time = "2026-07-17T13:59:11.115Z" }, + { url = "https://files.pythonhosted.org/packages/db/ea/4b7d22aaa3772d80af8ccdab90ffb5ff187f0763a52400f24a763f2d0dbf/mir_python-1.29.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:6622846e21a8f797ba64889fc3658dabf40d254f97f9e54a47d4a91addecbcf5", size = 130548, upload-time = "2026-07-17T13:22:08.106Z" }, + { url = "https://files.pythonhosted.org/packages/36/94/14a8b521f3e639351fd00a35467b70e0798ce9f6607d301a41b8e12f6e23/mir_python-1.29.1.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:33d3d38fe9d68eb31d15c606160bf6c6719c2f48795ad20469e43a0a6987d830", size = 122200, upload-time = "2026-07-17T13:17:41.447Z" }, + { url = "https://files.pythonhosted.org/packages/45/92/e4645d6f1e9a965c64fbfe6b2bc6fb96efa8ece0216c7ea3a023fafe1c62/mir_python-1.29.1.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:864452e086b01a55a0b671da10c8ac68fef591948b215197bdffb87ac7d997f6", size = 124512, upload-time = "2026-07-17T13:30:12.727Z" }, +] + +[[package]] +name = "mirlib" +version = "1.29.1.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "atlaslib-ecmwf" }, + { name = "eccodeslib" }, + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/cb/649270717c07797bf93c6f7233719d1a178def42ff089e9cffd67653ee5d/mirlib-1.29.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:c65079c7be3c37b85c28c76434b96aaa98f9bd500c4fdbc234b0f9d815a6b581", size = 1843649, upload-time = "2026-07-17T13:27:38.637Z" }, + { url = "https://files.pythonhosted.org/packages/e3/99/01bc5fafa430598831afc31bb1727f514912862fcf2507e0ab3f90d51396/mirlib-1.29.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:69141f8a693964332d4994ec34e5de1747e64d2b5522899bf82ec140380e4b68", size = 1939878, upload-time = "2026-07-17T13:24:00.065Z" }, + { url = "https://files.pythonhosted.org/packages/62/f8/f7b7c024896bc9274609b3d0f900c137ce1740efe9821508925a13815bec/mirlib-1.29.1.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:1aac3bee63787042710da6c7a6480f6f4ec823062d0465a930299d15f9591ff1", size = 2450640, upload-time = "2026-07-17T13:16:54.762Z" }, + { url = "https://files.pythonhosted.org/packages/60/12/72dc2cb2f1d1fea279f0e0142fd798244234aff93fbd0184bd9d904e7e02/mirlib-1.29.1.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:279ed95888a89a67a9c8c3017a4fc61a44901f5b76185383fa47c2ee32ec9b74", size = 2425118, upload-time = "2026-07-17T13:32:59.533Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fa/758a67ef82a4f56a5821bb8482304638a69319421fb6ba201af44287a129/mirlib-1.29.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:3fc863b9cb6c4d3fd8abda065c69cba430142a014d2d3d1e1e91f85263b1c0d0", size = 1843650, upload-time = "2026-07-17T13:59:40.981Z" }, + { url = "https://files.pythonhosted.org/packages/83/02/91668531c58023cfa3fe49059b23db66114b035b1c3797cde66c5027b07d/mirlib-1.29.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:e935a4e39c515b99d3e5ab2ee051a8f386ed67b646ef774769883927b0a8d846", size = 1939875, upload-time = "2026-07-17T13:47:03.988Z" }, + { url = "https://files.pythonhosted.org/packages/96/04/5f7ddfe54cb4d22564c52f84a3845b2e3b5c00b776ab38bd9cd335956388/mirlib-1.29.1.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:034d9ec0ccd8a8a080faa04857e2a1328d9a8e3fb6569e08cd2bbbefa4c42898", size = 2450643, upload-time = "2026-07-17T13:17:13.761Z" }, + { url = "https://files.pythonhosted.org/packages/4c/d3/932b7ec146768300c4988262b879cd05df8290e455ee374dbe9feb39d218/mirlib-1.29.1.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a2b43f3930223b4eb1815f3e3f83258d6e3c39b4f8a6861f4cdde82165c937cd", size = 2425115, upload-time = "2026-07-17T13:32:06.877Z" }, + { url = "https://files.pythonhosted.org/packages/3a/f3/d5ccd589dadea6e195d3b443e58663dc56077cc53cc351880735d45f8c91/mirlib-1.29.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:8da65c1d57d0e19515c3d94669391e86eea939426086e1517b112324da7c6db7", size = 1843653, upload-time = "2026-07-17T13:16:04.221Z" }, + { url = "https://files.pythonhosted.org/packages/36/11/fd86dcb06dc2e5fbcff0c7ef5c6736b488055c196f6622193401d5864531/mirlib-1.29.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:e7f6cb1d8f5f9ffe5538878fbbdf9ae0cf98895145d7720f2aad8f7f83c811ca", size = 1939196, upload-time = "2026-07-17T13:43:54.618Z" }, + { url = "https://files.pythonhosted.org/packages/f5/86/8cad36c0e3a8ddf2e1019f8926a6ee3e30396525374a69866a9775109b08/mirlib-1.29.1.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c380bf036a17d3f6f3001831a3a031e6103b8ab2c774dc7b6690b4d58ee8f053", size = 2450643, upload-time = "2026-07-17T13:17:08.529Z" }, + { url = "https://files.pythonhosted.org/packages/c8/13/88ce4474729202753e0a056b857e3eac0665a7ea3241c196be28131c5c00/mirlib-1.29.1.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1d0a4d6971ad4dcbac7f1e2621a94cffc1b06cf8e2dd6636d08ddf069769f221", size = 2425116, upload-time = "2026-07-17T13:29:23.036Z" }, + { url = "https://files.pythonhosted.org/packages/07/5a/b64779e356b9bc1af7caa10c1094a644d5b1d339bd90e8623babf24f9acf/mirlib-1.29.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:b06507ad7ab1a93171049a507855ee651f71b2fac0937a75afabd71f3fbc0d72", size = 1843652, upload-time = "2026-07-17T13:59:13.577Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/9af899fa891da23a4012172902e06418ff83e018594d3a230fa6b34dff44/mirlib-1.29.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:bdb76653f8f3da8dfa099162f1674022304f48ddead525a9fd919cc74efd7a6b", size = 1939196, upload-time = "2026-07-17T13:22:10.814Z" }, + { url = "https://files.pythonhosted.org/packages/11/33/b004d969256e57677944329736a370c68206c07cbb1aff05133e70186955/mirlib-1.29.1.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:70d48cdb0a2d3e89d095fec8f6ed9de89cad21c087ae53d231d123febfda31b5", size = 2450644, upload-time = "2026-07-17T13:17:39.287Z" }, + { url = "https://files.pythonhosted.org/packages/ce/23/694345c717c046ffb23dcb6f3ca2f4a94749b804986d26ca1402a2ce1148/mirlib-1.29.1.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:df415d34ca8c933760ab3d54dea02ae68fab50ce4242b1d4f2f0b64fe57a36fd", size = 2425113, upload-time = "2026-07-17T13:30:09.66Z" }, +] + +[[package]] +name = "multiurl" +version = "0.3.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "requests" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d3/35/a08c568e63fda8cb1b7f3168409c026d2b407ab6d82da09cea078b01c2d7/multiurl-0.3.9.tar.gz", hash = "sha256:799b7998bfabd4e15d51ba09d08eb5d0716762655bae6e09db00a14c3bfaeae6", size = 20044, upload-time = "2026-06-18T07:43:38.756Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/f1/2374970b2ad0ab20e28a0cd12eec1c234567fef31064f0903396d55ae3f1/multiurl-0.3.9-py3-none-any.whl", hash = "sha256:5acedb53343bb47ff6188405dc33e10c1f1713591de8929a69b966d4d395d88e", size = 22610, upload-time = "2026-06-18T07:43:37.727Z" }, +] + +[[package]] +name = "narwhals" +version = "2.24.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/1d/58946e5aab18393e793bd4add6985b95d0e01c3a2d832f38f54468b10dcd/narwhals-2.24.0.tar.gz", hash = "sha256:b5c0f684ccd9d7475b564111e319a4964abcf2baf79d3cf6b1003d06ac9b828d", size = 661143, upload-time = "2026-07-13T10:49:19.086Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/85/a5bfaebfd305ac18b57b0854d74e37e586809061a91fda62f0bd50c8518e/narwhals-2.24.0-py3-none-any.whl", hash = "sha256:42fdedf44e5b2ca7505630d45b4ac3058f38d8485cba9fe1652ca23152df7489", size = 461030, upload-time = "2026-07-13T10:49:17.571Z" }, +] + +[[package]] +name = "netcdf4" +version = "1.7.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "cftime" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/b6/0370bb3af66a12098da06dc5843f3b349b7c83ccbdf7306e7afa6248b533/netcdf4-1.7.4.tar.gz", hash = "sha256:cdbfdc92d6f4d7192ca8506c9b3d4c1d9892969ff28d8e8e1fc97ca08bf12164", size = 838352, upload-time = "2026-01-05T02:27:38.593Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/de/38ed7e1956943d28e8ea74161e97c3a00fb98d6d08943b4fd21bae32c240/netcdf4-1.7.4-cp311-abi3-macosx_13_0_x86_64.whl", hash = "sha256:dec70e809cc65b04ebe95113ee9c85ba46a51c3a37c058d2b2b0cadc4d3052d8", size = 23427499, upload-time = "2026-01-05T02:27:06.568Z" }, + { url = "https://files.pythonhosted.org/packages/e5/70/2f73c133b71709c412bc81d8b721e28dc6237ba9d7dad861b7bfbb70408a/netcdf4-1.7.4-cp311-abi3-macosx_14_0_arm64.whl", hash = "sha256:75cf59100f0775bc4d6b9d4aca7cbabd12e2b8cf3b9a4fb16d810b92743a315a", size = 22847667, upload-time = "2026-01-05T02:27:09.421Z" }, + { url = "https://files.pythonhosted.org/packages/77/ce/43a3c0c41a6e2e940d87feea79d29aa88302211ac122604838f8a5a48de6/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddfc7e9d261125c74708119440c85ea288b5fee41db676d2ba1ce9be11f96932", size = 10274769, upload-time = "2026-01-05T21:31:19.243Z" }, + { url = "https://files.pythonhosted.org/packages/7b/7a/a8d32501bb95ecff342004a674720164f95ad616f269450b3bc13dc88ae3/netcdf4-1.7.4-cp311-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a72c9f58767779ec14cb7451c3b56bdd8fdc027a792fac2062b14e090c5617f3", size = 10123122, upload-time = "2026-01-05T21:31:22.773Z" }, + { url = "https://files.pythonhosted.org/packages/18/68/e89b4fa9242e59326c849c39ce0f49eb68499603c639405a8449900a4f15/netcdf4-1.7.4-cp311-abi3-win_amd64.whl", hash = "sha256:9476e1f23161ae5159cd1548c50c8a37922e77d76583e247133f256ef7b825fc", size = 21299637, upload-time = "2026-01-05T02:27:11.856Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fc/edd41a3607241027aa4533e7f18e0cd647e74dde10a63274c65350f59967/netcdf4-1.7.4-cp311-abi3-win_arm64.whl", hash = "sha256:876ad9d58f09c98741c066c726164c45a098a58fb90e5fac9e74de4bb8a793fd", size = 2386377, upload-time = "2026-01-05T02:27:13.808Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3e/1e83534ba68459bc5ae39df46fa71003984df58aabf31f7dcd6e22ecddb0/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56688c03444fffe0d0c7512cb45245e650389cd841c955b30e4552fa681c4cd9", size = 10519821, upload-time = "2026-01-05T02:27:15.413Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8c/a15d6fe97f81d6d5202b17838a9a298b5955b3e9971e20609195112829b5/netcdf4-1.7.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ecf471ba8a6ddb2200121949bedfa0095db228822f38227d5da680694a38358", size = 10371133, upload-time = "2026-01-05T02:27:17.224Z" }, + { url = "https://files.pythonhosted.org/packages/d8/2b/684b15dd4791f8be295b2f6fa97377bbc07a768478a63b7d3c4951712e36/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5841de0735e8e4875b367c668e81d334287858d64dd9f3e3e2261e808c84922", size = 10395635, upload-time = "2026-01-05T02:27:19.655Z" }, + { url = "https://files.pythonhosted.org/packages/37/dc/44d21524cf1b1c64254f92e22395a7a10f70c18f3a13a18ac9db258760f7/netcdf4-1.7.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86fac03a8c5b250d57866e7d98918a64742e4b0de1681c5c86bac5726bab8aee", size = 10237725, upload-time = "2026-01-05T02:27:22.298Z" }, + { url = "https://files.pythonhosted.org/packages/d4/9d/c3ddf54296ad8f18f02f77f23452bdb0971aece1b87e84bab9d734bf72cc/netcdf4-1.7.4-cp314-cp314t-macosx_13_0_x86_64.whl", hash = "sha256:ad083d260301b5add74b1669c75ab0df03bdf986decfcc092cb45eec2615b5f1", size = 23515258, upload-time = "2026-01-05T02:27:24.837Z" }, + { url = "https://files.pythonhosted.org/packages/dd/44/bc0346e995d436d03fab682b7fbd2a9adcf0db6a05790b8f24853bf08170/netcdf4-1.7.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f22014092cc9da3f056b0368e2e38c42afd5725c87ad4843eb2f467e16dd4f6", size = 22910171, upload-time = "2026-01-05T02:27:27.166Z" }, + { url = "https://files.pythonhosted.org/packages/30/6b/f9bc3f43c55e2dac72ee9f98d77860789bdd5d50c29adf164a6bdb303078/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224a15434c165a5e0225e5831f591edf62533044b1ce62fdfee815195bbd077d", size = 10567579, upload-time = "2026-01-05T02:27:29.382Z" }, + { url = "https://files.pythonhosted.org/packages/6d/d5/e7685c66b7f011c73cd746127f986358a26c642a4e4a1aa5ab51481b6586/netcdf4-1.7.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31a2318305de6831a18df25ad0df9f03b6d68666af0356d4f6057d66c02ffeb6", size = 10255032, upload-time = "2026-01-05T02:27:31.744Z" }, + { url = "https://files.pythonhosted.org/packages/a6/14/7506738bb6c8bc373b01e5af8f3b727f83f4f496c6b108490ea2609dc2cf/netcdf4-1.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:6c4a0aa9446c3a616ef3be015b629dc6173643f8b09546de26a4e40e272cd1ed", size = 22289653, upload-time = "2026-01-05T02:27:34.294Z" }, + { url = "https://files.pythonhosted.org/packages/af/2e/39d5e9179c543f2e6e149a65908f83afd9b6d64379a90789b323111761db/netcdf4-1.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:034220887d48da032cb2db5958f69759dbb04eb33e279ec6390571d4aea734fe", size = 2531682, upload-time = "2026-01-05T02:27:37.062Z" }, +] + +[[package]] +name = "networkx" +version = "3.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, +] + +[[package]] +name = "numexpr" +version = "2.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/c4/27ea7849eb4a7e3b51db446b0414254326dba8c6bdee09b9f2abf963e55d/numexpr-2.14.2.tar.gz", hash = "sha256:e7144e83ea9e581f2273e0304f15836736c4e470e2bd2e378ce617662a1ca278", size = 121744, upload-time = "2026-07-18T10:52:43.185Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b9/a3/1904a5928de2c16935172a54772082e6a64efa4e763ed829c2e9f23d8eb1/numexpr-2.14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2aa65ddc2243f19c6915f34ee0978b4a2df20f297230a793c4ee6d55f3472599", size = 164944, upload-time = "2026-07-18T10:51:37.875Z" }, + { url = "https://files.pythonhosted.org/packages/fb/03/533659d9c05c0aee359f29c6e1bb80f0b91848b75522bd9809861b0b0f25/numexpr-2.14.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf959e6df6cb603611c034b6cba7b03a361be0ad0b80b73f163fab95f5ccbb7f", size = 153218, upload-time = "2026-07-18T10:51:39.429Z" }, + { url = "https://files.pythonhosted.org/packages/cd/34/e20830b6388568c1a6fd1529953ccac09d7ed57eb79dacfd298646bd95c8/numexpr-2.14.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d534ecb456a4ae3995f99c8a5deb469bfff05d4ec610a7885c175c881d12f710", size = 453750, upload-time = "2026-07-18T10:51:40.735Z" }, + { url = "https://files.pythonhosted.org/packages/d6/15/9a7bf92b7c8047157fd96bc42ff6b0a20351f43aa58b9f61eb8f5ff3048b/numexpr-2.14.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f41170e9d0dbba76851e35d80cfa9f4ca5fe78628c5bf24d941cf3364940ab7a", size = 443546, upload-time = "2026-07-18T10:51:41.95Z" }, + { url = "https://files.pythonhosted.org/packages/86/ed/a2aaca2a65d5aa04379d3bcc8360c067aa2503fbad2c88c0709f1b3e1e6c/numexpr-2.14.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6acafb2fdbeaaa6681a8f1a1d8b3f7dcd33704baace7057b950754b258be7c43", size = 1418879, upload-time = "2026-07-18T10:51:43.315Z" }, + { url = "https://files.pythonhosted.org/packages/62/6d/dde6da68ef817d9aa0995a0ecdfb9b0ba5745688fb324b96b2250bb00131/numexpr-2.14.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7ca9e71195b36cc7aeafe97347549e1e1c1e889ff700238782ef6447651ec26d", size = 1465942, upload-time = "2026-07-18T10:51:44.609Z" }, + { url = "https://files.pythonhosted.org/packages/96/2f/5b352550476d10b85e4198bd045c155ca63a55853aeb11861996f05707a0/numexpr-2.14.2-cp311-cp311-win32.whl", hash = "sha256:779129d50974e7d6d6581d322f75b8f8375e96215b6861a2d5460347997ef649", size = 161260, upload-time = "2026-07-18T10:51:45.861Z" }, + { url = "https://files.pythonhosted.org/packages/44/5e/00d696bca8bb9cad9c8a775ae5c1559e4a7cc083029f274c14cae5bc52fa/numexpr-2.14.2-cp311-cp311-win_amd64.whl", hash = "sha256:2f132777d7d425471c458af5617e023402f13f5006301eacf8a1a6e7118ea70c", size = 157406, upload-time = "2026-07-18T10:51:47.065Z" }, + { url = "https://files.pythonhosted.org/packages/23/00/fd8caf2a08304e4d2bc64031ef11da3ccd863853d277f424adf91d44371f/numexpr-2.14.2-cp311-cp311-win_arm64.whl", hash = "sha256:f1de5c88515ed9fbcad42699a0e2b5821b4d0f0adb0da6fb7e009e5cb19d8493", size = 148781, upload-time = "2026-07-18T10:51:48.1Z" }, + { url = "https://files.pythonhosted.org/packages/09/fd/3e7ca4328c22b28717cfe05cd23ca35ffd84e4ca36c3da004323528e9e20/numexpr-2.14.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:606ceaf5722e295ef965ca591736fc26d9e5f13ad950a479e64cead1947f8a3d", size = 164757, upload-time = "2026-07-18T10:51:49.05Z" }, + { url = "https://files.pythonhosted.org/packages/ed/5c/9780d48c4d5effcf55fc7ab7c5651ed82b43250ac8410cce4ef1e97583ed/numexpr-2.14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:790da022539fe7c37dc893acf530a91c2ca6964d7ba11f464131383729d058f3", size = 153507, upload-time = "2026-07-18T10:51:50.273Z" }, + { url = "https://files.pythonhosted.org/packages/41/13/ed5efda74ace9a7e2e933476b85bba6d00f2ebf6b833ef59a796ec9af88c/numexpr-2.14.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:327be9ee62251c173236dc620147ff2d0e732a32f5bad918d78a10082f502f63", size = 455373, upload-time = "2026-07-18T10:51:51.466Z" }, + { url = "https://files.pythonhosted.org/packages/ea/11/e8953226d658ae67e3e002abaa60a101c693f9c57d74974001729afab5ef/numexpr-2.14.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6a5d8fc7016bf6f6e1808b011510aa7c3bd75ec1407f7650874ec591db59f5e", size = 445187, upload-time = "2026-07-18T10:51:52.849Z" }, + { url = "https://files.pythonhosted.org/packages/b2/f7/f51b7e10c312bd9617df829e063c87a6d443fd97af54688282ba2b11b1fd/numexpr-2.14.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4b1ff261c3e69c4c59578d3a9ca6132603619d38ae1abe73325563bed3b9bbaf", size = 1420426, upload-time = "2026-07-18T10:51:54.079Z" }, + { url = "https://files.pythonhosted.org/packages/14/bf/21b4e362039ba52f9033a3f57d68160c0829c9c8d66fa7b443b82491322c/numexpr-2.14.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8b8384592c49cb15a91caa54e2cd84d1ce18edb7af030bb76cd29b52e5dc155d", size = 1467554, upload-time = "2026-07-18T10:51:55.391Z" }, + { url = "https://files.pythonhosted.org/packages/2b/75/0856b1add4e5a7741b80b615f3faace8e3cfffe11e22b6a940ebf25443aa/numexpr-2.14.2-cp312-cp312-win32.whl", hash = "sha256:41cdeacf1b4e51c1143983ea61fcee68139ca47222b55a9265b4fa73826c4260", size = 161441, upload-time = "2026-07-18T10:51:56.503Z" }, + { url = "https://files.pythonhosted.org/packages/a3/78/c87a88b8e63b5f78c67d555afebefafe81f6e3d98640b4bc1c125d76c9d3/numexpr-2.14.2-cp312-cp312-win_amd64.whl", hash = "sha256:8fc55d14bcf17b3fe69213bea14f999451892b4690717008c66f2edfd6a085ce", size = 157563, upload-time = "2026-07-18T10:51:57.521Z" }, + { url = "https://files.pythonhosted.org/packages/15/37/eea56d5ed1ae5252447f45bb461930eab66338eeab32e533aceb080db0bb/numexpr-2.14.2-cp312-cp312-win_arm64.whl", hash = "sha256:806a4471310fe20aa7cb1b2816a6f5e508073a1ad1c2e18041b83e57066fad6a", size = 148820, upload-time = "2026-07-18T10:51:58.536Z" }, + { url = "https://files.pythonhosted.org/packages/6e/7c/feb19571eb92d70c9952c94deb20092682e7657dc23b3e6c3a22503c9a97/numexpr-2.14.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0741efbd75c284e709b0fd430c85c31982b44c9962922ba8a9cbbea1bf413321", size = 164763, upload-time = "2026-07-18T10:51:59.709Z" }, + { url = "https://files.pythonhosted.org/packages/a9/8a/c4c1f171e101dbfe8b31d8d9f91369ff1bc49b1b4c9a4dc04bb9ed6e4155/numexpr-2.14.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92b00c78664070e3af155c6be713a0a5d75d598647ce32a5609adb79a8f961d3", size = 153509, upload-time = "2026-07-18T10:52:00.641Z" }, + { url = "https://files.pythonhosted.org/packages/cb/fb/c27f10ca2e85511a1b0fd3248b1ab5454ea22d932f8fa84836d4bb5c7949/numexpr-2.14.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:149ab5744a5222f07b1d60455c4021c754d395e44938944ac7c7c2495f7feb54", size = 458652, upload-time = "2026-07-18T10:52:01.639Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d4/1003cc9cc35aad4d56a68f5ffeb26baa4a235b8eb6c0d1ce9b143bece462/numexpr-2.14.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd2f5882a66a7792aa6614c68831aa20085b499d41422aedd001080624ebb14c", size = 448200, upload-time = "2026-07-18T10:52:02.872Z" }, + { url = "https://files.pythonhosted.org/packages/06/c7/c66fe3a137bb1dc7229adadde22299a156f730016ac70348dcaac4f7b1ef/numexpr-2.14.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:375d8bee15be42dab22100a0a3de05fe6689a2de853eca012858768a9a7e02ab", size = 1420290, upload-time = "2026-07-18T10:52:04.055Z" }, + { url = "https://files.pythonhosted.org/packages/0b/87/913bb467d71df80dbccaa7fc37402ba681fd6656d5a79652393f40bd5571/numexpr-2.14.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c1ffaf805d8636c3f95d0996517ecf9684c9ac62d768030ca78d1d00af2b3504", size = 1467495, upload-time = "2026-07-18T10:52:05.288Z" }, + { url = "https://files.pythonhosted.org/packages/f2/24/bf7b467570cd3264c2ab7cf02d7b1806c7dd6b2835b63a4f34e0ad0742d3/numexpr-2.14.2-cp313-cp313-win32.whl", hash = "sha256:449a57fb9d38de136e742b1fc429572b42f29778f1d695c3fe50ffec9d3c9a71", size = 161440, upload-time = "2026-07-18T10:52:06.504Z" }, + { url = "https://files.pythonhosted.org/packages/a7/59/bdebacebdd073b7ec316c5c3ed95f2e88e8bfc9bcd41af50ee2e0d53a3b2/numexpr-2.14.2-cp313-cp313-win_amd64.whl", hash = "sha256:dd905922d7dce457947d54b84c7ac345cef37332b724445e159a5a1a2080ce2b", size = 157565, upload-time = "2026-07-18T10:52:07.595Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9c/efcb3dc3a5723149842546ca7475549276bd023fe5fafb996e10b88927a0/numexpr-2.14.2-cp313-cp313-win_arm64.whl", hash = "sha256:b02738853b9b5b8a995f6c680f8f6ef33e8f419395b8fa380e38690495fdb911", size = 148823, upload-time = "2026-07-18T10:52:08.68Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c2/2430700212c749983ea3126e5f6900d02b64d72a95a88193c194783ad7ce/numexpr-2.14.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:76e87c7bd70d721ce4d418e81f4fb7ecf9e7e67d7cea8102527b07fd3d3facf9", size = 164781, upload-time = "2026-07-18T10:52:09.723Z" }, + { url = "https://files.pythonhosted.org/packages/9c/42/ce7f08f9ce509dd324afdc97b74c578a4847702e5f49ed32f7910a54cfcf/numexpr-2.14.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:939c89f613b814e64bb568859397dc9f99b219c3ef681a72fb99a86e435262f9", size = 153539, upload-time = "2026-07-18T10:52:10.722Z" }, + { url = "https://files.pythonhosted.org/packages/ca/29/2e3a7ad419ec0b4b70ac7e09e4cbb811ccec0ea50976fe657427ec2113b7/numexpr-2.14.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b20c1c55aba7812ff2f2c6a50006425d02282fabb1eaf8d75fe638ffcf6deb02", size = 458710, upload-time = "2026-07-18T10:52:11.7Z" }, + { url = "https://files.pythonhosted.org/packages/22/79/ce34593e425b5ac1c4aba69306c8811017bea34a4e9f966f6947514e8acb/numexpr-2.14.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bac00898930f962f360c3d763a8e2273fc931f65a1759ff1bf64b3cf13d65aee", size = 448255, upload-time = "2026-07-18T10:52:12.81Z" }, + { url = "https://files.pythonhosted.org/packages/2d/ac/dab6fb4c66713b7676c2ea133a213dcc95a1359ebe52dacb4eeaa7c0f2b3/numexpr-2.14.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:022e61a3d5dbf5807746264b62126d1c2c24057ad90052478a4d4482ab2555c2", size = 1420432, upload-time = "2026-07-18T10:52:14.193Z" }, + { url = "https://files.pythonhosted.org/packages/12/bc/6131d1ab0166e982542c6034b516a94d6f006fb394b2deffb97e6c07688a/numexpr-2.14.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1d4593e2c6fa060cd7441e8b6ef25c16321a6be2144b3c82d1e00885f1fb6e94", size = 1467525, upload-time = "2026-07-18T10:52:15.474Z" }, + { url = "https://files.pythonhosted.org/packages/58/b1/23eadd1c0a880ee7c035681837960bd4ae295895ce52e917f152fc3d7995/numexpr-2.14.2-cp314-cp314-win32.whl", hash = "sha256:66f3b125b1104241322811de87918724d6709bf082dc0703722d0cecb7b29e82", size = 163695, upload-time = "2026-07-18T10:52:16.976Z" }, + { url = "https://files.pythonhosted.org/packages/2e/30/d605eddf0825bfd0ca64219cfa493bc87dee598d919d4c7d30bf9d4b7e49/numexpr-2.14.2-cp314-cp314-win_amd64.whl", hash = "sha256:ef576a1cded27ba2f3129bc3c42df452a1c498072680d560793f98b0024cd7e6", size = 160100, upload-time = "2026-07-18T10:52:18.159Z" }, + { url = "https://files.pythonhosted.org/packages/0d/48/00c82bd49202d27d9c6072fa3b20ac04bb45c8ee4ffdede67d026a591f0c/numexpr-2.14.2-cp314-cp314-win_arm64.whl", hash = "sha256:8274c51ae1842948f3ae7fe6951a23dcf4ddcbeeaff3737e978e7740b754662d", size = 150953, upload-time = "2026-07-18T10:52:19.183Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3d/0731d84de115f134631142284d636027e0e7702f88838533cff3c449fce0/numexpr-2.14.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f3526699350f94c6277fb16863773a1af9defd95a6f78bbd69b1f0338fd94756", size = 165453, upload-time = "2026-07-18T10:52:20.128Z" }, + { url = "https://files.pythonhosted.org/packages/2f/1e/349cf53bba707856f4186a831421727bdc9a352210bea5750ef22fb04212/numexpr-2.14.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:91e7928435f14fcb351c0157000bce65122b897cc8b0df6bcc48251f25850a6d", size = 154091, upload-time = "2026-07-18T10:52:21.172Z" }, + { url = "https://files.pythonhosted.org/packages/10/9a/f35e5096006ee89f5e5f65482c5e4a4512faf387e395c7578e5efd4ccaf8/numexpr-2.14.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c66925deb968f0b5280f723e2bb5918c11e6be2ca60e9e1530006286ab44031d", size = 469560, upload-time = "2026-07-18T10:52:22.402Z" }, + { url = "https://files.pythonhosted.org/packages/f9/00/698b6bdd95403af044928af9fc1dcf7c2b0909146ca5ae26882ebf22dfca/numexpr-2.14.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a404c9a55902572eec810068d06b79a7c99e96f0400f5a7d73f39dff5ec5e371", size = 459233, upload-time = "2026-07-18T10:52:23.687Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/87e160de8cba2779a82f7b9a3c93e39feb4ae50e397f676f96e979ecd92b/numexpr-2.14.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:44dc6b1dfa9abcbfc9917297f0d2af7c87c16b6ecd45747a8e70f54399a3a2f9", size = 1430032, upload-time = "2026-07-18T10:52:25.076Z" }, + { url = "https://files.pythonhosted.org/packages/00/91/bef92d9f6fb5ce18a3baf96451e1feed99e85b035fc142436e5d7b31bb55/numexpr-2.14.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:93233040f4bed3bce5abb0c2d20aeb1074511f29cbaa9c14828f86bcfa44d321", size = 1476032, upload-time = "2026-07-18T10:52:26.361Z" }, + { url = "https://files.pythonhosted.org/packages/51/b0/241550ecad5984bb816e1cc39125a2a9eccf92b85811125a58d10b0eadb7/numexpr-2.14.2-cp314-cp314t-win32.whl", hash = "sha256:2aceefa08f8f86317fa6e8fe9f6dc20d24ab8365d715be4a26306acf406d2dbe", size = 164124, upload-time = "2026-07-18T10:52:27.56Z" }, + { url = "https://files.pythonhosted.org/packages/87/ad/c5933948b275db2eb5bc3d90c4dff0f53b65622a97dd80aedd99416f3d6d/numexpr-2.14.2-cp314-cp314t-win_amd64.whl", hash = "sha256:cd684ac9daa539fcdac3437678834797b29d7780cfaad71111745132d466d51f", size = 160459, upload-time = "2026-07-18T10:52:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/d7/df/d7a61d34c48d79f8c72c2dfe0339f4249cfec68a6ebf49be269ac7971ac1/numexpr-2.14.2-cp314-cp314t-win_arm64.whl", hash = "sha256:2ef72de3d3dd466cb0c435cae7141c99b0f8091b1eae9d03dcb38690f56c3f79", size = 151337, upload-time = "2026-07-18T10:52:29.701Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.12' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.12' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.12' and sys_platform == 'emscripten'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, +] + +[[package]] +name = "numpy" +version = "2.5.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" }, + { url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" }, + { url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" }, + { url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" }, + { url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" }, + { url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" }, + { url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" }, + { url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" }, + { url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" }, + { url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" }, + { url = "https://files.pythonhosted.org/packages/eb/07/ec2a3f0c91761581d4b7104a740791800025983f9a4dc4e73f91a99aeac4/numpy-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1", size = 16796419, upload-time = "2026-07-04T17:06:40.37Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ab/ddb499fc4f8780354395face5b65c7fd107bcd6e1d667a5f07d046956f6f/numpy-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6", size = 11765832, upload-time = "2026-07-04T17:06:42.768Z" }, + { url = "https://files.pythonhosted.org/packages/88/b3/3c28c558a09fc72100c646dac6d2fce8e834c471b0edca01a29996706117/numpy-2.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d", size = 5325143, upload-time = "2026-07-04T17:06:45.466Z" }, + { url = "https://files.pythonhosted.org/packages/5e/0e/ce19b985bb15c596f4f05954e76cccc77c845083b3b8f938a6c68e523128/numpy-2.5.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1", size = 6659749, upload-time = "2026-07-04T17:06:47.288Z" }, + { url = "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd", size = 15164716, upload-time = "2026-07-04T17:06:49.494Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a", size = 16661440, upload-time = "2026-07-04T17:06:52.061Z" }, + { url = "https://files.pythonhosted.org/packages/fc/d7/a41e3310c886fe457d36e670bbf24fae411aca8a7b6ad92a32afd924077c/numpy-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7", size = 16526305, upload-time = "2026-07-04T17:06:54.605Z" }, + { url = "https://files.pythonhosted.org/packages/53/75/4333a9a707c1edd3a4e1a0c58eca52c0f31e55089fa80db02b5565b24df7/numpy-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6", size = 18423008, upload-time = "2026-07-04T17:06:57.54Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/e314a32b1c11a2ffe818ddad3a57b50b4b6e1b6c487192eb50cdef0415d0/numpy-2.5.1-cp313-cp313-win32.whl", hash = "sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9", size = 6063885, upload-time = "2026-07-04T17:07:00.14Z" }, + { url = "https://files.pythonhosted.org/packages/10/70/800b3fca480af32df9e8ea9f3d4a0c8feb4b32d7f195d174eabbda4829ad/numpy-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74", size = 12425674, upload-time = "2026-07-04T17:07:02.387Z" }, + { url = "https://files.pythonhosted.org/packages/8b/0b/196350c122f50f6ca56846f2d71efd5e0d24b7b2e07355e019b2e2c7a11e/numpy-2.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107", size = 10350256, upload-time = "2026-07-04T17:07:04.878Z" }, + { url = "https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8", size = 16795063, upload-time = "2026-07-04T17:07:07.374Z" }, + { url = "https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75", size = 11776652, upload-time = "2026-07-04T17:07:09.907Z" }, + { url = "https://files.pythonhosted.org/packages/b5/59/2b844c7a6e9deff69b404a66221e1542937734f65d5e6e39411876053862/numpy-2.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2", size = 5335944, upload-time = "2026-07-04T17:07:12.227Z" }, + { url = "https://files.pythonhosted.org/packages/86/51/9bf7cb2cabcebc9e017e4ec7e6322b378317a542c08b4cb68479c1efc716/numpy-2.5.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b", size = 6656266, upload-time = "2026-07-04T17:07:14.368Z" }, + { url = "https://files.pythonhosted.org/packages/83/3e/fb7615b211b82a32f44d5180a6d421b61f84d4fadd578b48ba4ac34e189f/numpy-2.5.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95", size = 15179720, upload-time = "2026-07-04T17:07:16.272Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21", size = 16664835, upload-time = "2026-07-04T17:07:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/97d6475ee91afe2587797d09446f9d3e475ad4cb681662d824809327b75a/numpy-2.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373", size = 16539135, upload-time = "2026-07-04T17:07:22.015Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/4db81e4ba0be7e2776b1de68c82aa862c7f8ec27e1b4927d4ae075e20678/numpy-2.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438", size = 18426684, upload-time = "2026-07-04T17:07:24.941Z" }, + { url = "https://files.pythonhosted.org/packages/1f/64/c0ba2d90724d450279a7df8f32057241070250a26a7e2b5337d77347f481/numpy-2.5.1-cp314-cp314-win32.whl", hash = "sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace", size = 6116103, upload-time = "2026-07-04T17:07:27.622Z" }, + { url = "https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a", size = 12562177, upload-time = "2026-07-04T17:07:29.887Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/49707938b6dd0a78a9178dd93227dc89e4c11af47f5c798d70366e8d0483/numpy-2.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0", size = 10627739, upload-time = "2026-07-04T17:07:32.568Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c7/bb4b882cfe7f299cbc8b66e42e7dd78cf9d14e40f9469fc5e3db7e15b3bd/numpy-2.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22", size = 11894709, upload-time = "2026-07-04T17:07:34.941Z" }, + { url = "https://files.pythonhosted.org/packages/40/3f/5af7f4a7f6224aef48017aa82bb6174c7a659d724be0c75017b7e64a55b4/numpy-2.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7", size = 5453810, upload-time = "2026-07-04T17:07:37.495Z" }, + { url = "https://files.pythonhosted.org/packages/20/c9/3474309bc94d634d3f9c3eddf03250ecb8c22cd948ef16fef69a77cc5d7b/numpy-2.5.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d", size = 6761189, upload-time = "2026-07-04T17:07:39.563Z" }, + { url = "https://files.pythonhosted.org/packages/90/8a/558ae39fdd55d7e7f7fef9a84a6e964ac6b23edbd2a07e52bb084500507d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09", size = 15225039, upload-time = "2026-07-04T17:07:41.682Z" }, + { url = "https://files.pythonhosted.org/packages/63/27/ca7392b2d030277bdf0273e7d23255b3ee57d57a7c170a6f4fb3981e1e5d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4", size = 16701306, upload-time = "2026-07-04T17:07:44.611Z" }, + { url = "https://files.pythonhosted.org/packages/02/42/03d53ae7996c44d4374a8262e9dc41671fd56cbb98f7d47ef85cf5da4c6b/numpy-2.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1", size = 16589955, upload-time = "2026-07-04T17:07:47.694Z" }, + { url = "https://files.pythonhosted.org/packages/7b/15/6c1784ae469640e65db111e9a34b3d0f14d91e8a38b9ce34810ced370dbb/numpy-2.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077", size = 18464252, upload-time = "2026-07-04T17:07:50.684Z" }, + { url = "https://files.pythonhosted.org/packages/94/a8/f98e50356cf167df656c526c2dfeec2d7dde182f2a3da4b458a5938e2776/numpy-2.5.1-cp314-cp314t-win32.whl", hash = "sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf", size = 6263298, upload-time = "2026-07-04T17:07:53.445Z" }, + { url = "https://files.pythonhosted.org/packages/72/ac/96ae880cdecad0b3275d9359fcec72667b49a4863c9f12942e43679dda02/numpy-2.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af", size = 12748623, upload-time = "2026-07-04T17:07:55.384Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5a/4d2b1601df3602dba7a14f3348ba9bfe94a18adb428e693df6154c293831/numpy-2.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb", size = 10697674, upload-time = "2026-07-04T17:07:58.506Z" }, +] + +[[package]] +name = "objsize" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/42/2de8994fbea1112d076d71aefaebad888ff01e5b52616895d510b73c3b96/objsize-0.8.0.tar.gz", hash = "sha256:df17998cf6ef4b24d52abee5020484491230e3f4af71a8ff0098c7455ad4d91c", size = 16593, upload-time = "2026-01-18T12:55:14.199Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/53/157f8f4df3f43fdfdc627a56fa46135e4dcf806eb5bc6088811d968f8a21/objsize-0.8.0-py3-none-any.whl", hash = "sha256:afea5e61ba1e3e40c23b546028cdc1df88c5b097d2b0d6c6b8a4bf44fa7a3e1b", size = 11599, upload-time = "2026-01-18T12:55:12.626Z" }, +] + +[[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" }, + { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" }, + { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106, upload-time = "2026-05-06T15:10:00.798Z" }, + { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864, upload-time = "2026-05-06T15:10:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213, upload-time = "2026-05-06T15:10:03.515Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994, upload-time = "2026-05-06T15:10:05.083Z" }, + { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744, upload-time = "2026-05-06T15:10:06.853Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014, upload-time = "2026-05-06T15:10:08.213Z" }, + { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509, upload-time = "2026-05-06T15:10:09.595Z" }, + { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127, upload-time = "2026-05-06T15:10:11.049Z" }, + { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025, upload-time = "2026-05-06T15:10:12.842Z" }, + { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943, upload-time = "2026-05-06T15:10:14.405Z" }, + { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606, upload-time = "2026-05-06T15:10:15.791Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101, upload-time = "2026-05-06T15:10:17.129Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736, upload-time = "2026-05-06T15:10:18.645Z" }, + { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458, upload-time = "2026-05-06T15:10:20.079Z" }, + { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368, upload-time = "2026-05-06T15:10:21.549Z" }, + { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070, upload-time = "2026-05-06T15:10:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892, upload-time = "2026-05-06T15:10:24.714Z" }, + { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217, upload-time = "2026-05-06T15:10:26.084Z" }, + { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980, upload-time = "2026-05-06T15:10:28.062Z" }, + { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738, upload-time = "2026-05-06T15:10:29.727Z" }, + { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033, upload-time = "2026-05-06T15:10:31.152Z" }, + { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492, upload-time = "2026-05-06T15:10:32.641Z" }, + { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087, upload-time = "2026-05-06T15:10:34.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031, upload-time = "2026-05-06T15:10:36.358Z" }, + { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915, upload-time = "2026-05-06T15:10:38.013Z" }, + { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613, upload-time = "2026-05-06T15:10:39.569Z" }, + { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086, upload-time = "2026-05-06T15:10:41.262Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696, upload-time = "2026-05-06T15:10:42.651Z" }, + { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465, upload-time = "2026-05-06T15:10:44.097Z" }, + { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364, upload-time = "2026-05-06T15:10:45.839Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063, upload-time = "2026-05-06T15:10:47.267Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356, upload-time = "2026-05-06T15:10:48.765Z" }, + { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592, upload-time = "2026-05-06T15:10:50.13Z" }, + { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491, upload-time = "2026-05-06T15:10:51.582Z" }, + { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309, upload-time = "2026-05-06T15:10:53.329Z" }, + { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030, upload-time = "2026-05-06T15:10:54.988Z" }, + { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482, upload-time = "2026-05-06T15:10:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178, upload-time = "2026-05-06T15:10:58.446Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089, upload-time = "2026-05-06T15:11:00.441Z" }, + { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921, upload-time = "2026-05-06T15:11:02.176Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638, upload-time = "2026-05-06T15:11:03.696Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078, upload-time = "2026-05-06T15:11:05.123Z" }, + { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687, upload-time = "2026-05-06T15:11:06.602Z" }, +] + +[[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, 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, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pandas" +version = "3.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/be/4f/5f3422a2afec5ffc46308b79e53291365a93748b498ac2e58bead0197916/pandas-3.0.5.tar.gz", hash = "sha256:dca3734d6ab7c906e6730f0788b0a1dbb9f2467731f9711f77995c8e9d62d712", size = 4658219, upload-time = "2026-07-22T22:19:28.819Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/ef/f1fd7431d635bf20015489bf0bd69c17fff1018de773540f651455a3916b/pandas-3.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2946e77e4a53cd248cbde631a12f0e51c8324ce354c3eba4d20147c1ad6f4282", size = 10397178, upload-time = "2026-07-22T22:17:48.274Z" }, + { url = "https://files.pythonhosted.org/packages/31/b4/0eafac990a431561187694126de01f9b12559549b4d86360c0c4bd870fde/pandas-3.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71ecc8fb7ed1a7aa4392316b5309a6347e8e7f832f38fd897846b3a1457a9298", size = 9990736, upload-time = "2026-07-22T22:17:52.388Z" }, + { url = "https://files.pythonhosted.org/packages/de/21/359880af3ea9b7cb23bea5b51e8e70ef3866c03be09da9a2787e18e330a8/pandas-3.0.5-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b173f5951ff6b8b0ec7675e20dff3c97b7e7a57dfcce387c2d7c5afe87cb7899", size = 10814438, upload-time = "2026-07-22T22:17:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/d1/50/d6cc4d7e508bbccf5d6027314a8312bc7ac73d0ec7f195f53838daafab40/pandas-3.0.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2c0cf1dd9b55a22d105fc46c1b489af3bd42264fcba7c66297bf47a9a1d9c78a", size = 11323634, upload-time = "2026-07-22T22:17:56.858Z" }, + { url = "https://files.pythonhosted.org/packages/70/2b/d5f0a8c90dd0ae04e64ba53b871afb796ec026b615086d382ddc2ade729b/pandas-3.0.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0fac0010c75e4efb6b99e249c183a8993ce0dc95c240f9b120a5e67c727b7928", size = 11850860, upload-time = "2026-07-22T22:17:59.1Z" }, + { url = "https://files.pythonhosted.org/packages/5c/30/183aec2e19adf778a98d29b5729a0a68f4cc4ebf9b9c3b70d0297355bcb1/pandas-3.0.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:08d24fe11a17dc33bd6e937dc9c665f9cba08fbdc9f657f405713515febe300d", size = 12411100, upload-time = "2026-07-22T22:18:01.485Z" }, + { url = "https://files.pythonhosted.org/packages/fa/9a/31f4983f191af51ab2a8f2d0c7b33dff3a84da26533f982fff02c2f9e28b/pandas-3.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:b1261758dfb6cf12c3cff8300e21cefad30e7ec709abb4c24ac7318e6a52462a", size = 9968804, upload-time = "2026-07-22T22:18:03.903Z" }, + { url = "https://files.pythonhosted.org/packages/49/97/7886c89a39045c69ad82cbceaf3343810480c8ef49a216319ce8183860a6/pandas-3.0.5-cp311-cp311-win_arm64.whl", hash = "sha256:679f4e85b30ddb1515458ab1e788d3e260eae369b1f78da7a3aa4cac8ebf4a2a", size = 9205447, upload-time = "2026-07-22T22:18:06.134Z" }, + { url = "https://files.pythonhosted.org/packages/1c/54/1dc810ea558d1320b597aa140a514f2fdf1d2ea09c38cf556f13ea712ec9/pandas-3.0.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa290c16964d4963fbfbc358928239cf3bd755b20e988ce944877def2f44471d", size = 10411717, upload-time = "2026-07-22T22:18:08.307Z" }, + { url = "https://files.pythonhosted.org/packages/68/56/fbe81c09195924d8b7b8d4461a20458fe80a6a5ed6b24f0314da684277e1/pandas-3.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2e26bb46934b8a2ca0c3de1d3d606fc5f6746584791b2db264d58cf370e08dc", size = 9957095, upload-time = "2026-07-22T22:18:10.6Z" }, + { url = "https://files.pythonhosted.org/packages/e0/51/fac252f4a913ed5eabf3c11b880a9e8d5a6c10f0b2129d0462212d238b4d/pandas-3.0.5-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:73fa87b08a7ef706f8aafda39ddaccf2a99047bea62d8c88a0361bcafb2237bc", size = 10485458, upload-time = "2026-07-22T22:18:12.834Z" }, + { url = "https://files.pythonhosted.org/packages/12/98/e976540c1addf70442be7842a18cf70884a964abbf69442504f4d2939989/pandas-3.0.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d373ce03ffd84010ed9839fa73672a9c8256990532e158440c0085db7d914b34", size = 10998091, upload-time = "2026-07-22T22:18:15.209Z" }, + { url = "https://files.pythonhosted.org/packages/a4/8c/1f29b5be8d3fc47dd7567eb167fabba2085879b31e0287ce7cba6d3d2ff4/pandas-3.0.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a29c53d85ea98c5e792c59ef82ee9fbe6ca902c0d0adb6b23f45ef894cd7bf6", size = 11499501, upload-time = "2026-07-22T22:18:17.689Z" }, + { url = "https://files.pythonhosted.org/packages/9d/e2/bd9c98ad2df7b38bde002adde4cdf353519da51881634323b126c55997f9/pandas-3.0.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a5ad3b02ed6bc7d7ae9b70804b2c6aa31827489d150f8e623ce82491b82085d7", size = 12060559, upload-time = "2026-07-22T22:18:20.147Z" }, + { url = "https://files.pythonhosted.org/packages/f3/9a/ffbd852d58bd74a617fe2f8ee6a58a96982271ce41cf981eab22190b4a4b/pandas-3.0.5-cp312-cp312-pyemscripten_2024_0_wasm32.whl", hash = "sha256:b2acb4650527eec6822c3dadb2b771277b65e7dae7a267d4bccf65fd1bb3fbce", size = 7197652, upload-time = "2026-07-22T22:18:22.502Z" }, + { url = "https://files.pythonhosted.org/packages/70/b5/d2d3e9ae73362ba4229651b0ee1455cf78073a1ce585f6ff693782ce263e/pandas-3.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:80a611068e8a3ac23f7398c6c14eb46dc974e5cc9997f653e2dcfd1da74edd41", size = 9831691, upload-time = "2026-07-22T22:18:24.534Z" }, + { url = "https://files.pythonhosted.org/packages/52/51/dea1e89d6a6796b9c43f85a09b484ee03edb8a4c4842e73e200a8c11301c/pandas-3.0.5-cp312-cp312-win_arm64.whl", hash = "sha256:25ff585b972a18ef1fe9ffa3ac6544d9950508aa76832e5147640b6022821e49", size = 9105796, upload-time = "2026-07-22T22:18:27.064Z" }, + { url = "https://files.pythonhosted.org/packages/bf/09/7b95c4a0025227d6f118c4039b423412ac6a982db02864166185d812fbc7/pandas-3.0.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c1c05a767fe8e5b4fe9e1c29806829c582052eaedb9120a3da83ba3f69e24a5b", size = 10385742, upload-time = "2026-07-22T22:18:29.346Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0c/dc78fd8c4da477b4b5e8ad37295af352190d21ef63a9ee1bc071753074cc/pandas-3.0.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b86765f268b56f7e665b93bce9d5df69dee7f99e595cf8fb839483ab315942a3", size = 9932067, upload-time = "2026-07-22T22:18:31.833Z" }, + { url = "https://files.pythonhosted.org/packages/3e/71/3592c055cf44df9808550f9368ceda80ff2b224d355ef73fe251dcda1802/pandas-3.0.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c597ecf5616b5c420372c1d4d4c00dbbfba7398bea857dcc984347e1ea48417b", size = 10466756, upload-time = "2026-07-22T22:18:34.195Z" }, + { url = "https://files.pythonhosted.org/packages/e3/70/4363150359f95b4cb4bcbb34ca23572bb5495749a621a8f3d5a1ddfd293c/pandas-3.0.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4b11c36e218331d0387cbe3a0a5f75162357a1d92d57b2b08a336ff94b19b2be", size = 10938525, upload-time = "2026-07-22T22:18:36.81Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d0/317e7a0c67c0e69fa905a0161409397a7dc2d46ff611f6ca4803352c042b/pandas-3.0.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cf52e1f61d229496da17dc7ab54acdee627357e7008fd4fecba3d0ba2937fa58", size = 11489303, upload-time = "2026-07-22T22:18:39.287Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8d/36dade89b49e4f9d5cbdbe863772581f98c0c6d78fc39ad4c557f6f2e17e/pandas-3.0.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:db172144bb56422bd157812f3b021eacc255451470b31e2c633c349490a1cfee", size = 11989004, upload-time = "2026-07-22T22:18:42.208Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ba/18c4ec8a746e177da05a9e7a7963781d8ea195780724f854601b6ebd6b78/pandas-3.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:0d298e951f23016ce4699951d044ae6418dbc91bf68cefca0f77666fcbb4e5c6", size = 9826896, upload-time = "2026-07-22T22:18:44.539Z" }, + { url = "https://files.pythonhosted.org/packages/de/ec/28a57266b753799a87b8bc79e7887ac6fd981b8c6d2978a0b7e7b6bd708c/pandas-3.0.5-cp313-cp313-win_arm64.whl", hash = "sha256:66266d3442a5e8b3c90274c2b8b230bee42dd1c286bc822cc2f9f2c7e12b883e", size = 9094790, upload-time = "2026-07-22T22:18:47.468Z" }, + { url = "https://files.pythonhosted.org/packages/51/2f/cf6aae281264f4463f0875bcbb15fd2bb6d291cc535187dad1732475e4a9/pandas-3.0.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2f264fc46911cc8131a7322a16199bbf8e353d27c10bb211f5bd0c814324dc36", size = 10390034, upload-time = "2026-07-22T22:18:49.818Z" }, + { url = "https://files.pythonhosted.org/packages/06/ec/5189518c7a7659c4bdcc6b1eb32c46c6f3c86b0661ffd84143d1112c7732/pandas-3.0.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:53730687fcd161883b24e10411c06d6a4c0f2275d2faf3bb2bc25deb4ba8007c", size = 9980065, upload-time = "2026-07-22T22:18:52.249Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f1/598503ce8d7e3c35601e0747ba288c7864baae66380725bc12f13f884dfe/pandas-3.0.5-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:960d3ebcf249f75206899fcd2c6de53f736b7265759ced0d3e559df0b8b709b0", size = 10545532, upload-time = "2026-07-22T22:18:54.813Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/ceae2adf7034e07e9910299fe412e1819c4f0dd520700a888bcb03625448/pandas-3.0.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e94c2c5ca43bd3ca32bf64d32308887b65e5f9bfd8023ea52755107a999f93b", size = 10963120, upload-time = "2026-07-22T22:18:57.42Z" }, + { url = "https://files.pythonhosted.org/packages/66/25/86e0f4451874eb79e688deeebe3c451fec4557f8952005818d800ee8ac7e/pandas-3.0.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e819dd5f62966b481a8cb649d3299ebd886a1ea91ed5a99bf7ce77c98d18ab94", size = 11563178, upload-time = "2026-07-22T22:18:59.729Z" }, + { url = "https://files.pythonhosted.org/packages/f3/45/8643daa3b4147e433adfcccefdd0380d3aad79d86b15d8999730fe1944d5/pandas-3.0.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3c5ed2e7c06e91d340dfd091d7934f9bc82e4a36b95f647f090b9d1c9ac649da", size = 12028708, upload-time = "2026-07-22T22:19:02.164Z" }, + { url = "https://files.pythonhosted.org/packages/96/58/ad979ae617615576e8aafd569c9d4b62f1191d896e38f51d66ba06f3b89a/pandas-3.0.5-cp314-cp314-win_amd64.whl", hash = "sha256:cd8f7c6dc98527058ee6264219343f5392240a6f1bfa654fc5d79023020d0c92", size = 9951806, upload-time = "2026-07-22T22:19:04.596Z" }, + { url = "https://files.pythonhosted.org/packages/69/32/7ac03886b304049a9d2625ee88f59af760d8a93bd30ed9239bce7b9869a8/pandas-3.0.5-cp314-cp314-win_arm64.whl", hash = "sha256:5183427f5a8156d480f30333777bc978be93650a49a7c01db26adffe95b31e85", size = 9238297, upload-time = "2026-07-22T22:19:06.836Z" }, + { url = "https://files.pythonhosted.org/packages/be/ed/1d1f2ee5547d5167face2376d11c8b2a4c7bfff5a416ee7a9046891fab1e/pandas-3.0.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:303da736987d481074ca720ada325f8bd80c64ebc2d45ed79b29df3aaa4a26ca", size = 10849690, upload-time = "2026-07-22T22:19:09.391Z" }, + { url = "https://files.pythonhosted.org/packages/57/55/17e17152e98fbb0c4b1e562bc65387a2f20a80db0f4a86bf8d3a0e4248d4/pandas-3.0.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3b2801bbb049d0136f6c213eae02b5fca969384fc2064dd728d8620552aa49da", size = 10509945, upload-time = "2026-07-22T22:19:11.773Z" }, + { url = "https://files.pythonhosted.org/packages/88/90/817d44dbf83facf9556f33576d9af0a241981e7bb5c00606c0bcb5df8dda/pandas-3.0.5-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cce3a9d11d2b1f82c69a27ec1f4948a170e2c403c4bbfa8cca62e3fdebe2ef3a", size = 10392197, upload-time = "2026-07-22T22:19:14.024Z" }, + { url = "https://files.pythonhosted.org/packages/f1/da/889f00c0a6f5aa1545add70abbf01502dff87ab577adb855bd631c54d2f2/pandas-3.0.5-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef01af4d8dc6cd2c8d6c7736f149574ef93fe043811eeb5e445f2647154b5040", size = 10862726, upload-time = "2026-07-22T22:19:16.351Z" }, + { url = "https://files.pythonhosted.org/packages/bc/98/f1e934fb3c98fce859c6147c6785816c7b5b9ab7821115c5d8c4de9842b9/pandas-3.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e2759e890db96dfcffdbd9b86c3c2cb6afaf58def482820317e06163ec1066cd", size = 11414864, upload-time = "2026-07-22T22:19:18.981Z" }, + { url = "https://files.pythonhosted.org/packages/fe/be/d448af7d657d82e1888dd8551f79c6d6fb161080b5b9752d84d910ec2319/pandas-3.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b58b1b39d46a5862e3fb18f50d1a201398619d16a0f9f73f57eea5583cf0e63c", size = 11925105, upload-time = "2026-07-22T22:19:21.515Z" }, + { url = "https://files.pythonhosted.org/packages/29/c1/ccb4238212c8c4f496c584f3044d94e0c030ed8e1d68999db46c91c2242f/pandas-3.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:1c10461f6eeb35d8f05b6184c65c8b9991663b66c46b1d559b682cb34ae7c6ea", size = 10387612, upload-time = "2026-07-22T22:19:24.257Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cf/6a51b2c38980e04c279fd2fa908a1b0982064e860444acfca4ec2e2c8359/pandas-3.0.5-cp314-cp314t-win_arm64.whl", hash = "sha256:3c5015fd1730fbf883647e88068176c839c102cea883ba1769a6f4593bfc1f8c", size = 9509776, upload-time = "2026-07-22T22:19:26.694Z" }, +] + +[[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, 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, upload-time = "2026-05-01T23:12:58.867Z" }, +] + +[[package]] +name = "partd" +version = "1.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "locket" }, + { name = "toolz" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/3a/3f06f34820a31257ddcabdfafc2672c5816be79c7e353b02c1f318daa7d4/partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c", size = 21029, upload-time = "2024-05-06T19:51:41.945Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f", size = 18905, upload-time = "2024-05-06T19:51:39.271Z" }, +] + +[[package]] +name = "pdbufr" +version = "0.14.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "eccodes" }, + { name = "pandas" }, + { name = "pint" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/e9/e633c3ac1856ba04d1329eda9ac0b4cf2e4f4df964df869226af5b9d1f6f/pdbufr-0.14.2.tar.gz", hash = "sha256:5fd40f4dd07ef7b56f5d0c065debddb4afd45ddaa453addc731249ced8d31d13", size = 8761763, upload-time = "2026-02-26T17:03:46.376Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/20/f2b98b18200c304f04f7839732298a786d121dba6b7cd79aa406c8c9000d/pdbufr-0.14.2-py3-none-any.whl", hash = "sha256:8d9eb74e65fe1b4b89ffe5e7ad8ee0e854ac2efbed5b64ac17cff287ea86a838", size = 52633, upload-time = "2026-02-26T17:03:45.16Z" }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +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, upload-time = "2023-11-25T06:56:14.81Z" }, +] + +[[package]] +name = "pint" +version = "0.25.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flexcache" }, + { name = "flexparser" }, + { name = "platformdirs" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/9d/b1379cdbd33a49d17d627bc24e2b63cca06a1c5343b38072d2889499e82e/pint-0.25.3.tar.gz", hash = "sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee", size = 255106, upload-time = "2026-03-19T21:57:08.72Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/dd/a9fe6a0a09512da23951c68bf36466aeecd89def3183dc095edbc807ddc5/pint-0.25.3-py3-none-any.whl", hash = "sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d", size = 307488, upload-time = "2026-03-19T21:57:07.022Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/78/9b/560e4be8e26f6fd133a03630a8df0c663b9e8d61b4ade152b72005aec83b/platformdirs-4.11.0.tar.gz", hash = "sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0", size = 31953, upload-time = "2026-07-21T13:09:36.565Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/68/d8d58938dfb1370b266a1a729e6d77a985be23689a0496498ee17b2cbf90/platformdirs-4.11.0-py3-none-any.whl", hash = "sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74", size = 23247, upload-time = "2026-07-21T13:09:35.422Z" }, +] + +[[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, 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 = "pproc" +source = { editable = "." } +dependencies = [ + { name = "code-meters" }, + { name = "conflator" }, + { name = "earthkit-data", extra = ["fdb", "mars"] }, + { name = "earthkit-meteo" }, + { name = "earthkit-time" }, + { name = "earthkit-utils" }, + { name = "eccodes" }, + { name = "filelock" }, + { name = "mir-python" }, + { name = "numexpr" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "pandas" }, + { name = "pproc-core" }, + { name = "psutil" }, + { name = "pydantic" }, + { name = "pyfdb" }, + { name = "pyyaml" }, + { name = "scikit-learn" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "thermofeel" }, + { name = "xarray" }, +] + +[package.optional-dependencies] +tcycl = [ + { name = "pyinfero" }, + { name = "wget" }, +] +test = [ + { name = "pytest" }, + { name = "requests" }, +] + +[package.metadata] +requires-dist = [ + { name = "code-meters", specifier = ">=0.0.3" }, + { name = "conflator", specifier = ">=0.1.7" }, + { name = "earthkit-data", extras = ["fdb", "mars"], specifier = ">=0.19.0,<1" }, + { name = "earthkit-meteo", specifier = ">=0.6.1" }, + { name = "earthkit-time", specifier = ">=0.1.3" }, + { name = "earthkit-utils", specifier = ">=0.2.1" }, + { name = "eccodes", specifier = ">=1.6.1" }, + { name = "filelock", specifier = ">=3.12.0" }, + { name = "mir-python", specifier = ">=0.2.0" }, + { name = "numexpr" }, + { name = "numpy", specifier = ">=1.21.2" }, + { name = "pandas", specifier = ">=1.3.3" }, + { name = "pproc-core", editable = "../pproc-core" }, + { name = "psutil" }, + { name = "pydantic" }, + { name = "pyfdb", specifier = "<=0.1.3" }, + { name = "pyinfero", marker = "extra == 'tcycl'", git = "https://github.com/ecmwf/infero.git?subdirectory=src%2Finfero%2Fapi%2Fpyinfero&rev=develop" }, + { name = "pytest", marker = "extra == 'test'" }, + { name = "pyyaml" }, + { name = "requests", marker = "extra == 'test'" }, + { name = "scikit-learn" }, + { name = "scipy", specifier = ">=1.8" }, + { name = "thermofeel", specifier = ">=2.1.0" }, + { name = "wget", marker = "extra == 'tcycl'" }, + { name = "xarray" }, +] +provides-extras = ["tcycl", "test"] + +[[package]] +name = "pproc-core" +source = { editable = "../pproc-core" } +dependencies = [ + { name = "code-meters" }, + { name = "conflator" }, + { name = "earthkit-time" }, + { name = "earthkit-workflows", extra = ["vizualize"] }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "pandas" }, + { name = "pydantic" }, + { name = "qubed" }, +] + +[package.dev-dependencies] +dev = [ + { name = "prek" }, + { name = "pytest" }, + { name = "ty" }, +] + +[package.metadata] +requires-dist = [ + { name = "code-meters" }, + { name = "conflator", specifier = ">=0.1.8" }, + { name = "earthkit-time" }, + { name = "earthkit-workflows", extras = ["vizualize"], specifier = ">=0.15.4" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "pydantic" }, + { name = "qubed", specifier = ">=0.3,<0.4.4" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "prek", specifier = ">=0.4.4" }, + { name = "pytest", specifier = ">=9.0.3" }, + { name = "ty", specifier = ">=0.0.43" }, +] + +[[package]] +name = "prek" +version = "0.4.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/1a/73b6dae5ce7e997cb35a69bfe1d25a798e85fa3d2eabf95324563f461b30/prek-0.4.11.tar.gz", hash = "sha256:4a14cb9bbae850605ae3904fbdbb12f0e00c12455efaa2266da8fb8e5c0350d7", size = 516254, upload-time = "2026-07-24T17:05:35.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/d7/a00b2de492a80e99b1698e72c1d196ac3ed544dc7ee0ada261ac066e78e0/prek-0.4.11-py3-none-linux_armv6l.whl", hash = "sha256:3830cb7cc47e837888b8b464ecb21355a69235cfacef0fd89101e17f09345d63", size = 5770511, upload-time = "2026-07-24T17:05:12.829Z" }, + { url = "https://files.pythonhosted.org/packages/c1/1e/f97c74defcd5d5645888cb99fcdd9b8b48cc7247cf31e64414d106d56d66/prek-0.4.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:45facadf9c2332b28e6ab2744312ae0275a93ab5a437da8bcc53a8c7260cb4b0", size = 6118049, upload-time = "2026-07-24T17:05:14.451Z" }, + { url = "https://files.pythonhosted.org/packages/d9/92/8367d26421ee6fe6019a63928fb0ed31179cd0d6199879c524f89ef4c95c/prek-0.4.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2f8a194b1d00d24dff8baff691c99e2668339da2da3482b4ee99c1a0f2409378", size = 5601478, upload-time = "2026-07-24T17:05:15.81Z" }, + { url = "https://files.pythonhosted.org/packages/e1/6f/7617c9b87afaadede4167720aae7ef12d7e51167db903bc8fbac0cadef7b/prek-0.4.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:21d93e6d76bf3d7a9bb70c6ac86ef372adaee50068c45749e6b9e1c2ac4ec939", size = 5932071, upload-time = "2026-07-24T17:05:17.217Z" }, + { url = "https://files.pythonhosted.org/packages/ef/41/6796a4011b04212333259064aa885a71d03d9581ba9bff52db3ce58d1f06/prek-0.4.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7fb07cde2d2156efa6980122b3f13dc88f20c84b933c6205675d0f1e7be2cde8", size = 5677617, upload-time = "2026-07-24T17:05:18.658Z" }, + { url = "https://files.pythonhosted.org/packages/03/5f/3e339901f8460b6073313619b4fd9bf4135e48430695c53640b83ace88ea/prek-0.4.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b7f5e446d2aca739bd18b380578e9c78bb4c086299abc3e167d51c47840c56f", size = 6106370, upload-time = "2026-07-24T17:05:20.219Z" }, + { url = "https://files.pythonhosted.org/packages/8e/4e/94e24b5c1910ec15692ecaf33d0d8ef0d02a02a8b5e40d3c976396880cba/prek-0.4.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7059d640e595d098600e2d97af961f46292b4112670edbe632de84f6828389e", size = 6884342, upload-time = "2026-07-24T17:05:21.587Z" }, + { url = "https://files.pythonhosted.org/packages/a2/7c/fc0daa033dcafe74990c00af2da1e16922790b9c1b8da7e8eebf1123838b/prek-0.4.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a4df33998fcac878bce3b2c624e1caeb9609f3d562c640702c1234ed815daf", size = 6331365, upload-time = "2026-07-24T17:05:22.87Z" }, + { url = "https://files.pythonhosted.org/packages/d7/36/49f152b8f539930e9685cff0509695ce4054abcecc22f4c16c4e1e5c23d0/prek-0.4.11-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:866991f387527c5f880ce2cc3ddea9b33cc5b986881f8c7f92524cf0969c1350", size = 5939075, upload-time = "2026-07-24T17:05:24.249Z" }, + { url = "https://files.pythonhosted.org/packages/4f/fe/7b097af9161edae7ddedcc9f5cda4a5f31346a492ce3f92583d96c46f628/prek-0.4.11-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:247e5d8740e137ebdf24fa96f01a95b2d2f1892e956a1ab00c7b1474a59ebcc0", size = 5799029, upload-time = "2026-07-24T17:05:25.652Z" }, + { url = "https://files.pythonhosted.org/packages/49/63/dc955ff99e1002d3cd375b21467c87046bc41deddfce86d898240757b151/prek-0.4.11-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:603ba9f2fd9d666dddb3ae190a25a5c55091b843cde90ed52e0a1116f50d4062", size = 5651211, upload-time = "2026-07-24T17:05:27.027Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b8/bf2139ec25eefb5afef43afac7620c5181f2c2661f220598beacb1771207/prek-0.4.11-py3-none-musllinux_1_1_i686.whl", hash = "sha256:f2682ece3c5fc7201106c4fdd84b0587ccea4b8a2ecefa3e94d3074d2841f1df", size = 5954784, upload-time = "2026-07-24T17:05:28.391Z" }, + { url = "https://files.pythonhosted.org/packages/fc/29/3fe5990aee1bd7c4d50a03358ad867c5e912d9510aafb83a359c7347e5fa/prek-0.4.11-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:22721d30394192931fecc80d6fc6dd47e8ddf8db8b9693805aba8ec0f50087ec", size = 6448916, upload-time = "2026-07-24T17:05:29.837Z" }, + { url = "https://files.pythonhosted.org/packages/0f/fb/abddacf43738302242ecd237236c7c80cd7c1d27545e16e803770aee76e9/prek-0.4.11-py3-none-win32.whl", hash = "sha256:8b093e7624522146049e994d5cf283d01d71632b638620b79ae0f96afeaa2624", size = 5483539, upload-time = "2026-07-24T17:05:31.228Z" }, + { url = "https://files.pythonhosted.org/packages/00/1e/c293f7a15cb93963c4be36a02e144b93f43906bc02644a3f04e5708e7453/prek-0.4.11-py3-none-win_amd64.whl", hash = "sha256:5a3d7c80b970b456e5f1bcec8382008ee1ae6a3f324a6b9bb4ff7e666ab0f3c4", size = 5861119, upload-time = "2026-07-24T17:05:32.479Z" }, + { url = "https://files.pythonhosted.org/packages/cd/0c/05fe6eb9d6a54d0e02dfa8cc5ad6f86869bf953419ec15909a32466a28ee/prek-0.4.11-py3-none-win_arm64.whl", hash = "sha256:e7b0df37ce05e45a14a9da39ab104691474d72f139bf4f6c860f754763a322cb", size = 5626386, upload-time = "2026-07-24T17:05:33.813Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.53" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/ea/39b988c938f75cb75d7045b5c69f8bfed47ee2152c8837fb403de29d6fb8/prompt_toolkit-3.0.53.tar.gz", hash = "sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6", size = 435492, upload-time = "2026-07-26T20:56:14.758Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/6f/84908cad2d6aa5144abcf7b42709fe4fdb459bc640ec7ac5786e7693dabc/prompt_toolkit-3.0.53-py3-none-any.whl", hash = "sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2", size = 392288, upload-time = "2026-07-26T20:56:12.512Z" }, +] + +[[package]] +name = "protobuf" +version = "7.35.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/01/9ef0afd7999eb9badb3a768b4aedd78c86d4c65cfaf1958ab276199e76b4/protobuf-7.35.1.tar.gz", hash = "sha256:ce115a26fe0c39a2c29973d914d327e516a6455464489fe3cd1e51a1b354f81a", size = 458717, upload-time = "2026-06-11T21:55:40.257Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/03/8aeeb7458d22546bf64b5250ca1daeb5ff757d900e8e4a7476c6f0db843e/protobuf-7.35.1-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:24f857477359a85c0c235261b8ba905fd51b2562f4a64ca1df5473f29850cbf6", size = 433226, upload-time = "2026-06-11T21:55:31.719Z" }, + { url = "https://files.pythonhosted.org/packages/37/4b/dfb89eb0e652a1ff073c39a59fb5e3a83cfe9b57a2c83fa6d78270101767/protobuf-7.35.1-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:11d6b0ec246892d85215b0a13ca6e0233cf5284b68f0ac02646427f4ff88a799", size = 328847, upload-time = "2026-06-11T21:55:34.035Z" }, + { url = "https://files.pythonhosted.org/packages/0f/58/dc12f2cd484951524af6e3382c785869b9b3fb5e52ee95ae23add53ee8f9/protobuf-7.35.1-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:b73f9489a4b8b1c9cb1f8ed951c736392592edb24b9d6819f36d2e10b171d5b4", size = 344030, upload-time = "2026-06-11T21:55:34.941Z" }, + { url = "https://files.pythonhosted.org/packages/e4/be/5b3cfe508bfab6761414ff944e3366eb13be4fd71efcd69450f89ba39f43/protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:74758715c53d7158fb76caf4f0cfdacc5329a4b1bb994f865d6cf302d413a1c4", size = 327130, upload-time = "2026-06-11T21:55:35.921Z" }, + { url = "https://files.pythonhosted.org/packages/d8/bc/6d6c7ba8709c85f8f2c390b2b118d6fb08a783676a572271851bf45a7d22/protobuf-7.35.1-cp310-abi3-win32.whl", hash = "sha256:353652e4efd0bca5b5fc2656abf8307ef351f0cf938c9eba09f0e09c20a25c30", size = 428945, upload-time = "2026-06-11T21:55:37.034Z" }, + { url = "https://files.pythonhosted.org/packages/0a/19/8d0cb6f20a1ef7b18f1c8986ad5783f22f84cce39c6ce9a6e645ea55192e/protobuf-7.35.1-cp310-abi3-win_amd64.whl", hash = "sha256:230a75ddfc2de4806e56696ce9640c1cdfdb6543b7cfce98d42a4c0a0e7bdb87", size = 439996, upload-time = "2026-06-11T21:55:38.123Z" }, + { url = "https://files.pythonhosted.org/packages/19/c7/5f7c636ec43e0c545e28d1f1db71990108306f7bdcb89f069ba97e428e7f/protobuf-7.35.1-py3-none-any.whl", hash = "sha256:4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9", size = 171659, upload-time = "2026-06-11T21:55:39.155Z" }, +] + +[[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, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { 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, 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, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[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, 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, upload-time = "2024-07-21T12:58:20.04Z" }, +] + +[[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, 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, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, +] + +[[package]] +name = "pyfdb" +version = "0.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, + { name = "eccodes" }, + { name = "findlibs" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/b8/ee087c4bf0e8328eab5ddf738e1d9ee347a3463e6bbe3bf9d0c1b8b31379/pyfdb-0.1.3.tar.gz", hash = "sha256:b070f5dde8de850e82729d03c1e97a2f76281572624826383ac0049b3587352e", size = 17502, upload-time = "2025-10-29T13:56:40.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/a8/b37e3e3398c54a33b994607e2808ef0de97809cbad3f0d784191862429eb/pyfdb-0.1.3-py3-none-any.whl", hash = "sha256:a9d3b69e19fbeb57bb0c6ccbe69d32fe3551e8b1eda4635c36ff6f88eacc2d66", size = 17202, upload-time = "2025-10-29T13:56:39.857Z" }, +] + +[[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, 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, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyinfero" +version = "0.1.1" +source = { git = "https://github.com/ecmwf/infero.git?subdirectory=src%2Finfero%2Fapi%2Fpyinfero&rev=develop#247d497653eeca1b6decc31c858d9bcc541c5e09" } +dependencies = [ + { name = "cffi" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] + +[[package]] +name = "pyrsistent" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/3a/5031723c09068e9c8c2f0bc25c3a9245f2b1d1aea8396c787a408f2b95ca/pyrsistent-0.20.0.tar.gz", hash = "sha256:4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4", size = 103642, upload-time = "2023-10-25T21:06:56.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/63/7544dc7d0953294882a5c587fb1b10a26e0c23d9b92281a14c2514bac1f7/pyrsistent-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f3b1bcaa1f0629c978b355a7c37acd58907390149b7311b5db1b37648eb6958", size = 83481, upload-time = "2023-10-25T21:06:15.238Z" }, + { url = "https://files.pythonhosted.org/packages/ae/a0/49249bc14d71b1bf2ffe89703acfa86f2017c25cfdabcaea532b8c8a5810/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdd7ef1ea7a491ae70d826b6cc64868de09a1d5ff9ef8d574250d0940e275b8", size = 120222, upload-time = "2023-10-25T21:06:17.144Z" }, + { url = "https://files.pythonhosted.org/packages/a1/94/9808e8c9271424120289b9028a657da336ad7e43da0647f62e4f6011d19b/pyrsistent-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cae40a9e3ce178415040a0383f00e8d68b569e97f31928a3a8ad37e3fde6df6a", size = 120002, upload-time = "2023-10-25T21:06:18.727Z" }, + { url = "https://files.pythonhosted.org/packages/3f/f6/9ecfb78b2fc8e2540546db0fe19df1fae0f56664a5958c21ff8861b0f8da/pyrsistent-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6288b3fa6622ad8a91e6eb759cfc48ff3089e7c17fb1d4c59a919769314af224", size = 116850, upload-time = "2023-10-25T21:06:20.424Z" }, + { url = "https://files.pythonhosted.org/packages/83/c8/e6d28bc27a0719f8eaae660357df9757d6e9ca9be2691595721de9e8adfc/pyrsistent-0.20.0-cp311-cp311-win32.whl", hash = "sha256:7d29c23bdf6e5438c755b941cef867ec2a4a172ceb9f50553b6ed70d50dfd656", size = 60775, upload-time = "2023-10-25T21:06:21.815Z" }, + { url = "https://files.pythonhosted.org/packages/98/87/c6ef52ff30388f357922d08de012abdd3dc61e09311d88967bdae23ab657/pyrsistent-0.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:59a89bccd615551391f3237e00006a26bcf98a4d18623a19909a2c48b8e986ee", size = 63306, upload-time = "2023-10-25T21:06:22.874Z" }, + { url = "https://files.pythonhosted.org/packages/15/ee/ff2ed52032ac1ce2e7ba19e79bd5b05d152ebfb77956cf08fcd6e8d760ea/pyrsistent-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:09848306523a3aba463c4b49493a760e7a6ca52e4826aa100ee99d8d39b7ad1e", size = 83537, upload-time = "2023-10-25T21:06:24.17Z" }, + { url = "https://files.pythonhosted.org/packages/80/f1/338d0050b24c3132bcfc79b68c3a5f54bce3d213ecef74d37e988b971d8a/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a14798c3005ec892bbada26485c2eea3b54109cb2533713e355c806891f63c5e", size = 122615, upload-time = "2023-10-25T21:06:25.815Z" }, + { url = "https://files.pythonhosted.org/packages/07/3a/e56d6431b713518094fae6ff833a04a6f49ad0fbe25fb7c0dc7408e19d20/pyrsistent-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b14decb628fac50db5e02ee5a35a9c0772d20277824cfe845c8a8b717c15daa3", size = 122335, upload-time = "2023-10-25T21:06:28.631Z" }, + { url = "https://files.pythonhosted.org/packages/4a/bb/5f40a4d5e985a43b43f607250e766cdec28904682c3505eb0bd343a4b7db/pyrsistent-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e2c116cc804d9b09ce9814d17df5edf1df0c624aba3b43bc1ad90411487036d", size = 118510, upload-time = "2023-10-25T21:06:30.718Z" }, + { url = "https://files.pythonhosted.org/packages/1c/13/e6a22f40f5800af116c02c28e29f15c06aa41cb2036f6a64ab124647f28b/pyrsistent-0.20.0-cp312-cp312-win32.whl", hash = "sha256:e78d0c7c1e99a4a45c99143900ea0546025e41bb59ebc10182e947cf1ece9174", size = 60865, upload-time = "2023-10-25T21:06:32.742Z" }, + { url = "https://files.pythonhosted.org/packages/75/ef/2fa3b55023ec07c22682c957808f9a41836da4cd006b5f55ec76bf0fbfa6/pyrsistent-0.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:4021a7f963d88ccd15b523787d18ed5e5269ce57aa4037146a2377ff607ae87d", size = 63239, upload-time = "2023-10-25T21:06:34.035Z" }, + { url = "https://files.pythonhosted.org/packages/23/88/0acd180010aaed4987c85700b7cc17f9505f3edb4e5873e4dc67f613e338/pyrsistent-0.20.0-py3-none-any.whl", hash = "sha256:c55acc4733aad6560a7f5f818466631f07efc001fd023f34a6c203f8b6df0f0b", size = 58106, upload-time = "2023-10-25T21:06:54.387Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + +[[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, 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, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "pytz" +version = "2026.3.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/48/fb042503b6ca6cd271261dc559fd6432f7d8c713153e9ec5c591af4dfc1c/pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d", size = 319745, upload-time = "2026-07-25T15:12:07.385Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815", size = 508283, upload-time = "2026-07-25T15:12:05.782Z" }, +] + +[[package]] +name = "pyvis" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipython" }, + { name = "jinja2" }, + { name = "jsonpickle" }, + { name = "networkx" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/4b/e37e4e5d5ee1179694917b445768bdbfb084f5a59ecd38089d3413d4c70f/pyvis-0.3.2-py3-none-any.whl", hash = "sha256:5720c4ca8161dc5d9ab352015723abb7a8bb8fb443edeb07f7a322db34a97555", size = 756038, upload-time = "2023-02-24T20:29:46.758Z" }, +] + +[[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, 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, 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" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[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, 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/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, + { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, + { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, + { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, + { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, + { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, + { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, + { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, + { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, + { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, + { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, + { 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]] +name = "qubed" +version = "0.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozendict" }, + { name = "humanize" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "objsize" }, + { name = "pandas" }, + { name = "protobuf" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/a2/d4cd7fbc41fef2b308f10ed3f9c5bb1cf40f338ff3a0e37692325ba28b77/qubed-0.3.1.tar.gz", hash = "sha256:fadcf4be1668f0cfc58fcf430a15613e0f53f0df4e07fd05694c9caba39e8258", size = 15152020, upload-time = "2026-02-04T13:27:38.081Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/ae/8817f6db21335200da65434aaf1adb7ab86c38f7ac88cfbaaab9a50df335/qubed-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8a5ba2af717c5225b733ec6695bc848a6507e5590ea47310c36a204b03604da8", size = 392905, upload-time = "2026-02-04T13:26:57.846Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/253ddba74f5703677d5ee2232b1925578266e4023f7a3aaec6a17e5fd6b4/qubed-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2f0ac5b238de53baac98ea66e1e2a21fa729baf69789fb657b578e7d1dbda5d", size = 379845, upload-time = "2026-02-04T13:26:53.467Z" }, + { url = "https://files.pythonhosted.org/packages/95/53/06c4c8f59b587b5ce087c796d362ecd57fea6a67fb73f380c7f8f4b5403e/qubed-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6de0a6783af5f6342f7f124c5a159fc0b84c78d95d2866801d9a280cba447a46", size = 417330, upload-time = "2026-02-04T13:26:01.262Z" }, + { url = "https://files.pythonhosted.org/packages/a1/43/33caa7eefa46c21c6b9b3d3dd96f56772a46530a27577c63a273699b0bb1/qubed-0.3.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e2f16a2c6fbf52049cde9931d2cb6777e7b63c9a2e68b949a7bd06f6bbd6e66", size = 425131, upload-time = "2026-02-04T13:26:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/e9/01/7165694535259dfacff7d78377eb66b6e4187b69decbc81558a7170a8aa4/qubed-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2202d3f948231254d6c0ad19d10577ed663983c08b92a9ca8da00989465b013", size = 544973, upload-time = "2026-02-04T13:26:22.725Z" }, + { url = "https://files.pythonhosted.org/packages/f3/85/9a7914ccfea96d24f15df68a93dbb99ff14b4e75f1dd326df58286b38a20/qubed-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a783825a8b5415ac4ba15d3495a8330a4d78882715b90869f66ae1ee147826a4", size = 453565, upload-time = "2026-02-04T13:26:34.094Z" }, + { url = "https://files.pythonhosted.org/packages/b9/32/9c7cf964bea589da50bb572ee3bcd07641bf7e75961a14558dbee4b1a85c/qubed-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2edde67d3710ce780b85b18eab0749ebe1c77f92251e3d0c6efbd88ae7d661", size = 428033, upload-time = "2026-02-04T13:26:48.038Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2d/458d060268a5a38635994b854507e01038186a4d96cc5b5112680d70ca3c/qubed-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c576d6bf4fd6e6b6e44c5ef67b107fb3a0bf75bac89f25eeffdb7cd846e081cb", size = 451273, upload-time = "2026-02-04T13:26:41.923Z" }, + { url = "https://files.pythonhosted.org/packages/be/2a/abfbeaa8590c39af25e71ff6c84fc3dbd77a18629046b2ae5dc05f1b5e9f/qubed-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ae99b8d994a26452b308ecc2e7f40b3209bdcc827a9966c9451dc6e124aab0a1", size = 592940, upload-time = "2026-02-04T13:27:02.719Z" }, + { url = "https://files.pythonhosted.org/packages/59/33/84d0b4d21a5153131b4e8a321bb959ab0309a220a875001bcb3901393564/qubed-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b0819d34638e5a31891576feaa6889f4b16aa0f159876c83694281c86b628363", size = 694999, upload-time = "2026-02-04T13:27:10.953Z" }, + { url = "https://files.pythonhosted.org/packages/6f/87/8d1dea898d0e70a46a9c788fee66c07fdfed08ab46b99849962458a1945e/qubed-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c9a047da1cd4ee8b6c8e84e8d26cae383c46033ae7af4c8b8641a36f5b1d9c43", size = 662808, upload-time = "2026-02-04T13:27:20.788Z" }, + { url = "https://files.pythonhosted.org/packages/35/61/ac065cd10f6109e27b57b498d539be67ac1e594e7ede519124696d5175be/qubed-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1db61763554caf12adf40095fc6fb951bd115665ac692655ceed3c3dc9aaeeeb", size = 633806, upload-time = "2026-02-04T13:27:29.057Z" }, + { url = "https://files.pythonhosted.org/packages/72/55/3761a4acd6169fed3cbe5cf809efada6ef14aa9c6cdb7007033a5f8f300b/qubed-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:8a3734e6ee8954da87ebbf319402a0ab0e16e0d64a10b5b1a1e6ee13d0eec244", size = 274537, upload-time = "2026-02-04T13:27:40.483Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e1/ade8497e74afd3e6dae8ea1d79fec46ea0c284ae25e6f96ccb1b5c687496/qubed-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2f7ad49d36086114a9c48c5bbd774ec2fe9e4fbe7064e5af70eeeed1a1696444", size = 388382, upload-time = "2026-02-04T13:26:58.926Z" }, + { url = "https://files.pythonhosted.org/packages/48/96/00629bd9796c7438b613dbeca97ae4349694ce45a9f1998ff45d3f3f7aab/qubed-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6832cc6010c2f0fffbca3751c0204876da03e5feae294d2896acaea9482f3e6", size = 376862, upload-time = "2026-02-04T13:26:54.841Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ae/b94eee7a2de48c1fe5fcff2abeb1f0b66f0e2959d8f8319b358814be896d/qubed-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f9273475076dafcb45bb8a510dc7a3a44c81d486edaf8fda88a3da414a318cb", size = 416993, upload-time = "2026-02-04T13:26:02.472Z" }, + { url = "https://files.pythonhosted.org/packages/ea/cc/832aa8537960349d4bb043762d57171e1256611ebda815381cabb7f92ce1/qubed-0.3.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8825a2d7e0ddaf3b841f3a746669ca8a195a86e4a0a04a5a0ce26987f4b976b1", size = 424594, upload-time = "2026-02-04T13:26:12.328Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cd/21bc5fed290401da7774fc05b32cf045dae07b208b3169924ecbb59069fb/qubed-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0758cd417772386f7ba3972c6b4a23258569e654ef5cc77f15d0d19c1db8d7d8", size = 544629, upload-time = "2026-02-04T13:26:23.789Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f1/0c291803b21b811c1398d8d1133dc3fabc2d6a8aab1804c2b8788af5eaee/qubed-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5f3999551b6d888320002a7c7c978c75efbce8f2ad449a2ddafbf3df89f4cfd", size = 453413, upload-time = "2026-02-04T13:26:35.125Z" }, + { url = "https://files.pythonhosted.org/packages/ac/84/8ce812bae0fc382715eaf831bc3d6fbdd10683e1c9d47e0b7f0b62df60b7/qubed-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71e33a38e02b632efb454ae2ca90e818201e6f6706485f2ac1d45e69f977f1c", size = 427902, upload-time = "2026-02-04T13:26:49.156Z" }, + { url = "https://files.pythonhosted.org/packages/69/40/40845475c5153521783adbf80f2455fbb33ff625c29b6ba8e57555970afc/qubed-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9de33e0a06bde6068ef1f2dc1df354826c9a1e63e8263cba4be55db3e24dd7a", size = 450608, upload-time = "2026-02-04T13:26:42.944Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c0/100edf7a233d917f2979fbbe3a18e20d515df4f7564847452e71cc8e914b/qubed-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4ed3902eaf6ffaf248cdd680f52cc48ca7a9c6a259738c013c382d6d9ae9a0bf", size = 592941, upload-time = "2026-02-04T13:27:03.839Z" }, + { url = "https://files.pythonhosted.org/packages/ec/50/18bd283574ad125576b267e37cb906399abb80a3b30eda70cf629ea0d65b/qubed-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fb8344fd7942086f1878c355f5fa3bfd7241022b3264384d72af9dc21083da9e", size = 694756, upload-time = "2026-02-04T13:27:12.072Z" }, + { url = "https://files.pythonhosted.org/packages/c7/44/c8154bb943855c3def9537b9643a901e4be827581b1240a69846ff6811a5/qubed-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7a3c85eebed4bc4b229793fb27a2cad19caddd36df4115cbe62e3f2762ac94a6", size = 662092, upload-time = "2026-02-04T13:27:21.837Z" }, + { url = "https://files.pythonhosted.org/packages/19/69/017821dda7e5fe9b69cf5ae962668c632c83448f47c4be1a1256ac7c7fae/qubed-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2e2ad894d86d07181d7345c7555835c3fbbf16655a3adbc15368b44b407c570", size = 634032, upload-time = "2026-02-04T13:27:30.397Z" }, + { url = "https://files.pythonhosted.org/packages/7b/be/3e853dd96781110b82e2d5ba51a14884ef7518a85578f19db1fdfee5f74e/qubed-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:71541f0d98df10e22e40c11f54867df3272436f87758e1c10c49d074571b821d", size = 274558, upload-time = "2026-02-04T13:27:41.563Z" }, + { url = "https://files.pythonhosted.org/packages/f6/78/00920a7dab93468c6abd4364900372adf5a6e02373874fee8a048b173e2f/qubed-0.3.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0982545641cb7877c25ceefc788e2e0c5918b8d942419b1b3ebecf8ef64aa6c1", size = 388026, upload-time = "2026-02-04T13:26:59.877Z" }, + { url = "https://files.pythonhosted.org/packages/17/32/763131474decd86745ba83d5c7c77dcb95fc6144e44d61ac26c4970c8bc3/qubed-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:26432bf22b7aeab036c763639c1874471eea8f58b69bcc789c746fcf6a0135e0", size = 376678, upload-time = "2026-02-04T13:26:55.884Z" }, + { url = "https://files.pythonhosted.org/packages/ec/33/859744b54e692514c18d7d1c356b0dd49e01308990962b3d05edacf421f0/qubed-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5144c5f0e9929ef0219b5a06d43d58c5c111c165a21313f98892200d23a46e40", size = 417055, upload-time = "2026-02-04T13:26:03.989Z" }, + { url = "https://files.pythonhosted.org/packages/7b/52/d3fcd58088922485566dac0c613ce54b5afb411a47ac1c0fc30f394e4d56/qubed-0.3.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7be7875347f1fab4342e503f69f2cf7ec77e23134c17ee119489a26c6abf81dc", size = 424312, upload-time = "2026-02-04T13:26:13.767Z" }, + { url = "https://files.pythonhosted.org/packages/6b/46/0159a2f0f3a9ac907454cf5e7e9de53409470535feeab1f005a57cff9869/qubed-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6b44d86229cd4b43b524eab440ae8b3e4a1e7706815d9393c56bf02c09f25f4", size = 544218, upload-time = "2026-02-04T13:26:25.249Z" }, + { url = "https://files.pythonhosted.org/packages/aa/06/b890c192d4d05a9ceeaacfec2c9ef1bc7f4ed5a9a88613442cd409a7103c/qubed-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0426c2cc15f126584a64df6e27ee0162d44d413493689218544b444972d67b2", size = 453095, upload-time = "2026-02-04T13:26:36.147Z" }, + { url = "https://files.pythonhosted.org/packages/01/88/31e64cd98f079243157ced5d0a6ca3c0637e3e93982269bff5d6accd36fa/qubed-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04ed84be17ecff54a813b159b0ade5b6fe1daf9d0d3e8cce58160a71898de084", size = 427903, upload-time = "2026-02-04T13:26:50.046Z" }, + { url = "https://files.pythonhosted.org/packages/a4/c3/6fcdde26e45c18dfaf67cad426580d9efd8b44b839db29755cc10dde7e52/qubed-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ee277521885d362a2f4282874aadaa7b5b021473cf18b62ccbab49d02490738", size = 450209, upload-time = "2026-02-04T13:26:44.927Z" }, + { url = "https://files.pythonhosted.org/packages/87/63/8eb2f83b994ed59c6526f09b72fa8898188a0023ad0348d14bbcfdfc715c/qubed-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5e716bd15a5e614da853a0b835ad16a9c57a13f9243194abd4d7a4aabbf82dd0", size = 592620, upload-time = "2026-02-04T13:27:04.995Z" }, + { url = "https://files.pythonhosted.org/packages/4a/be/4fe1e7634101016eef06843805633c9ec6b8e69bc40ef50190de4284271d/qubed-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:71f18b847fa9bc205368dcd176cc27e1c5c0cd4cfd74d3e2770ba422b3b14ff0", size = 694654, upload-time = "2026-02-04T13:27:13.7Z" }, + { url = "https://files.pythonhosted.org/packages/7c/17/84cf9d4615ea0e29d8709346ffd5bed5bcfdb29baf8101949181c5239cc8/qubed-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:eeeb96bf930b2bd944c0b3145c18dda22673dcbe98af1b4fca0429c96eeefae3", size = 661802, upload-time = "2026-02-04T13:27:22.87Z" }, + { url = "https://files.pythonhosted.org/packages/7c/27/4826d44a5a47ed4d3ba3d64f519d6ce65511239dbd613081a2b5b03a425e/qubed-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c2a3519538aae695c2a129006010d1291bf387e86b2477587dd421d07d0d111", size = 634066, upload-time = "2026-02-04T13:27:31.613Z" }, + { url = "https://files.pythonhosted.org/packages/c9/cf/97f4ea7ca129eea1d97139e56c3af415f082f6b063a0d3da537c4cf77984/qubed-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:677f12a55d20a43beade986c45508668d93762072a7f8710dc768263832305f2", size = 274355, upload-time = "2026-02-04T13:27:42.559Z" }, + { url = "https://files.pythonhosted.org/packages/1c/25/2d77b2aa954c7581dfe614e4edc9e213e0bc537a791567955cc89c908ea3/qubed-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bce5c3ca22b4125f7b2337072892562949c66b22060f1458f0ffc8914dea664", size = 415858, upload-time = "2026-02-04T13:26:05.072Z" }, + { url = "https://files.pythonhosted.org/packages/cd/38/145f404396aedeb65ea110d14a74f02ab5f2c64fcf0441f196a8b509394c/qubed-0.3.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c7eeb24e4d156df188000388b8b93b8659b8ff56a3a0204eb868a63d43c9fb5d", size = 423639, upload-time = "2026-02-04T13:26:15.08Z" }, + { url = "https://files.pythonhosted.org/packages/52/54/04beadee9ce2fb42d9cd9dead26aebfd614f01d9c57287b07406abfbc567/qubed-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57bb442de810879c2e0801b6b9e32e9ec30d37dbd02b464809523ea5294fe655", size = 543014, upload-time = "2026-02-04T13:26:27.385Z" }, + { url = "https://files.pythonhosted.org/packages/e6/f6/37e2e0efb56b29f16d533b0bfa56fdbff94289e527e0a529e9a6547ef8b7/qubed-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:738ab71e1a714f3a3e3110e3eaac2778a5684f21515196b6b3c83843f9c5243b", size = 452627, upload-time = "2026-02-04T13:26:37.269Z" }, + { url = "https://files.pythonhosted.org/packages/e9/aa/699a433b495665b99c4bb2dd37f4c8a15147dc955174d4a4eec3a2105fc7/qubed-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:af5e093933172f0820860b2fb4d909a6bb8b17043bf40c143088bf1529da0d26", size = 591409, upload-time = "2026-02-04T13:27:06.111Z" }, + { url = "https://files.pythonhosted.org/packages/b2/fe/0d701edc6db7c16f50c3d41387791eae38c475d3f63677823ec5549a9b1d/qubed-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f0a5caf87d9fc853adde336759ef88e174be84b74bc29d582788fe70735dbba4", size = 694115, upload-time = "2026-02-04T13:27:14.784Z" }, + { url = "https://files.pythonhosted.org/packages/dd/5b/3a91f3ee0de53bcdb4a6c80590243952acb891c088ddcaf066d4a209d0df/qubed-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8144ab517ef48f43c49b97d07c05d230015222f8c091bb1daac00ef62bfc74d9", size = 661144, upload-time = "2026-02-04T13:27:24.061Z" }, + { url = "https://files.pythonhosted.org/packages/34/3e/28ab2031409540bc38f3f6e2db1d546b9d7c242755b6bf5c1ad4b7cab85a/qubed-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e164e030591f2ed0eb5525efe785ff04fc7080f0ef4ccfe8d83e25091006d709", size = 633167, upload-time = "2026-02-04T13:27:33.18Z" }, + { url = "https://files.pythonhosted.org/packages/a3/90/8651f479d7a726bc5f25cb90f99f33420fec6355b71248eb9b266753bce9/qubed-0.3.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:49b0eec981057347991bc80b3886501ca45ee0e426843c0450a8b0710d444659", size = 387842, upload-time = "2026-02-04T13:27:00.858Z" }, + { url = "https://files.pythonhosted.org/packages/1d/69/679e544a4fe1505b9f78f047ce1c81cf6db84b382c58d4a6ca46cfa48327/qubed-0.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97f9c034ae3ad1d7123e269c7fba225c20dbbaeebdd80803c77a69f3b010f8ff", size = 376202, upload-time = "2026-02-04T13:26:56.852Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1d/d4a5fa3a40e697f1ec8337e152cc241ec6aeff84f7514a6cfbee6b6536f5/qubed-0.3.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d154b12afffb5891beb06157b5bfc31e33d579d6a8682d866eb848bb18cc55f", size = 416737, upload-time = "2026-02-04T13:26:06.481Z" }, + { url = "https://files.pythonhosted.org/packages/6e/66/efc34b57ee3d21334d6127b187e51a249a37484b707cbed393d464419d09/qubed-0.3.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac14223782c4f346167a23511408347cf2a5c109c07f4319a9eb8f08bb4cdd53", size = 424440, upload-time = "2026-02-04T13:26:16.861Z" }, + { url = "https://files.pythonhosted.org/packages/c2/11/27f13777d9a4f2f0425c32cdc4f6fb528393e238768c185124abe15ff024/qubed-0.3.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e80a636152fa172ac298cb87bdae96412fa5f9e9a2149d1cb94bb4068508c941", size = 540728, upload-time = "2026-02-04T13:26:28.82Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9c/8ed6325f5c9c8ff96a41adef53f111bcf5dec51d2687afd2fac8504f19fc/qubed-0.3.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cb088a6846416ca092be5793c5191df97a94a3c3e5c43468be42b811ef14020", size = 453464, upload-time = "2026-02-04T13:26:38.885Z" }, + { url = "https://files.pythonhosted.org/packages/b1/d6/c0dac0a00e3730130f897389d263042c26b2dd182cbffb2960b93c64007d/qubed-0.3.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a5e0cae1aba8bd95d020bc127bc404211c96a0ff66502f2bd5ff04a8fa06643", size = 427694, upload-time = "2026-02-04T13:26:51.557Z" }, + { url = "https://files.pythonhosted.org/packages/de/e6/51e368c70bc5d3ee557b92e059fe1280330ed70d537cf8739ba71f316319/qubed-0.3.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:409c6475c99f28e372e48c9fc13284a48fffadfb6f54e531aad59d608457de41", size = 451222, upload-time = "2026-02-04T13:26:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/3a/74/5deba084e718c14509af8a4bb676785d91dc6516ac633e1b72dbf0598216/qubed-0.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:246332f045e37f6e88c773d4c8684441d0ec2a40c8ede7bae896c8ac6d513471", size = 592438, upload-time = "2026-02-04T13:27:07.033Z" }, + { url = "https://files.pythonhosted.org/packages/28/c6/f41468881fde149c23df5bf568bac54bce9409374c76043ba19f159185c2/qubed-0.3.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2caf36b5cba258fb2f6301f879d4a16ad1a74648a0593d9f057c6b6aff603fd5", size = 694800, upload-time = "2026-02-04T13:27:16.309Z" }, + { url = "https://files.pythonhosted.org/packages/f2/76/409605ac8bf26382d51d0e9df55344fa3cede74feaaebaf75a9fc07b221e/qubed-0.3.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4c5ce4d40840f45d2c359649a49a4fb271ec1650a162d20d5fea1c7106cb375d", size = 661966, upload-time = "2026-02-04T13:27:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/83/56/6efbbf4df4d483390c679456f87daed5e80c8f663d4d5065689ae6e8fc27/qubed-0.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5aa6c0d749a3186f1d4fb38e5ece4ba3513ee9cf24d182156e35fc7d637ce08", size = 634051, upload-time = "2026-02-04T13:27:34.241Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8b/65aef7336037d71978ea2e33da4a6c43262f2e31b84ee74c32e85f2aff4e/qubed-0.3.1-cp314-cp314-win32.whl", hash = "sha256:f4b7f53c722d0550a6be0e1ac148a79228f0cda2f3c32e9297b86bdd61c228d9", size = 257945, upload-time = "2026-02-04T13:27:44.705Z" }, + { url = "https://files.pythonhosted.org/packages/9b/89/0249375839f15086a08f213d25c0aa3828e16808cf68bdb088eb01125520/qubed-0.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:c861104640c86883a5e0c8ae8682eb5eb417f4506282d36adfa9329bad26a3a7", size = 274944, upload-time = "2026-02-04T13:27:43.771Z" }, + { url = "https://files.pythonhosted.org/packages/9a/3a/4694ed8a3a70b5ea484d8e82cb1988ddc5b19aebf9433ea5ced28263b64f/qubed-0.3.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1ba620950ed169f9d9652597181b03fe37b7febef65c18956c5032006d06886", size = 416016, upload-time = "2026-02-04T13:26:07.498Z" }, + { url = "https://files.pythonhosted.org/packages/43/2c/56fcd7992f12856ffb6b01aa3f17b0e799ddeec6cae97eb5e632413750c3/qubed-0.3.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f76e96ae183a5f72a03f36681e995db7b9b6ecd2bce6b880135ef5f0dba51ad5", size = 423689, upload-time = "2026-02-04T13:26:18.458Z" }, + { url = "https://files.pythonhosted.org/packages/8e/40/0a3d024e77ec6223e7256dcb92013a1ba139e569cba5dcd1470679171f1a/qubed-0.3.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d256f1db00336ce347e1d646d2e1065bdfe1d8de9b06cc60ab1e81aa5a135363", size = 544069, upload-time = "2026-02-04T13:26:30.318Z" }, + { url = "https://files.pythonhosted.org/packages/51/de/c32a46fbe272b436681bdda6d3073308598e98af4a74f6c26e1d07c0ddf4/qubed-0.3.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c38414c20f17128d0c62de60515e54d280fb35c13a576aa0d4bbf8e8b6b7ff7", size = 452810, upload-time = "2026-02-04T13:26:39.827Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e9/3059877538ad438428d12200141e155a5e3521fbeacb361a7d95c187fb2d/qubed-0.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6dba1d9c479c79605c1d0ddb841f93b5fac94f80085a9cbdca3319b1111baadd", size = 591547, upload-time = "2026-02-04T13:27:08.312Z" }, + { url = "https://files.pythonhosted.org/packages/2d/0d/10ac0b1f602b6f54bc57b49bb9e672b9dacb70fff960206bcd52aff0de3b/qubed-0.3.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:ee0f20cd860ca67136765ef12cdcb04fafc15c0eab33ed9d733603d237d5e328", size = 693845, upload-time = "2026-02-04T13:27:17.444Z" }, + { url = "https://files.pythonhosted.org/packages/5f/47/3ed547c0fce3f7d5e794f739783ee758f72061b792053f68d99db89d852f/qubed-0.3.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9923d183c0c71a8c2a1b3e95a40df128141cedd7cd21f73c9d9a2aa34ad58f5a", size = 661304, upload-time = "2026-02-04T13:27:26.375Z" }, + { url = "https://files.pythonhosted.org/packages/b7/cc/fb5e887dfe9561a96bcd9969f8412736aaf8b40ea7fc76edb7f6791b7787/qubed-0.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e9d5fcee6ee49265f43fb986860f105b7a2c735e8f7c80feeb02f618f1354ab1", size = 633291, upload-time = "2026-02-04T13:27:35.261Z" }, + { url = "https://files.pythonhosted.org/packages/8a/a4/61c0893c62b70b3ae7096b51071134939ce3a7a8dc6d3be3485a14c704ef/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0525ea3e7286a2e1306c2d53cde122d596fe32c97c4b77ffb791647b6d06df40", size = 417314, upload-time = "2026-02-04T13:26:10.193Z" }, + { url = "https://files.pythonhosted.org/packages/97/88/75d5cea6fa9af6b25e93a6fb6775199601020193c813eba624d626265b6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97b8e5a1ceabf68032b8c38a1a0fa2b425e2f137e1ae0b29d27a9b2c640d2923", size = 424549, upload-time = "2026-02-04T13:26:21.319Z" }, + { url = "https://files.pythonhosted.org/packages/0a/79/c14068df38c8bcadb81c204e06eb4f33388c40061792346b46c55864ec6c/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:536e9479355758596d552314b29185f8e9606ee1fa7551b9ad71d575fe41bfa0", size = 543966, upload-time = "2026-02-04T13:26:32.643Z" }, + { url = "https://files.pythonhosted.org/packages/34/6d/ead34b0f6aa8049b29db20bdc38c3378a1a71e6a4b3ef4d4b2b658b54774/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:288446a11cb22d194322858ebed1882d48cde40e65c40a5b2bee4d1eb204a7e0", size = 453255, upload-time = "2026-02-04T13:26:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/6c/69/e0616ec49e8bbf7b2f365b93336b63ade3e10c377a0f7921f4f78da1cc5b/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:164eed7d512094c9f6bedcbf62dcc15d78cfcf42133fb594fc68494dac0dde9b", size = 427645, upload-time = "2026-02-04T13:26:52.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/34/3455baea73fd18b29884c9e30806b20fffaccff1b57d533091e6cf849b4a/qubed-0.3.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48790481e503e6e65d0acd2afdc085bef6cc9f876d9d6ff791c1f6ece99b1e9f", size = 450995, upload-time = "2026-02-04T13:26:47.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/d2/57842a201a430afa1f6eec433f51cfcd08601486daaf074b42a1a4047314/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c7583848ea8e79d7b78427979fe7100fd0c271cf14efadfa5cd25e9878c67850", size = 593098, upload-time = "2026-02-04T13:27:09.828Z" }, + { url = "https://files.pythonhosted.org/packages/09/b3/dacad16f12ce515f8ad3c61ed7b6d1749f90b9c36b1a0947ef5bace5ed0c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:ab4475288640f2e380f3704fb7b44f4e6d8a8987041f6fb3cc76ecdc02e333cd", size = 694846, upload-time = "2026-02-04T13:27:18.574Z" }, + { url = "https://files.pythonhosted.org/packages/84/e6/78473835a64ba33c2e6963c120eeff496182f81006f955c19ca7ea17e25f/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:25d8d3603b16e3202b53145150bcb8ebedce14fc42fd076d17feaf3a0de897a2", size = 662539, upload-time = "2026-02-04T13:27:27.404Z" }, + { url = "https://files.pythonhosted.org/packages/60/7f/ab8d6582ba660b03da7617bab310f1db095a3ce622fdfcc5c2e50778208c/qubed-0.3.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:cd90899b3182ecf6bfac689664be37726a1f28d06200a8b15b22fdc3b79cd72b", size = 633528, upload-time = "2026-02-04T13:27:36.452Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +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, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "rich" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, +] + +[[package]] +name = "rich-argparse" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "rich" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6a/e5/1064c43203a357d668cd42435f7a15fe6af51512d85b2104fecb937aa861/rich_argparse-1.8.0.tar.gz", hash = "sha256:679df3d832fa94ad6e4bdb07ded088cd7ea2dddc58ae9b2b46346a40b06cbc0c", size = 38940, upload-time = "2026-05-01T15:18:43.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/35/1cceccc5fcb50fa2ed53e2aa278cd032f3902682a73e763fb1ac3be8e6fa/rich_argparse-1.8.0-py3-none-any.whl", hash = "sha256:d2a3ce7854654e2253c578763ab0a32f05016f23a55fadba7b9a91b6c0e92142", size = 25616, upload-time = "2026-05-01T15:18:42.395Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/2a/9618a122aeb2a169a28b03889a2995fe297588964333d4a7d67bdf46e147/rpds_py-2026.6.3.tar.gz", hash = "sha256:1cebd1337c242e4ec2293e541f712b2da849b29f48f0c293684b71c0632625d4", size = 64051, upload-time = "2026-06-30T07:17:53.009Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/1f/a2dca5ffdbf1d475ffc4e80e4d5d720ff3a00f691795910116960ee12511/rpds_py-2026.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7b689145a1485c335569bd056464f3243a29af7ed3871c7be31ad624ba239bc7", size = 342174, upload-time = "2026-06-30T07:14:54.821Z" }, + { url = "https://files.pythonhosted.org/packages/4d/dc/323d08583c0832911768663d1944f0107fcd4088704858d84b5e06d105a0/rpds_py-2026.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:db08f45aecde626498fb3df07bcf6d2ec040af42e859a4f5040d79c200342911", size = 345513, upload-time = "2026-06-30T07:14:56.515Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2a/e31989834d18d2f26ec1d2774c5b1eb3331df4ea8ada525175294c94b48a/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc992ab27b15f852c76755eb2ab7dce86585ddadba6fa5946e58556088845b4", size = 373783, upload-time = "2026-06-30T07:14:57.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/fe/e80107ee3639585c9941c17d6a42cd65325022f656c023191fce78c324c8/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f88d653e7b3b779d71ae7454e20dcc9b6bae903f33c269db9f2be41bda3f261", size = 378316, upload-time = "2026-06-30T07:14:59.077Z" }, + { url = "https://files.pythonhosted.org/packages/22/6f/81e3adf81acfb6fa694de2a6e4e7d8863121e3e0799e0a7725e6cf5679c4/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e52655eaf81e32593abedaa4bfe33170c8cfedf3365ed9be6e11e07f148f0278", size = 499423, upload-time = "2026-06-30T07:15:00.488Z" }, + { url = "https://files.pythonhosted.org/packages/2d/9a/41263969df0ce3d9af2a96d5005a288200af1989aed3354bfceb5fc0b21f/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfcc8b909769d19db55c7cc9541eb64b9b774b1057ffffb4f1048070475bb9f9", size = 386077, upload-time = "2026-06-30T07:15:01.911Z" }, + { url = "https://files.pythonhosted.org/packages/5e/19/7e98f468bd50346faff5b10e5297374b443bfdddacc8e9fbc65984539597/rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c1255b302953c86a486b81d330d5ee1d5bd937691ce271b6be0ef0e299eaab7", size = 371315, upload-time = "2026-06-30T07:15:03.317Z" }, + { url = "https://files.pythonhosted.org/packages/99/3c/2b973b4d371906a134b03decfea7f5d9835a2c6d263454392e15b64b5b18/rpds_py-2026.6.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:8d2294a31386bfa251d8c8a39472beee17db67d4f1a6eabea665d35c9a4461c3", size = 383502, upload-time = "2026-06-30T07:15:04.627Z" }, + { url = "https://files.pythonhosted.org/packages/98/2a/12e2799500af0a307bca76b63361c51f9fe479223561489c29eea1f2ee41/rpds_py-2026.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8f23ead891a3b762f35ab3b04623da7056545b48aa60d59957e6789914545da", size = 402673, upload-time = "2026-06-30T07:15:05.856Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e3/21e5872d165fe08be4f229e3d5ee9d90019c0bf0e5538de60dbd54009450/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:421aba32367055614287a4292b6a17f1939c9452299f7a0209c117e990b646d4", size = 549964, upload-time = "2026-06-30T07:15:07.159Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d0/5ee0fe36844297de8123bee27bc12078c1a7416ad9f1b8a8ca18d6b0c0ac/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1e5822dfc2f0d4ab7e745eaa6d85945069329beeccef965af3f3bb26058fcab6", size = 615446, upload-time = "2026-06-30T07:15:08.531Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/1ea5873cb683f2fbe5f21b23ea1f6d179ead19f3c5b249b7eb5dca568ef2/rpds_py-2026.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:83e35b57523816c8613fd0776b40cd8bb9f596b37ddd2692eb4a6bb5ab2f8c93", size = 576975, upload-time = "2026-06-30T07:15:09.97Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e1/90ef639217a5ddb15b7f4f61b1c33911fd044ad03c311bafdd2bcab85582/rpds_py-2026.6.3-cp311-cp311-win32.whl", hash = "sha256:de3eceba0b683bcbb1ab93da016d0270df1f9ae7be716b40214c5dafac6ea45a", size = 204453, upload-time = "2026-06-30T07:15:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/f2/b7/b7a1695d7af36f521fb11e80d6d3adbd744f73b921859bd3c2a2c0dc706f/rpds_py-2026.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:2c54a076ca4d370980ab57bc0e31df57bbe8d41340436a90ef8b1219a3cbb127", size = 223219, upload-time = "2026-06-30T07:15:12.476Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/145afacf796e4506062825941176ad9445c2dcf2b3b6a1f13d3030a15e19/rpds_py-2026.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:168c733a7112e071bb7a66460e667edfcff06c017a3c523f7a8a8e08d0140804", size = 219137, upload-time = "2026-06-30T07:15:13.631Z" }, + { url = "https://files.pythonhosted.org/packages/5c/be/2e8974163072e7bab7df1a5acd54c4498e75e35d6d18b864d3a9d5dadc92/rpds_py-2026.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a0811d33247c3d6128a3001d763f2aa056bb3425204335400ac54f89eec3a0d0", size = 343691, upload-time = "2026-06-30T07:15:14.96Z" }, + { url = "https://files.pythonhosted.org/packages/a4/73/319dfa745dd668efe89309141ded489126461fcecd2b8f3a3cda185129b6/rpds_py-2026.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:538949e262e46caa31ac01bdb3c1e8f642622922cacbabbae6a8445d9dc33eaf", size = 338542, upload-time = "2026-06-30T07:15:16.267Z" }, + { url = "https://files.pythonhosted.org/packages/21/63/4239893be1c4d09b709b1a8f6be4188f0870084ff547f46606b8a75f1b03/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55927d532399c2c646100ff7feb48eaa940ad70f42cd68e1328f3ded9f81ca24", size = 368180, upload-time = "2026-06-30T07:15:17.62Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ca/9c5de382225234ceb37b1844ebdb140db12b2a278bb9efe2fcd19f6c82ce/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f56f1695bc5c0871cbc33dc0130fcf503aab0c57dcc5a6700a4f49eba4f2652e", size = 375067, upload-time = "2026-06-30T07:15:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/863f69d1bf04ade34b7fe0d59b9fdf6f0135fe2d7cbca74f1d665589559d/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:270b293dae9058fc9fcedab50f13cebf46fb8ed1d1d54e0521a9da5d6b211975", size = 490509, upload-time = "2026-06-30T07:15:20.434Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ef/eac16a12048b45ec7c7fa94f2be3438a5f26bf9cc8580b18a1cfd609b7f6/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:127565fead0a10943b282957bd5447804ff3160ad79f2ad2635e6d249e380680", size = 382754, upload-time = "2026-06-30T07:15:21.831Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/d2f3f532616be4d06c316ef119683e832bd3d41e112bf3a88f4151c95b17/rpds_py-2026.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecabd69db66de867690f9797f2f8fa27ba501bbc24540cbdbdc649cd15888ba6", size = 366189, upload-time = "2026-06-30T07:15:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/e3/29/41a7b0e98a4b44cd676ab7598419623373eb43b20be68c084935c1a8cf88/rpds_py-2026.6.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:58eadac9cd119677b60e1cf8ac4052f35949d71b8a9e5556efccbe82533cf22a", size = 377750, upload-time = "2026-06-30T07:15:24.659Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/ecda0bec46f9a1565090bcdc941d023f6a25aff85fda28f89f8d19878152/rpds_py-2026.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7491ee23305ac3eb59e492b6945881f5cd77a6f731061a3f25b77fd40f9e99a4", size = 395576, upload-time = "2026-06-30T07:15:25.987Z" }, + { url = "https://files.pythonhosted.org/packages/68/a8/6ed52f03ee6cb854ce78785cc9a9a672eb880e83fd7224d471f667d151f1/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2c99f7e8ccb3dd6e3e4bfeac657a7b208c9bac8075f4b078c02d7404c34107fa", size = 543807, upload-time = "2026-06-30T07:15:27.356Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d6/156c0d3eea27ba09b92562ba2364ba124c0a061b199e17eac637cd25a5e2/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62698275682bf121181861295c9181e789030a2d516071f5b8f3c23c170cd0fc", size = 611187, upload-time = "2026-06-30T07:15:28.931Z" }, + { url = "https://files.pythonhosted.org/packages/f1/31/774212ed989c62f7f310220089f9b0a3fb8f40f5443d1727abd5d9f52bc9/rpds_py-2026.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a214c993455f99a89aaeadc9b21241900037adc9d97203e374d75513c5911822", size = 573030, upload-time = "2026-06-30T07:15:30.553Z" }, + { url = "https://files.pythonhosted.org/packages/c9/50/22f73127a41f1ce4f87fe39aadfb9a126345801c274aa93ae88456249327/rpds_py-2026.6.3-cp312-cp312-win32.whl", hash = "sha256:501f9f04a588d6a09179368c57071301445191767c64e4b52a6aa9871f1ef5ed", size = 202185, upload-time = "2026-06-30T07:15:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3a/f0ee4d4dde9d3b69dedf1b5f74e7a40017046d55052d173e418c6a94f960/rpds_py-2026.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:2c958bf94822e9290a40aaf2a822d4bc5c88099093e3948ad6c571eca9272e5f", size = 220394, upload-time = "2026-06-30T07:15:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/f3/83/3382fe37f809b59f02aac04dbc4e765b480b46ee0227ed516e3bdc4d3dfc/rpds_py-2026.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:22bffe6042b9bcb0822bcd1955ec00e245daf17b4344e4ed8e9551b976b63e96", size = 215753, upload-time = "2026-06-30T07:15:34.778Z" }, + { url = "https://files.pythonhosted.org/packages/a4/9e/b818ee580026ec578138e961027a68820c40afeb1ec8f6819b54fb99e196/rpds_py-2026.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3cfe765c1da0072636ca06628261e0ea05688e160d5c8a03e0217c3854037223", size = 343012, upload-time = "2026-06-30T07:15:36.005Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6b/686d9dc4359a8f163cfbbf89ee0b4e586431de22fe8248edb63a8cf50d49/rpds_py-2026.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4d78253f6996be4901669ad25319f842f740eccf4d58e3c7f3dd39e6dde1d8f", size = 338203, upload-time = "2026-06-30T07:15:37.462Z" }, + { url = "https://files.pythonhosted.org/packages/9e/9b/069aa329940f8207615e091f5eedbbd40e1e15eac68a0790fd05ccdf796c/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54f45a148e28767bf343d33a684693c70e451c6f4c0e9904709a723fafbdfc1f", size = 367984, upload-time = "2026-06-30T07:15:39.008Z" }, + { url = "https://files.pythonhosted.org/packages/14/db/34c203e4becff3703e4d3bc121842c00b8689197f398161203a880052f4e/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:842e7b070435622248c7a2c44ae53fa1440e073cc3023bc919fed570884097a7", size = 374815, upload-time = "2026-06-30T07:15:40.253Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/8071067d2cc453d916ad836e828c943f575e8a44612537759002a1e07381/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8020133a74bd81b4572dd8e4be028a6b1ebcd70e6726edc3918008c08bee6ee6", size = 490545, upload-time = "2026-06-30T07:15:41.729Z" }, + { url = "https://files.pythonhosted.org/packages/a3/42/da06c5aa8f0484ff07f270787434204d9f4535e2f8c3b51ed402267e63c3/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdc7e35386f3847df728fbcb5e887e2d79c19e2fa1eba9e51b6621d23e3243af", size = 382828, upload-time = "2026-06-30T07:15:43.327Z" }, + { url = "https://files.pythonhosted.org/packages/57/d7/fe978efc2ae50abe48eb7464668ea99f53c010c60aeebb7b35ad27f23661/rpds_py-2026.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acac386b453c2516111b50985d60ce46e7fadb5ea71ae7b25f4c946935bf27cf", size = 365678, upload-time = "2026-06-30T07:15:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/1d8922e1990b2a6eb532b6ff53d3e73d2b3bbffc84116c75826bee73dfc6/rpds_py-2026.6.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:425560c6fa0415f27261727bb20bd097568485e5eb0c121f1949417d1c516885", size = 377811, upload-time = "2026-06-30T07:15:46.523Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3d/198dceafb4fb034a6a47347e1b0735d34e0bd4a50be4e898d408ee66cb14/rpds_py-2026.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a550fb4950a06dde3beb4721f5ad4b25bf4513784665b0a8522c792e2bd822a4", size = 395382, upload-time = "2026-06-30T07:15:47.955Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f1/13968e49655d40b6b19d8b9140296bbc6f1d86b3f0f6c346cf9f1adddf4b/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f4bca01b63096f606e095734dd56e74e175f94cfbf24ff3d63281cec61f7bb7", size = 543832, upload-time = "2026-06-30T07:15:49.33Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ab/289bcb1b90bd3e40a2900c561fa0e2087345ecbb094f0b870f2345142b7c/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ccffae9a092a00deb7efd545fe5e2c33c33b88e7c054337e9a74c179347d0b7d", size = 611011, upload-time = "2026-06-30T07:15:50.847Z" }, + { url = "https://files.pythonhosted.org/packages/1e/16/5043105e679436ccfbc8e5e0dd2d663ed18a8b8113515fd06a5e5d77c83e/rpds_py-2026.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1cf01971c4f2c5553b772a542e4aaf191789cd331bc2cd4ff0e6e65ba49e1e97", size = 572431, upload-time = "2026-06-30T07:15:52.394Z" }, + { url = "https://files.pythonhosted.org/packages/85/ed/adab103321c0a6565d5ae1c2998349bc3ee175b82ccc5ae8fc04cc413075/rpds_py-2026.6.3-cp313-cp313-win32.whl", hash = "sha256:8c3d1e9c15b9d51ca0391e13da1a25a0a4df3c58a37c9dc368e0736cf7f69df0", size = 201710, upload-time = "2026-06-30T07:15:53.894Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ed/a03b09668e74e5dabbf2e211f6468e1820c0552f7b0500082da31841bf7b/rpds_py-2026.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:9250a9a0a6fd4648b3f868da8d91a4c52b5811a62df58e753d50ae4454a36f80", size = 219454, upload-time = "2026-06-30T07:15:55.25Z" }, + { url = "https://files.pythonhosted.org/packages/27/17/b8642c12930b71bc2b25831f6708ccf0f75abcd11883932ec9ce54ba3a78/rpds_py-2026.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:900a67df3fd1660b035a4761c4ce73c382ea6b35f90f9863c36c6fd8bf8b09bb", size = 215063, upload-time = "2026-06-30T07:15:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/7fbe9dcdaf857fb3f63c2a2284b62492d95f5e8334e947e5fb6e7f68c9be/rpds_py-2026.6.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:931908d9fc855d8f74783377822be318edb6dcb19e47169dc038f9a1bf60b06e", size = 344510, upload-time = "2026-06-30T07:15:57.921Z" }, + { url = "https://files.pythonhosted.org/packages/ba/54/f785cc3d3f60839ca57a5af4927a9f347b07b2799c373fc20f7949f87c7e/rpds_py-2026.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7469697dce35be237db177d42e2a2ee26e6dcc5fc052078a6fefabd288c6edd", size = 339495, upload-time = "2026-06-30T07:15:59.238Z" }, + { url = "https://files.pythonhosted.org/packages/63/ef/d4cdaf309e6b095b43597103cf8c0b951d6cca2acce68c474f75ec12e0c7/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcfbcf66006befb9fd2aeaa9e01feaf881b4dc330a02ba07d2322b1c11be7b5d", size = 369454, upload-time = "2026-06-30T07:16:01.021Z" }, + { url = "https://files.pythonhosted.org/packages/96/4a/9559a68b7ee15db09d7981212e8c2e219d2a1d6d4faa0391d813c3496a36/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847927daf4cffbd4e90e42bc890069897101edd015f956cb8721b3473372edda", size = 374583, upload-time = "2026-06-30T07:16:02.287Z" }, + { url = "https://files.pythonhosted.org/packages/ef/75/8964aa7d2c6e8ac43eba8eb6e6b0fdda1f46d39f2fc3e6aa9f2cb17f485d/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aca6c1ef08a82bfe327cc156da694660f599923e2e6665b6d81c9c2d0ac9ffc8", size = 492919, upload-time = "2026-06-30T07:16:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/8f/97/6908094ac804115e65aedfd90f1b5fee4eebebd3f6c4cfc5419939267565/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ae50181a047c871561212bb97f7932a2d45fb53e947bd9b57ebad85b529cbc53", size = 383725, upload-time = "2026-06-30T07:16:05.305Z" }, + { url = "https://files.pythonhosted.org/packages/d1/9c/0d1fdc2e7aba23e290d603bc494e97bd205bae262ce33c6b32a69768ed5e/rpds_py-2026.6.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc319e5a1de4b6913aac94bf6a2f9e847371e0a140a43dd4991db1a09bc2d504", size = 367255, upload-time = "2026-06-30T07:16:07.086Z" }, + { url = "https://files.pythonhosted.org/packages/c4/fe/f0209ca4a9ed074bc8acb44dfd0e81c3122e94c9689f5645b7973a866719/rpds_py-2026.6.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e4316bf32babbed84e691e352faf967ce2f0f024174a8643c37c94a1080374fc", size = 379060, upload-time = "2026-06-30T07:16:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/c6/8d/f1cc54c616b9d8897de8738aac148d20afca93f68187475fe194d09a71b9/rpds_py-2026.6.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8c6e5a2f750cc71c3e3b11d71661f21d6f9bc6cebc6564b1466417a1ec03ec77", size = 395960, upload-time = "2026-06-30T07:16:09.989Z" }, + { url = "https://files.pythonhosted.org/packages/fb/04/aafff00f73aeca2945f734f1d483c64ab8f472d0864ab02377fd8e89c3b2/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4470ce197d4090875cf6affbf1f853338387428df97c4fb7b7106317b8214698", size = 545356, upload-time = "2026-06-30T07:16:11.816Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cc/e229663b9e4ddac5a4acbe9085dd80a71af2a5d356b8b39d6bff233f24b0/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea964164cc9afa72d4d9b23cc28dafae93693c0a53e0b42acbff15b22c3f9ddd", size = 612319, upload-time = "2026-06-30T07:16:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7a/8a0e6d3e6cd066af108b71b43122c3fe158dd9eb86acac626593a2582eb1/rpds_py-2026.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:639c8929aa0afe81be836b04de888460d6bed38b9c54cfc18da8f6bfabf5af5d", size = 573508, upload-time = "2026-06-30T07:16:15.23Z" }, + { url = "https://files.pythonhosted.org/packages/87/03/2a69ab618a789cf6cf85c86bb844c62d090e700ab1a2aa676b3741b6c516/rpds_py-2026.6.3-cp314-cp314-win32.whl", hash = "sha256:882076c00c0a608b131187055ddc5ae29f2e7eaf870d6168980420d58528a5c8", size = 202504, upload-time = "2026-06-30T07:16:16.893Z" }, + { url = "https://files.pythonhosted.org/packages/85/62/a3892ba945f4e24c78f352e5de3c7620d8479f73f211406a97263d13c7d2/rpds_py-2026.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:0be972be84cfcaf46c8c6edf690ca0f154ac17babf1f6a955a51579b34ad2dc5", size = 220380, upload-time = "2026-06-30T07:16:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e7/c2bd44dc831931815ad11ebb5f430b5a0a4d3caa9de837107876c30c3432/rpds_py-2026.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:2a9c6f195058cb45335e8cc3802745c603d716eb96bc9625950c1aac71c0c703", size = 215976, upload-time = "2026-06-30T07:16:19.654Z" }, + { url = "https://files.pythonhosted.org/packages/79/9c/fff7b74bce9a091ec9a012a03f9ff5f69364eaf9451060dfc4486da2ffdd/rpds_py-2026.6.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f90938e92afda60266da758ee7d363447f7f0138c9559f9e1811629580582d90", size = 346840, upload-time = "2026-06-30T07:16:21.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/44/77bcb1168b33704908295533d27f10eb811e9e3e193e8993dc99572211d3/rpds_py-2026.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec829541c45bca16e61c7ae50c20501f213605beb75d1aba91a6ee37fbbb56a4", size = 340282, upload-time = "2026-06-30T07:16:22.875Z" }, + { url = "https://files.pythonhosted.org/packages/87/3c/7a9081c7c9e645b39efe19e4ffbeccd80add246327cd9b888aecffd72317/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd70d95892096cdb26f15a00c45907b17817577aa8d1c76b2dcc2788391f9e9", size = 370403, upload-time = "2026-06-30T07:16:24.415Z" }, + { url = "https://files.pythonhosted.org/packages/f7/69/af47021eb7dad6ff3396cb001c08f0f3c4d06c20253f75be6421a59fe6b7/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29dfa0533a5d4c94d4dfa1b694fcb56c9c63aad8330ffdd816fd225d0a7a162f", size = 376055, upload-time = "2026-06-30T07:16:26.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/fc/a3bcf517084396a6dd258c592567a3c011ba4557f2fde23dceaf26e74f2e/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af05d726809bff6b141be124d4c7ce998f9c9c7f30edb1f46c07aa103d540b41", size = 494419, upload-time = "2026-06-30T07:16:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/c9/eb/13d529d1788135425c7bf207f8463458ca5d92e43f3f701365b83e9dffc1/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9826217f048f620d9a712672818bf231442c1b35d96b227a07eabd11b4bb6945", size = 384848, upload-time = "2026-06-30T07:16:29.183Z" }, + { url = "https://files.pythonhosted.org/packages/8e/f4/b7ac49f30013aba8f7b9566b1dd07e81de95e708c1374b7bacc5b9bc5c9c/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536bceea4fa4acf7e1c61da2b5786304367c816c8895be71b8f537c480b0ea1f", size = 371369, upload-time = "2026-06-30T07:16:30.912Z" }, + { url = "https://files.pythonhosted.org/packages/31/86/6260bafa622f788b07ddec0e52d810305c8b9b0b8c27f58a2ab04bf62b4f/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:bc0011654b91cc4fb2ae701bec0a0ba1e552c0714247fa7af6c59e0ccfa3a4e1", size = 379673, upload-time = "2026-06-30T07:16:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/c3/03f1ee79a047b48daeca157c89a18509cde22b6b951d642b9b0af1be660a/rpds_py-2026.6.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:539d75de9e0d536c84ff18dfeb805398e58227001ce09231a26a08b9aed1ee0e", size = 397500, upload-time = "2026-06-30T07:16:34.471Z" }, + { url = "https://files.pythonhosted.org/packages/f0/95/8ed0cd8c377dca12aea498f119fe639fc474d1461545c39d2b5872eb1c0f/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:166cf54d9f44fc6ceb53c7860258dde44a81406646de79f8ed3234fca3b6e538", size = 545978, upload-time = "2026-06-30T07:16:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/0eb57f0eaa83f8fc152a7e03de968ab77e1f00732bebc892b190c6eebde7/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d34c20167764fbcf927194d532dd7e0c56772f0a5f943fa5ef9e9afbba8fb9db", size = 613350, upload-time = "2026-06-30T07:16:38.213Z" }, + { url = "https://files.pythonhosted.org/packages/5b/de/e0674bdbc3ef7634989b3f854c3f34bc1f587d36e5bfdc5c378d57034619/rpds_py-2026.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ea7bb13b7c9a29791f87a0387ba7d3ad3a6d783d827e4d3f27b40a0ff44495e2", size = 576486, upload-time = "2026-06-30T07:16:39.797Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f6/21101359743cd136ada781e8210a85769578422ba460672eea0e29739200/rpds_py-2026.6.3-cp314-cp314t-win32.whl", hash = "sha256:6de4744d05bd1aa1be4ed7ea1189e3979196808008113bbbf899a460966b925e", size = 201068, upload-time = "2026-06-30T07:16:41.316Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b2/9574d4d44f7760c2aa32d92a0a4f41698e33f5b204a0bf5c9758f52c79d5/rpds_py-2026.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c7b9a2f8f4d8e90af72571d3d495deebdd7e3c75451f5b41719aee166e940fc2", size = 220600, upload-time = "2026-06-30T07:16:43.091Z" }, + { url = "https://files.pythonhosted.org/packages/08/ae/f23a2697e6ee6340a578b0f136be6483657bef0c6f9497b752bb5c0964bb/rpds_py-2026.6.3-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:e059c5dde6452b44424bd1834557556c226b57781dee1227af23518459722b13", size = 344726, upload-time = "2026-06-30T07:16:44.5Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/e7b3a1a5358dd32c930a1062d8e15b67fd6e8922e81df9e91706d66ee5c8/rpds_py-2026.6.3-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2f7c26fbc5acd2522b95d4177fe4710ffd8e9b20529e703ffbf8db4d93903f05", size = 339587, upload-time = "2026-06-30T07:16:46.255Z" }, + { url = "https://files.pythonhosted.org/packages/ec/64/10a85681916ca55fffb91b0a211f84e34297c109243484dd6394660a8a7c/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3086b538543802f84c843911242db20447de00d8752dd0efc936dbcf02218ba", size = 369585, upload-time = "2026-06-30T07:16:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/76/c2/baf95c7c38823e12ba34407c5f5767a89e5cf2233895e56f608167ae9493/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2e5c5ee828d42cb11760761c0af6507927bec42d0ad5458f97c9203b054617", size = 375479, upload-time = "2026-06-30T07:16:49.93Z" }, + { url = "https://files.pythonhosted.org/packages/6a/94/0aad06c72d65101e11d33528d438cda99a39ce0da99466e156158f2541d3/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0c1e5d10cdc7135537988c74a0188da68e2f3c30813ba3744ab1e42e0480f9", size = 492418, upload-time = "2026-06-30T07:16:51.641Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/de3f5a479a1f056535d7489819639d8cd591ea6281d700390b43b1abd745/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c2642a7603ec0b16ed77da4555db3b4b472341904873788327c0b0d7b95f1bb", size = 384123, upload-time = "2026-06-30T07:16:53.622Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/bf09bd1b145bb2671c03e1e6d1ab8651858d90d8c7dfeadd85a37a934fd8/rpds_py-2026.6.3-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4320744c1ffdd95a603def63344bfab2d33edeab301c5007e7de9f9f5b3885", size = 367351, upload-time = "2026-06-30T07:16:55.241Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ea/1bb734f314b8be319149ddee80b18bd41372bdcfbdf88d28131c0cd37719/rpds_py-2026.6.3-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:a9f4645593036b81bbdb36b9c8e0ea0d1c3fee968c4d59db0344c14087ef143a", size = 378827, upload-time = "2026-06-30T07:16:56.841Z" }, + { url = "https://files.pythonhosted.org/packages/4b/93/d9611e5b25e26df9a3649813ed66193ace9347a7c7fc4ab7cf70e94851c0/rpds_py-2026.6.3-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e55d236be29255554da47abe5c577637db7c24a02b8b46f0ca9524c855801868", size = 395966, upload-time = "2026-06-30T07:16:58.557Z" }, + { url = "https://files.pythonhosted.org/packages/c3/cb/99d77e16e5534ae1d90629bbe419ba6ee170833a6a85e3aa1cc41726fbbc/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:24e9c5386e16669b674a69c156c8eeefcb578f3b3397b713b08e6d60f3c7b187", size = 545680, upload-time = "2026-06-30T07:17:00.164Z" }, + { url = "https://files.pythonhosted.org/packages/59/15/11a29755f790cef7a2f755e8e14f4f0c33f39489e1893a632a2eee59672b/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c60924535c75f1566b6eb75b5c31a48a43fef04fa2d0d201acbad8a9969c6107", size = 611853, upload-time = "2026-06-30T07:17:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/0c27547e21644da938fb530f7e1a8148dd24d02db07e7a5f2567a17ce710/rpds_py-2026.6.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:38a2fea2787428f811719ceb9114cb78964a3138838320c29ac39526c79c16ba", size = 573715, upload-time = "2026-06-30T07:17:03.693Z" }, + { url = "https://files.pythonhosted.org/packages/29/71/4d8fcf700931815594bce892255bbd973b94efaf0fc1932b0590df18d886/rpds_py-2026.6.3-cp315-cp315-win32.whl", hash = "sha256:d483fe17f01ad64b7bf7cc38fcefff1ca9fb83f8c2b2542b68f97ffe0611b369", size = 202864, upload-time = "2026-06-30T07:17:05.746Z" }, + { url = "https://files.pythonhosted.org/packages/eb/62/b577562de0edbb55b2be85ce5fd09c33e386b9b13eee09833af4240fd5c4/rpds_py-2026.6.3-cp315-cp315-win_amd64.whl", hash = "sha256:67e3a721ffc5d8d2210d3671872298c4a84e4b8035cfe42ffd7cde35d772b146", size = 220430, upload-time = "2026-06-30T07:17:07.471Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/d6d0b2509825141eef60669a5739eec88dbc6a48053d6c92993a5704defe/rpds_py-2026.6.3-cp315-cp315-win_arm64.whl", hash = "sha256:6e84adbcf4bf841aed8116a8264b9f50b4cb3e7bd89b516122e616ac56ca269e", size = 215877, upload-time = "2026-06-30T07:17:09.008Z" }, + { url = "https://files.pythonhosted.org/packages/b7/bf/f3ea278f0afd615c1d0f19cb69043a41526e2bb600c2b536eb192218eb27/rpds_py-2026.6.3-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ae6dd8f10bd17aad820876d24caec9efdafd80a318d16c0a48edb5e136902c6b", size = 346933, upload-time = "2026-06-30T07:17:10.762Z" }, + { url = "https://files.pythonhosted.org/packages/9d/29/9907bdf1c5346763cf10b7f6852aad86652168c259def904cbe0082c5864/rpds_py-2026.6.3-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:bdbd97738551fca3917c1bd7188bec1920bb520104f28e7e1007f9ceb17b7690", size = 340274, upload-time = "2026-06-30T07:17:12.266Z" }, + { url = "https://files.pythonhosted.org/packages/6f/2c/8e03767b5778ef25cebf74a7a91a2c3806f8eced4c92cb7406bbe060756d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b95977e7211527ab0ba576e286d023389fbeeb32a6b7b771665d333c60e5342", size = 370763, upload-time = "2026-06-30T07:17:14.107Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e1/df2a7e1ba2efd796af26194250b8d42c821b46592311595162af9ef0528d/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15fde0e6fb0d88a60d221204873743e5d9f0b7d29165e62cd86d0413ad74ba6", size = 376467, upload-time = "2026-06-30T07:17:15.76Z" }, + { url = "https://files.pythonhosted.org/packages/6b/de/8a0814d1946af29cb068fb259aa8622f856df1d0bab58429448726b537f5/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a136d453475ac0fcbda502ef1e6504bd28d6d904700915d278deeab0d00fe140", size = 496689, upload-time = "2026-06-30T07:17:17.308Z" }, + { url = "https://files.pythonhosted.org/packages/df/f3/f19e0c852ba13694f5a79f3b719331051573cb5693feacf8a88ffffc3a71/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f826877d462181e5eb1c26a0026b8d0cab05d99844ecb6d8bf3627a2ca0c0442", size = 385340, upload-time = "2026-06-30T07:17:18.928Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/7ec3a9d2d4351f99e37bcb06b6b6f954512646bfdbf9742e1de727865daf/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79486287de1730dbaff3dbd124d0ca4d2ef7f9d29bf2544f1f93c09b5bcbbd12", size = 372179, upload-time = "2026-06-30T07:17:20.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ac/9cee911dff2aaa9a5a8354f6610bf2e6a616de9197c5fff4f54f82585f1e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:808345f53cb952433ca2816f1604ff3515608a81784954f38d4452acfe8e61d5", size = 379993, upload-time = "2026-06-30T07:17:22.212Z" }, + { url = "https://files.pythonhosted.org/packages/83/6b/7c2a07ba88d1e9a936612f7a5d067467ed03d971d5a06f7d309dff044a7e/rpds_py-2026.6.3-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1967debc37f64f2c4dc90a7f563aec558b471966e12adcac4e1c4240496b6ebf", size = 398909, upload-time = "2026-06-30T07:17:23.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/0b/776ffcb66783637b0031f6d58d6fb55913c8b5abf00aeecd46bf933fb477/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:f0840b5b17057f7fd918b76183a4b5a0635f43e14eb2ce60dce1d4ee4707ea00", size = 546584, upload-time = "2026-06-30T07:17:25.264Z" }, + { url = "https://files.pythonhosted.org/packages/55/33/ba3bc04d7092bd553c9b2b195624992d2cc4f3de1f380b7b93cbee67bd79/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:faa679d19a6696fd54259ad321251ad77a13e70e03dd834daa762a44fb6196ef", size = 614357, upload-time = "2026-06-30T07:17:26.888Z" }, + { url = "https://files.pythonhosted.org/packages/8b/71/14edf065f04630b1a8472f7653cad03f6c478bcf95ea0e6aed55451e33ea/rpds_py-2026.6.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:23a439f31ccbeff1574e24889128821d1f7917470e830cf6544dced1c662262a", size = 576533, upload-time = "2026-06-30T07:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/ba/76/65002b08596c389105720a8c0d22298b8dc25a4baf89b2ce431343c8b1de/rpds_py-2026.6.3-cp315-cp315t-win32.whl", hash = "sha256:913ca42ccad3f8cc6e292b587ae8ae49c8c823e5dce51a736252fc7c7cdfa577", size = 201204, upload-time = "2026-06-30T07:17:30.193Z" }, + { url = "https://files.pythonhosted.org/packages/8c/97/d855d6b3c322d1f27e26f5241c42016b56cf01377ea8ed348285f54652f0/rpds_py-2026.6.3-cp315-cp315t-win_amd64.whl", hash = "sha256:ae3d4fe8c0b9213624fdce7279d70e3b148b682ca20719ebd193a23ebfa47324", size = 220719, upload-time = "2026-06-30T07:17:31.788Z" }, + { url = "https://files.pythonhosted.org/packages/b4/9c/f0d19ac587fd0e4ab6b72cda355e9c5a6166b01ef7e064e437aef8eb9fef/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4cf2d36a2357e4d07bb5a4f98801265327b48256867816cfd2ceb001e9754a8f", size = 349791, upload-time = "2026-06-30T07:17:33.315Z" }, + { url = "https://files.pythonhosted.org/packages/38/c7/1d49d204c9fd2ee6c537601dc4c1ba921e03363ca576bfab94a00254ac9a/rpds_py-2026.6.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:30c6dc199b24a5e3e81d50da0f00858c5bbdb2617a750395687f4339c5818171", size = 352842, upload-time = "2026-06-30T07:17:34.897Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e5/c0b5dc93cd0d4c06ce1f438907649514e2ea077bcd911e3154a51e96c38e/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9891e594296ab9dada6551c8e7b387b2721f27a67eecd528412e8906247a7b90", size = 382094, upload-time = "2026-06-30T07:17:36.514Z" }, + { url = "https://files.pythonhosted.org/packages/0d/54/ec0e907b4ca8d541112db352409bd15f871c9b243e0c92c9b5a46ae96f01/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5c2dc92304aa48a4a60443b548bb12f12e119d4b72f314015e67b9e1be97fca", size = 388662, upload-time = "2026-06-30T07:17:38.235Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f4/921c22a4fd0f1c1ac13a3996ffbf0aa67951e2c8ad0d1d9574938a2932e8/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:127e08c0642d880cf32ca47ec2a4a77b901f7e2dd1ad9762adb13955d72ffcc9", size = 504896, upload-time = "2026-06-30T07:17:39.689Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1b/a114b972cefa1ab1cdb3c7bb177cd3844a12826c507c722d3a73516dbbaf/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bb68f03f395eb793220b45c097bd4d8c32944393da0fad8b999efac0868fc8c", size = 391545, upload-time = "2026-06-30T07:17:41.336Z" }, + { url = "https://files.pythonhosted.org/packages/4e/98/af9b3db77d47fcbe6c8c1f36e2c2147ec70292819e99c325f871584a1c11/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3450b693fde92133e9f51060568a4c31fcca76d5e53bbd611e689ca446517e9", size = 380059, upload-time = "2026-06-30T07:17:42.857Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ba/0efd8668b97c1d26a61566386c636a7a7a09829e474fdf807caa15a2c844/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:5e8d07bddee435a2ff6f1920e18feff28d0bc4533e42f4bf6927fbd073312c41", size = 393235, upload-time = "2026-06-30T07:17:44.637Z" }, + { url = "https://files.pythonhosted.org/packages/62/90/8c139ee9690f73b0829f32647de6f40d826f8f443af6fa72644f96351aac/rpds_py-2026.6.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a83ae6c67b7676b9878378547ca8e93ed77a580037bcbcd1d32f739e1e6089c", size = 413008, upload-time = "2026-06-30T07:17:46.225Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/0043896fdd7828ce09a1d9a8b06433714d0960fc4ff3fc4aa72b666b764e/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2bfd04c19ddbd6640de0b51894d764bd2758854d5b75bd102d2ef10cb9c293a9", size = 558118, upload-time = "2026-06-30T07:17:47.759Z" }, + { url = "https://files.pythonhosted.org/packages/f6/40/02355f0e134f783a8f9814c4680a1bd311d37671577a5964ea838573ff37/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:ca6546b66be9dc4738b1b043d5ebd5488c66c578c5ff0fd0e8065313fe3afb76", size = 623138, upload-time = "2026-06-30T07:17:49.355Z" }, + { url = "https://files.pythonhosted.org/packages/10/85/48f0abdcef5cce4e034c7a5b0ceeceba0b01bf0d942824f4bb720afe2dec/rpds_py-2026.6.3-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8e65860d238379ed982fd9ba690579b5e95af2f4840f99c772816dbe573cb826", size = 586486, upload-time = "2026-06-30T07:17:51.141Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "narwhals" }, + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "scipy", version = "1.17.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fa/6f/37092bdb25f712817231799fc5674d8e704066a8a70c1d2d40517e18b4ab/scikit_learn-1.9.0.tar.gz", hash = "sha256:8833266989d3a5110178a9fae30783675460724d0e1efb13b14901d2c660c557", size = 7750767, upload-time = "2026-06-02T11:54:32.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/be/e844fd9586e66540a15b71924d17a6cbc1bb749e81ddd0a796bcdba4c055/scikit_learn-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9db6f4d34e68c8899e4cab27fdf8eafe6ed21f2ba52ceb25ea250cd237f8e47b", size = 8789686, upload-time = "2026-06-02T11:53:05.439Z" }, + { url = "https://files.pythonhosted.org/packages/42/e2/ff880f62677a17d035817d543cb0fc8727d01eccbee81c5f7fc733a9d856/scikit_learn-1.9.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f401448645a3e7bc115aa3c094097865155b34bff1cba8101857d9104e99074c", size = 8256782, upload-time = "2026-06-02T11:53:08.904Z" }, + { url = "https://files.pythonhosted.org/packages/25/64/eb40435e1a508ab1b4e284ce43ae80f6a162e5be5e38ed5a6fab467a9ea4/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd3a8ef0c758555a3b23c03adaa858af32f7736785ded50ad5991f59c4ed03fa", size = 8992419, upload-time = "2026-06-02T11:53:11.551Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/4810a28e473185429e45a57eebcc91fc991b33d889cc0676063e671db03d/scikit_learn-1.9.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7e254636164090da847715a27f8e5478feb98c40a9e0ee90cbd277de9e5ceb8", size = 9281411, upload-time = "2026-06-02T11:53:15.063Z" }, + { url = "https://files.pythonhosted.org/packages/3b/67/be3d369f40d8178ba3bd86635d132e08cb5329b023e4669d9426d84bc007/scikit_learn-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:5dc1818c77575d149e25fce9ef82dd7b7263ae372f03494158668ad632a69759", size = 8272736, upload-time = "2026-06-02T11:53:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/37/79/a733f02dc2118da7e77a134b34f39f40201a353311b011d20859d2db3556/scikit_learn-1.9.0-cp311-cp311-win_arm64.whl", hash = "sha256:366652351f092b219c248f1e72821e841960a63d8f358f1dcfd54dc1cbdbbc28", size = 7919564, upload-time = "2026-06-02T11:53:21.2Z" }, + { url = "https://files.pythonhosted.org/packages/ac/20/75f915ff375d6249e6550ac740fdbbd66159a068fd3af1400ff62036b07a/scikit_learn-1.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2bd41b0d201bc81575531b96b713d3eb5e5f50fb0b82101ff0f92294fdc236ac", size = 8741122, upload-time = "2026-06-02T11:53:24.08Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d5/2b5148f2279196775e1db2aeb85d14b70ac80e7e32b3b28e7ebeafb0901d/scikit_learn-1.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5be45aa4a42a68a533913a6ed736cf309de2226411c79ef8d609a5456f1939b1", size = 8261512, upload-time = "2026-06-02T11:53:27.183Z" }, + { url = "https://files.pythonhosted.org/packages/a0/ee/5adbc77656b71f9456a2f5a7a9fdb4bcf9207a6b962889f1c2f9323afa4e/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e50ed4da51974e86e940690e9a3d82e729b62b5a49f7c9bac534d515d39d86f", size = 8837603, upload-time = "2026-06-02T11:53:30.328Z" }, + { url = "https://files.pythonhosted.org/packages/6c/c2/63fdda36c56437eeb44aaf9493c8bcd62ce230ab1598924fc626ffbfa943/scikit_learn-1.9.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8", size = 9132097, upload-time = "2026-06-02T11:53:33.456Z" }, + { url = "https://files.pythonhosted.org/packages/83/a4/c8e67227c680e2259c8864ae72ff48b06e16a6f51253a22167aa02a8aa4e/scikit_learn-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:4306775fad04cc4b472a1b15af1ae9cede1540fbfcc17fbce3767cd8dc7ae283", size = 8211173, upload-time = "2026-06-02T11:53:36.602Z" }, + { url = "https://files.pythonhosted.org/packages/cf/fd/3c0863792e98e67e9184aa4029288a175935eb65443afcd30d4f143450cf/scikit_learn-1.9.0-cp312-cp312-win_arm64.whl", hash = "sha256:26e22435f63bcdcf396b574273f29f13dd531f5ea035801f5be10ba1540a4e60", size = 7867451, upload-time = "2026-06-02T11:53:39.075Z" }, + { url = "https://files.pythonhosted.org/packages/3c/01/cf3310626b6d48d3e9be69a1223f9180360b5e6edb045f50fade723ce494/scikit_learn-1.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:80746d63bd4b6eaca54d36fe5feaf4d28bb38dc6f9470f81c7cad7c40155f119", size = 8705188, upload-time = "2026-06-02T11:53:41.964Z" }, + { url = "https://files.pythonhosted.org/packages/3e/04/5acd7ae280c5f93b6ac5ef6cdec14eef4c8d1cd91d85b3292989c94d96b1/scikit_learn-1.9.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5b934c45c252844a91d69fda3a34cff5e7307e1db10d77cb10a3980312c74713", size = 8228299, upload-time = "2026-06-02T11:53:44.817Z" }, + { url = "https://files.pythonhosted.org/packages/0c/39/ffe829a5b8ecb40a518724a997794657fdc354ada5e8fe8e64d998c0bac9/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:38c3dcb9a1ffb85505ec53d54c7b4aea0cff70050425a7760c2af661ac85df05", size = 8789690, upload-time = "2026-06-02T11:53:47.461Z" }, + { url = "https://files.pythonhosted.org/packages/1f/88/8dab5de10c638c083772a6be83a3d8106ced492f74a928c8693638e5bb50/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da76d09304a4706db7cc1e3ebaa3b6b98a67365cc11d2996c4f1e58ba47df714", size = 9087723, upload-time = "2026-06-02T11:53:50.702Z" }, + { url = "https://files.pythonhosted.org/packages/20/3f/7917ca72464038f6240ec70c29f94862d08a34a74291ae4d4ec5eb8186a0/scikit_learn-1.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:5808d98f15c6bf6d9d96d2348c1997392a5888ce7097e664105f930c4bca1277", size = 8184330, upload-time = "2026-06-02T11:53:53.396Z" }, + { url = "https://files.pythonhosted.org/packages/78/c7/15739eb2f61fda3c54639e9942414e5a19ad8a8d1f5a3266afad7cb7df80/scikit_learn-1.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:d77f54c017633791bc0225a43e2f8d03745fdcfe4880268fcc4df15f505dec2e", size = 7840653, upload-time = "2026-06-02T11:53:56.035Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7d/c9a35cf59b20a86fec24d306f1547b78dec194b08d367ce2a3e4854169d9/scikit_learn-1.9.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9656acd4e93f74e0b66c8a36c88830a99252dfa900044d36bc2212ae89a47162", size = 8713289, upload-time = "2026-06-02T11:53:58.788Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a7/552a7821597c632b907f7bfe8f36f9f572777af8ef8a48353041cf8e091a/scikit_learn-1.9.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:24360002ae845e7866522b0a5bbf690802e7bc388cac8663502e78aa98598aa2", size = 8245141, upload-time = "2026-06-02T11:54:01.694Z" }, + { url = "https://files.pythonhosted.org/packages/7d/79/f4a0c4fe9711154cddabf913471153af79056382ddc612cfe5ee0ff4b72e/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5162ad10a418c8a282dde04c9aa06965de3e9a65f33c1440c0ae69bb1a09d913", size = 8847671, upload-time = "2026-06-02T11:54:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/f0/af/4d72d9e475ac83719160c662619e4bf7b95c19507cd582e7d0167a3c3dae/scikit_learn-1.9.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fea2cc5677ab49d6f5bade978c866da44957b712d92e9635e8b4f723013c3cb", size = 9118104, upload-time = "2026-06-02T11:54:07.205Z" }, + { url = "https://files.pythonhosted.org/packages/a2/d5/6a58eea2cb9abbb9b3f2bb8b2cfb3243d1152d69f442d256c7af71304769/scikit_learn-1.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:64fa347efc1c839c487433e40c5144d38c336e8a2b59c81aa8660373945c2673", size = 8290674, upload-time = "2026-06-02T11:54:10.087Z" }, + { url = "https://files.pythonhosted.org/packages/65/5b/d4c879cf358f1187141cf90ced473f087183489090244f50c124a2ee478b/scikit_learn-1.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:1b944b6db288f6b926e3650026ddafb988929de95d11fc2cc5fa117773c9ba42", size = 7978807, upload-time = "2026-06-02T11:54:12.769Z" }, + { url = "https://files.pythonhosted.org/packages/8a/43/bfae3121ec67ae09150d453c442c7c1cc166e9aefe056e6ab3b7728a5cfc/scikit_learn-1.9.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4ccacf04ca5f4b492158a5f28afe0ace43f81b2571e4b9a66d34848b46128949", size = 9031941, upload-time = "2026-06-02T11:54:15.436Z" }, + { url = "https://files.pythonhosted.org/packages/75/b0/20a4546eb17f3b25d3c66df15810411c14ed5065bcfab50b53c96fb627b2/scikit_learn-1.9.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:ee1a8db2c18c08e34c7412d4b10be1cac214cd4ea7dc9715a6a327eb49a37c96", size = 8613528, upload-time = "2026-06-02T11:54:18.842Z" }, + { url = "https://files.pythonhosted.org/packages/18/3c/e440e039bb82cd19004edaaad00acbde0fb9b461083c3ecf37941c557312/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:147e9329ef0e39f75d4cffa02b2aa48d827832684926cd5210d9a2cb5c57246b", size = 8855050, upload-time = "2026-06-02T11:54:21.699Z" }, + { url = "https://files.pythonhosted.org/packages/43/26/b341b8dab5998da6270a3a42c2152c578501354d36f944b5856757035ef8/scikit_learn-1.9.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bad8f8b9950321b54c965fdcbac6c6c55e79e16646b49977bcf3668d3870a1a", size = 9097190, upload-time = "2026-06-02T11:54:24.454Z" }, + { url = "https://files.pythonhosted.org/packages/fb/de/b650b4d69b84468cfa2e28a3ff7b8103743029e6446ce1a97fe060ef688c/scikit_learn-1.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:78fc56eafd4edb9575d2d8950d1dd152061abb573341a1cb7e099fc40f6c6666", size = 8963204, upload-time = "2026-06-02T11:54:27.428Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f3/ff83d76d7418112e5a61326443cdda87be3545dd8d6599c95b2481a4419e/scikit_learn-1.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa", size = 8222661, upload-time = "2026-06-02T11:54:30.192Z" }, +] + +[[package]] +name = "scipy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.12' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.12' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version < '3.12' and sys_platform == 'emscripten'", + "python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/75/b4ce781849931fef6fd529afa6b63711d5a733065722d0c3e2724af9e40a/scipy-1.17.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1f95b894f13729334fb990162e911c9e5dc1ab390c58aa6cbecb389c5b5e28ec", size = 31613675, upload-time = "2026-02-23T00:16:00.13Z" }, + { url = "https://files.pythonhosted.org/packages/f7/58/bccc2861b305abdd1b8663d6130c0b3d7cc22e8d86663edbc8401bfd40d4/scipy-1.17.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:e18f12c6b0bc5a592ed23d3f7b891f68fd7f8241d69b7883769eb5d5dfb52696", size = 28162057, upload-time = "2026-02-23T00:16:09.456Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ee/18146b7757ed4976276b9c9819108adbc73c5aad636e5353e20746b73069/scipy-1.17.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a3472cfbca0a54177d0faa68f697d8ba4c80bbdc19908c3465556d9f7efce9ee", size = 20334032, upload-time = "2026-02-23T00:16:17.358Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e6/cef1cf3557f0c54954198554a10016b6a03b2ec9e22a4e1df734936bd99c/scipy-1.17.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:766e0dc5a616d026a3a1cffa379af959671729083882f50307e18175797b3dfd", size = 22709533, upload-time = "2026-02-23T00:16:25.791Z" }, + { url = "https://files.pythonhosted.org/packages/4d/60/8804678875fc59362b0fb759ab3ecce1f09c10a735680318ac30da8cd76b/scipy-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:744b2bf3640d907b79f3fd7874efe432d1cf171ee721243e350f55234b4cec4c", size = 33062057, upload-time = "2026-02-23T00:16:36.931Z" }, + { url = "https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4", size = 35349300, upload-time = "2026-02-23T00:16:49.108Z" }, + { url = "https://files.pythonhosted.org/packages/b4/3d/7ccbbdcbb54c8fdc20d3b6930137c782a163fa626f0aef920349873421ba/scipy-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd96a1898c0a47be4520327e01f874acfd61fb48a9420f8aa9f6483412ffa444", size = 35127333, upload-time = "2026-02-23T00:17:01.293Z" }, + { url = "https://files.pythonhosted.org/packages/e8/19/f926cb11c42b15ba08e3a71e376d816ac08614f769b4f47e06c3580c836a/scipy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4eb6c25dd62ee8d5edf68a8e1c171dd71c292fdae95d8aeb3dd7d7de4c364082", size = 37741314, upload-time = "2026-02-23T00:17:12.576Z" }, + { url = "https://files.pythonhosted.org/packages/95/da/0d1df507cf574b3f224ccc3d45244c9a1d732c81dcb26b1e8a766ae271a8/scipy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:d30e57c72013c2a4fe441c2fcb8e77b14e152ad48b5464858e07e2ad9fbfceff", size = 36607512, upload-time = "2026-02-23T00:17:23.424Z" }, + { url = "https://files.pythonhosted.org/packages/68/7f/bdd79ceaad24b671543ffe0ef61ed8e659440eb683b66f033454dcee90eb/scipy-1.17.1-cp311-cp311-win_arm64.whl", hash = "sha256:9ecb4efb1cd6e8c4afea0daa91a87fbddbce1b99d2895d151596716c0b2e859d", size = 24599248, upload-time = "2026-02-23T00:17:34.561Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, + { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, + { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, + { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, + { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, + { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, + { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, + { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, + { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, + { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, + { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, + { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, + { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, + { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, + { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, + { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, + { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, + { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, + { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510, upload-time = "2026-02-23T00:21:01.015Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131, upload-time = "2026-02-23T00:21:05.888Z" }, + { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032, upload-time = "2026-02-23T00:21:09.904Z" }, + { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766, upload-time = "2026-02-23T00:21:14.313Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007, upload-time = "2026-02-23T00:21:19.663Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333, upload-time = "2026-02-23T00:21:25.278Z" }, + { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066, upload-time = "2026-02-23T00:21:31.358Z" }, + { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763, upload-time = "2026-02-23T00:21:37.247Z" }, + { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984, upload-time = "2026-02-23T00:22:35.023Z" }, + { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877, upload-time = "2026-02-23T00:22:39.798Z" }, + { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750, upload-time = "2026-02-23T00:21:42.289Z" }, + { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858, upload-time = "2026-02-23T00:21:47.706Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723, upload-time = "2026-02-23T00:21:52.039Z" }, + { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098, upload-time = "2026-02-23T00:21:56.185Z" }, + { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397, upload-time = "2026-02-23T00:22:01.404Z" }, + { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163, upload-time = "2026-02-23T00:22:07.024Z" }, + { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291, upload-time = "2026-02-23T00:22:12.585Z" }, + { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317, upload-time = "2026-02-23T00:22:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327, upload-time = "2026-02-23T00:22:24.442Z" }, + { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, +] + +[[package]] +name = "scipy" +version = "1.18.0" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a7/25/c2700dfaf6442b4effaa91af24ebce5dc9d31bb4a69706313aae70d72cd0/scipy-1.18.0.tar.gz", hash = "sha256:67b2ad2ad54c72ca6d04975a9b2df8c3638c34ddd5b28738e94fc2b57929d378", size = 30774447, upload-time = "2026-06-19T15:01:43.456Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/19/ca10ead60b0acc80b2b833c2c4a4f2ff753d0f58b811f70d911c7e94a25c/scipy-1.18.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:7bd21faaf5a1a3b2eff922d02db5f191b99a6518db9078a8fb23169f6d22259a", size = 31056519, upload-time = "2026-06-19T14:59:45.203Z" }, + { url = "https://files.pythonhosted.org/packages/96/72/1e6442a00cd2924d361aa1b642ab6373ec35c6fabf311a760be9f76e0f13/scipy-1.18.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:265915e79107de9f946b855e50d7470d5893ec3f54b342e1aa6201cbdcd8bb6b", size = 28681889, upload-time = "2026-06-19T14:59:48.103Z" }, + { url = "https://files.pythonhosted.org/packages/9b/2d/11dd93d21e147a73ba22bd75c0b9208d3a2e0ec76d53170ce7d9029b1015/scipy-1.18.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9ab7b758be6940954a713ee466e2043e9f6e2ed965c1fce5c91039f4be3d90a9", size = 20423580, upload-time = "2026-06-19T14:59:50.665Z" }, + { url = "https://files.pythonhosted.org/packages/9c/01/93552f75e0d2a7dd115a45e59209c51e8d514daff02fc887d2623be06fe1/scipy-1.18.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:97b6cddaaee0a779ef6b5ca83c9604b27cc16b2b8fc22c142652df8793319fb8", size = 23054441, upload-time = "2026-06-19T14:59:53.564Z" }, + { url = "https://files.pythonhosted.org/packages/3c/23/21f5e703643d66f21faa6b4c73195bfcad70c55efcb4f1ab327cd7c4101a/scipy-1.18.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:52a96e21517c7292375c0e27dd796a811f03fcea5fd4d108fdfea8145dcf17ab", size = 33968720, upload-time = "2026-06-19T14:59:56.415Z" }, + { url = "https://files.pythonhosted.org/packages/dd/aa/1b939f6c67ed68635bb538e6752d3dacc02f66535182e939a89581a44e9c/scipy-1.18.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f55797419e16e7f30cf88ffb3113ce0467f00cfe3f70d5c281730b21769bfc2", size = 35287115, upload-time = "2026-06-19T14:59:59.411Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ff/eec46be7e9234208f801062b53e1983085eddebd693f6c9bfb03b459830d/scipy-1.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ad033410e2e0672ffdc1042110cef20e1c46f8fd0616cee1d44d8d58fad8fc11", size = 35577989, upload-time = "2026-06-19T15:00:02.235Z" }, + { url = "https://files.pythonhosted.org/packages/84/ca/210d4759c7210bb7d269437421959b39a33434e2776b60c5cb8a763bb30a/scipy-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4a55985d54c769c872e64b7f4c8a81cc30ef700cc04296abbbf3705439c126de", size = 37421717, upload-time = "2026-06-19T15:00:05.102Z" }, + { url = "https://files.pythonhosted.org/packages/2b/54/9a9edb45345bd6744da5ddfb6628e5d5185920494c6a67ec45b6381004cb/scipy-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:71ccc8faa2dd16ac310233203474a8b5cb67f10dedd54a3116d34943f4b19132", size = 36597428, upload-time = "2026-06-19T15:00:08.112Z" }, + { url = "https://files.pythonhosted.org/packages/99/0e/33f32a2a58987e26aec0f7df252cbbad1e90ae77bdbc76f40dd4ed0cf0ea/scipy-1.18.0-cp312-cp312-win_arm64.whl", hash = "sha256:d88363fd9d8fbd3511bd273f1a49efb2a540773ddf92a91d57498ce7dd7f3e76", size = 24351481, upload-time = "2026-06-19T15:00:11.103Z" }, + { url = "https://files.pythonhosted.org/packages/05/52/9c0136c2de7ae0779b7b366447766cec6d9f0702c56bb8ffeb04c8fd3af4/scipy-1.18.0-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:09143f676d157d9f546d663504ef9c1becb819824f1afc018814176411942446", size = 31036107, upload-time = "2026-06-19T15:00:14.03Z" }, + { url = "https://files.pythonhosted.org/packages/02/73/0291a64843270f4efb86cdcf2ee0f2048631b65ec6b405398b2b4dbf11bf/scipy-1.18.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:5efe260f69417b97ddae455bfb5a95e8359f7f66ad7fa9522a60feb66f169520", size = 28663303, upload-time = "2026-06-19T15:00:16.819Z" }, + { url = "https://files.pythonhosted.org/packages/d3/0f/10ffa0b697a572f4e0d48b92a88895d366422f019f723e7e14a84c050dac/scipy-1.18.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:68363b7eaacd8b5dd426df56d782cc156468ac79a127a1b87ca597d6e2e82197", size = 20404960, upload-time = "2026-06-19T15:00:19.635Z" }, + { url = "https://files.pythonhosted.org/packages/7e/d2/e896cea21ba8edd6c81d4c55b1ffcc717e79698dcbebf9641b4cfb4c6622/scipy-1.18.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:c5557d8be5da8e41353fcd4d21491fdbab83b062fc579e94dc09a7c8ab4f669b", size = 23034074, upload-time = "2026-06-19T15:00:22.107Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b2/e83ea34279a52c03374477c74006256ec78df65fc877baa4617d6de1d202/scipy-1.18.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0d13bca67c096d89fb95ced0d8921807300fce0275643aef9533cc63a0773468", size = 33942038, upload-time = "2026-06-19T15:00:24.964Z" }, + { url = "https://files.pythonhosted.org/packages/f6/af/e8fe5fb136f51e2b01678b92cb4106d10d8cd68ec147ead2e7cb0ac75398/scipy-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a46f9273dbd0eb1cefba61c9b8648b4dfe3cbc14a080176f9a73e44b8336dc7f", size = 35266390, upload-time = "2026-06-19T15:00:28.059Z" }, + { url = "https://files.pythonhosted.org/packages/3a/49/2c5cbb907b56695fc67517811d1db234dfd83381a84814ec220aded2794d/scipy-1.18.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5aba46108853ddfc77906b6557aac839d2b52e900c1d72a1180adaaab58d265f", size = 35551324, upload-time = "2026-06-19T15:00:31.014Z" }, + { url = "https://files.pythonhosted.org/packages/bb/73/eda39f7a2d306ff0ffc574afd13c0bbb6d10a603d9a413998ee269487a80/scipy-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b6f758e35f12757b5d95c00bc6de2438e229c2664b7a92e96f205959d9f2dfa4", size = 37404785, upload-time = "2026-06-19T15:00:34.072Z" }, + { url = "https://files.pythonhosted.org/packages/b7/d2/ae881ee28d014f38e0ccbfd974a06a919ba9af34f1f74bf42b5301891d63/scipy-1.18.0-cp313-cp313-win_amd64.whl", hash = "sha256:1afac4a847207c7ff8efd321734a50b06d0280b3b2a2c0fc2f413101747ad7c7", size = 36554943, upload-time = "2026-06-19T15:00:36.903Z" }, + { url = "https://files.pythonhosted.org/packages/70/3a/21154e2d54eb3639c6bf4dbae2e531c68356bfe95990daa30df33b30d556/scipy-1.18.0-cp313-cp313-win_arm64.whl", hash = "sha256:c5dbddf60e58c2312316d097271a8e73d40eaf2eabfa4d95ed7d3695bbf2ce7b", size = 24350911, upload-time = "2026-06-19T15:00:40.062Z" }, + { url = "https://files.pythonhosted.org/packages/78/b5/915a19b3de2f7430062b509653563db1633ddbb6f021b06731521115d4e2/scipy-1.18.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:4c256ee70c0d1a8a2ace807e199ccd4e3f57037433842abb3fb36bc17eaa9578", size = 31036253, upload-time = "2026-06-19T15:00:43.216Z" }, + { url = "https://files.pythonhosted.org/packages/d7/88/b72def7262e150d16be13fca37a96481138d624e700340bc3362a7588929/scipy-1.18.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:2ef3abc54a4ffc53765374b0d5728532dfdd2585ed23f6b11c206a1f0b1b9af8", size = 28673758, upload-time = "2026-06-19T15:00:46.663Z" }, + { url = "https://files.pythonhosted.org/packages/91/02/2e636a61a525632c373cf6a9c24442a3ffb79e364d38e98b32042964ac32/scipy-1.18.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f2a6af57bd9e4a75d70e4117e78a1bbee84f79ae3fbb6d0111005d6ebcc4cb8d", size = 20415514, upload-time = "2026-06-19T15:00:49.399Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b6/2135974442f6aba159d9d39d774a1c8cb19947016725d69fecc685df45bf/scipy-1.18.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:3f1ac564d3bf6c03d861d2cd87a1bea0da2887136f7fb1bf519c05a8971452d6", size = 23034398, upload-time = "2026-06-19T15:00:51.941Z" }, + { url = "https://files.pythonhosted.org/packages/f6/e6/ba89ec5abf6ee9257c0d1ec985573f3ae32742c24bc03e016388a40b1b15/scipy-1.18.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40395a5fcd1abee49a5c7aaa98c29db393eedc835138560a588c47ec16156690", size = 33998032, upload-time = "2026-06-19T15:00:54.838Z" }, + { url = "https://files.pythonhosted.org/packages/7f/c4/bc41eb19b0fd0db868f4132920879019318d80cc522ad8f2bca4611af808/scipy-1.18.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ca01e8ae69f1b18e9a58d91afead31be3cef0dd905a10249dac559ee15460a0", size = 35283333, upload-time = "2026-06-19T15:00:58.152Z" }, + { url = "https://files.pythonhosted.org/packages/53/a4/cbdeef6eb3830a8462a9d4ada814de5fc984345cc9ecf17cbec51a036f1e/scipy-1.18.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7a7f3b01647384dbc3a711e8c6778e0aabbe93959249fef5c7393396bcac0867", size = 35610216, upload-time = "2026-06-19T15:01:01.155Z" }, + { url = "https://files.pythonhosted.org/packages/80/4d/b2b82502b65f661d1b789c1665dcdf315d5f12194e06fc0b37946294ebae/scipy-1.18.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6aa94e78ec192a30063a5e72e561c28af769dc311190b24fe91774eff1969709", size = 37418960, upload-time = "2026-06-19T15:01:04.155Z" }, + { url = "https://files.pythonhosted.org/packages/93/3e/902d836831474b0ab5a37d16404f7bc5fafd9efba632890e271ba952635f/scipy-1.18.0-cp314-cp314-win_amd64.whl", hash = "sha256:2d8bbdc6c817f5b4006a54d799d4f5bab6f910193cbb9a1ff310833d4d270f61", size = 37288845, upload-time = "2026-06-19T15:01:07.822Z" }, + { url = "https://files.pythonhosted.org/packages/b6/43/8d73b337a3bdb14daa0314f0434210747c02d79d729ce1777574a817dcf6/scipy-1.18.0-cp314-cp314-win_arm64.whl", hash = "sha256:18e9575f1569b2c54174e6159d32942e03731177f63dce7975f0a0c88d102f5b", size = 24988971, upload-time = "2026-06-19T15:01:11.076Z" }, + { url = "https://files.pythonhosted.org/packages/b4/b4/f11918b0508a2787031a0499a03fbe3546f3bb5ca05d01038c45b278c09a/scipy-1.18.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:f351e0dd702687d12a402b867a1b4146a256923e1c38317cbc472f6372b94707", size = 31399325, upload-time = "2026-06-19T15:01:13.723Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d1/1f287b57c0ff0ee5185dff3946d92c8017d39b0e431f0ae79a3ff1859512/scipy-1.18.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:7c7a51b33ce387193c97f228320cf8e87361daa1bba750638677729598b3e677", size = 29092110, upload-time = "2026-06-19T15:01:16.908Z" }, + { url = "https://files.pythonhosted.org/packages/ff/1a/7b74eb6c392fdcb27d414c0e7558a6d0231eb3b6d73571f479bb81ea8794/scipy-1.18.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:84031d7b052a54fae2f8632e0ec802073d385476eb9a63079bce6e23ef9283d4", size = 20833811, upload-time = "2026-06-19T15:01:20.488Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ad/f3941716320a7b9cb4d68734a903b45fe16eff5fb7da7e16f2e619304979/scipy-1.18.0-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:56abf29a7c067dde59be8b9a22d606a4ea1b2f2a4b756d9d903c62818f5dacce", size = 23396644, upload-time = "2026-06-19T15:01:23.364Z" }, + { url = "https://files.pythonhosted.org/packages/22/22/1446b62ffe07f9719b7d9b1b6a4e05a772833ae8f441fe4c22c34c9b250f/scipy-1.18.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ad44305cfa24b1ba5803cbbebf033590ccbac1aa5d612d727b785325ab408b0", size = 34079318, upload-time = "2026-06-19T15:01:26.002Z" }, + { url = "https://files.pythonhosted.org/packages/56/3b/b87da667098bb470fa30c7011b0ba351ee976dd395c78798c66e941665a3/scipy-1.18.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:945c1761b93f38d7f99ae81ae80c63e621471608c7eeead563f6df025585cd58", size = 35324320, upload-time = "2026-06-19T15:01:28.881Z" }, + { url = "https://files.pythonhosted.org/packages/f8/a1/c7932f91909759b0267f75fdea34e91309f96b895757534b76a90b6b4344/scipy-1.18.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1a4441f15d620578772a49e5ab48c0ee1f7a0220e387110283062729136b2553", size = 35699541, upload-time = "2026-06-19T15:01:31.968Z" }, + { url = "https://files.pythonhosted.org/packages/f7/86/5185061a1fcc41d18c5dc2463969b3a3964b31d9ac67b2fb05d4c7ff7670/scipy-1.18.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9aac6192fac56bf2ca534389d24623f07b39ff83317d58287285e7fbd622ff76", size = 37472480, upload-time = "2026-06-19T15:01:35.136Z" }, + { url = "https://files.pythonhosted.org/packages/31/8e/f04c68e39919a010d34f2ee1367fd705b0a25a02f609d755f0bfbc0a15fc/scipy-1.18.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e40baea28ae7f5475c779741e2d90b1247c78531207b49c7030e698ff81cee3f", size = 37365390, upload-time = "2026-06-19T15:01:38.091Z" }, + { url = "https://files.pythonhosted.org/packages/d5/19/969dc072906c84dd0a3b05dcf57ea750936087d7873549e408b35cfc3f97/scipy-1.18.0-cp314-cp314t-win_arm64.whl", hash = "sha256:368e0a705903c466aa5f08eefb39e6b1b6b2d659e7352a31fd9e2438365be0f8", size = 25279661, upload-time = "2026-06-19T15:01:40.817Z" }, +] + +[[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, 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, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, +] + +[[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, 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, upload-time = "2023-09-30T13:58:03.53Z" }, +] + +[[package]] +name = "termcolor" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/79/cf31d7a93a8fdc6aa0fbb665be84426a8c5a557d9240b6239e9e11e35fc5/termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5", size = 14434, upload-time = "2025-12-29T12:55:21.882Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/d1/8bb87d21e9aeb323cc03034f5eaf2c8f69841e40e4853c2627edf8111ed3/termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5", size = 7734, upload-time = "2025-12-29T12:55:20.718Z" }, +] + +[[package]] +name = "thermofeel" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fa/a5/aeec22f9a35735f62061d133206960b67e72a0ea3ac3ff1ce8bfb5b3e338/thermofeel-2.3.0.tar.gz", hash = "sha256:3546db63e93737e91692973d642c016c1ae832626258e2d8d31aca82fc0fb254", size = 50725, upload-time = "2026-07-16T10:50:30.858Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/e2/eac387d67ccf3df506e858af16d5a20201cbcf21dae53e923be2e70efbee/thermofeel-2.3.0-py3-none-any.whl", hash = "sha256:32b9b1db96edaebbff84c82d78f8850400c84e7b5c0e5c2304a39942a67972ad", size = 35296, upload-time = "2026-07-16T10:50:29.864Z" }, +] + +[[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, 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, upload-time = "2025-03-13T13:49:21.846Z" }, +] + +[[package]] +name = "toolz" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613, upload-time = "2025-10-17T04:03:21.661Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093, upload-time = "2025-10-17T04:03:20.435Z" }, +] + +[[package]] +name = "tqdm" +version = "4.70.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, +] + +[[package]] +name = "traitlets" +version = "5.15.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344, upload-time = "2026-06-03T12:26:06.181Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858, upload-time = "2026-06-03T12:26:04.395Z" }, +] + +[[package]] +name = "ty" +version = "0.0.64" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/aa/14c9965d3b173105692473897cc89c34cd91241368b2044e43167e1c17ff/ty-0.0.64.tar.gz", hash = "sha256:d12ddbb05f15158bb518af619378b385486450def95fb06f8ab98037febe9f2c", size = 6350966, upload-time = "2026-07-27T18:32:45.403Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/4c/c54937e4ff3fa7b34a99ea3387ec766bf0ad98dc8df8d792e89b388e658e/ty-0.0.64-py3-none-linux_armv6l.whl", hash = "sha256:3830a6675ab43635ced1c4c557f380ac4a49e9414e03975e4e4e8db644c64944", size = 12118357, upload-time = "2026-07-27T18:32:08.702Z" }, + { url = "https://files.pythonhosted.org/packages/ce/aa/a839ee2bc78e943d079e6abe199a97b4eeffb7e5c9a57326d69de452186a/ty-0.0.64-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3ff07d7bc32a2135f58afe57393789a32ea2fed1a66216129a8e535e76043903", size = 11790882, upload-time = "2026-07-27T18:32:10.997Z" }, + { url = "https://files.pythonhosted.org/packages/4c/de/19f14357888a7198438926303753cf749428e3d62e8980ff1e9a72a78402/ty-0.0.64-py3-none-macosx_11_0_arm64.whl", hash = "sha256:4f6d1c7f897cca05d12bacbf1435150d5ffa496099515aa6ed303c8b29e1d0bb", size = 11317394, upload-time = "2026-07-27T18:32:13.162Z" }, + { url = "https://files.pythonhosted.org/packages/08/2f/f54462300535ab99b551eda733177be2eef5dbc2997d3fdb357c4ddd760a/ty-0.0.64-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:138d6c37ad4bf8583aa7a9b29d90954151d7856f9910a03eae3eb34b34c57215", size = 11863042, upload-time = "2026-07-27T18:32:15.307Z" }, + { url = "https://files.pythonhosted.org/packages/5e/95/dbecf745520ebe8bd7b02fc55eee6441c9be312ebf6addce605eb52740dd/ty-0.0.64-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ed9719d1b7b66fb8efe073d860208a44c40af1f6cd5c2364aa9b323a1e579b4", size = 11910730, upload-time = "2026-07-27T18:32:17.467Z" }, + { url = "https://files.pythonhosted.org/packages/3b/26/12cfd40028e51ceed7b3cb645281c61c02eb64ff9fb0c09231d65c30ff25/ty-0.0.64-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d68b23e5169e2137b5f1de7169ab0cebecab6c8eda374c34c1f6394308f58242", size = 12631936, upload-time = "2026-07-27T18:32:19.533Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d0/65ffc2b0a686347193c6f98e9421a7fc2a96fc3cd0b1001cf7cf284baff9/ty-0.0.64-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f41cb07d89d32626fcaf3ed4d262778fcb28b2628b6ed1e172cd7b18820668d8", size = 13171049, upload-time = "2026-07-27T18:32:22.026Z" }, + { url = "https://files.pythonhosted.org/packages/f6/a4/975a5961842dcd6fa60f0770a102c0bba7509da909ab652919bfcdcd4fc7/ty-0.0.64-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f24e1504ab9e212f92356b82fe088fdeb3a39f9a2f4ff25e505d2e1d0db9056", size = 12826438, upload-time = "2026-07-27T18:32:24.178Z" }, + { url = "https://files.pythonhosted.org/packages/af/ef/dfb9b7f9bcc032d3b540b0d1f55f532a336e2fb41b1bd539c05ae81a151a/ty-0.0.64-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86db830cb914bb33bb8247b66ccea58de4496c2391bd42658aba744b439f3290", size = 12440880, upload-time = "2026-07-27T18:32:26.341Z" }, + { url = "https://files.pythonhosted.org/packages/ee/d0/bedac20505e8a8f5501ad73d7d15d8e421a563fef59993909a23036929a4/ty-0.0.64-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:652ee3d6d03bea76cd2fe8949c78bb5970394ebd7c5fd270e9518c0dee1b931d", size = 12782439, upload-time = "2026-07-27T18:32:28.642Z" }, + { url = "https://files.pythonhosted.org/packages/79/d5/795733f13ceff1378f08b3de0c49d0f518df220ed856b0dfac869f3b7c81/ty-0.0.64-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4838768295774a86e95f9ec5633e739d016adbbb69dcbdc62f3549578a11f624", size = 11814821, upload-time = "2026-07-27T18:32:30.632Z" }, + { url = "https://files.pythonhosted.org/packages/52/3e/9d99cd1e1831003434f508ed9f258a56543194afc3bbe051eba2545fa676/ty-0.0.64-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5a3d700669868599edf39ce5125196682f15a8880cc8c669bc2a83b99984d99b", size = 11928678, upload-time = "2026-07-27T18:32:32.888Z" }, + { url = "https://files.pythonhosted.org/packages/b8/3d/448f49a3503fb119a34348a5714bb92001f252fadbbb12d645f2e744b557/ty-0.0.64-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b161f0a82a8e2f2432db3bf7702b4d3924fa9486ba0014f6710a160fc157df0d", size = 12202249, upload-time = "2026-07-27T18:32:34.905Z" }, + { url = "https://files.pythonhosted.org/packages/dd/9b/75768e562cec990d189dc05807ae72890b20ffbd1e1f43597bb98db63c60/ty-0.0.64-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:39b9dd42908df47c2dc57dda87e656fab97097ffd2618474bbdea986af0d6a9d", size = 12548817, upload-time = "2026-07-27T18:32:36.995Z" }, + { url = "https://files.pythonhosted.org/packages/34/89/44cc276ea6ca0245495014758ffeadde1798fb0b5840c9cf36d8d2ed3250/ty-0.0.64-py3-none-win32.whl", hash = "sha256:d0676ab0e0935795e5843baa28dd5e366dc343d7c0945a996df9eab8e0644885", size = 11545474, upload-time = "2026-07-27T18:32:39.389Z" }, + { url = "https://files.pythonhosted.org/packages/01/7e/d1c8a871a38d17c8f168b9a6975f6247f7660f8334e517656a5e4b4a4858/ty-0.0.64-py3-none-win_amd64.whl", hash = "sha256:dcb9bd31f54097e362b776c26ab4564d4564cdd1355cb883481167a26c03cc3f", size = 12542987, upload-time = "2026-07-27T18:32:41.412Z" }, + { url = "https://files.pythonhosted.org/packages/35/4d/6d18640d0204cacd69abbaca95ad6a34c6d7e9169e9051d0117b17b827ec/ty-0.0.64-py3-none-win_arm64.whl", hash = "sha256:82cc34c1ad9a8feb6059aef193bebcecc656e548f6fab3d518bcd8b57d198d39", size = 11899263, upload-time = "2026-07-27T18:32:43.366Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.8.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/34/74/c6428f875774288bec1396f5bfcbc2d925700a4dad61727fd5f2b12f249d/wcwidth-0.8.2.tar.gz", hash = "sha256:91fbef97204b96a3d4d421609b80340b760cf33e26da123ff243d76b1fda8dda", size = 1466253, upload-time = "2026-06-29T18:11:11.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/42/3e5985a0a7e57de470b320c6d6a1a67c844f6737a587f3d44dd13d1819e7/wcwidth-0.8.2-py3-none-any.whl", hash = "sha256:d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85", size = 323166, upload-time = "2026-06-29T18:11:09.888Z" }, +] + +[[package]] +name = "wget" +version = "3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/6a/62e288da7bcda82b935ff0c6cfe542970f04e29c756b0e147251b2fb251f/wget-3.2.zip", hash = "sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061", size = 10857, upload-time = "2015-10-22T15:26:37.51Z" } + +[[package]] +name = "xarray" +version = "2026.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "packaging" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/96/3f7bdd00e505ec3698903415b30135024703e017b28c6b61f98da3193b0d/xarray-2026.7.0.tar.gz", hash = "sha256:361b495928fdbf5b58d0969bb6775339019da5e93ca74d61ddf4eb5edd6ce604", size = 3145348, upload-time = "2026-07-09T17:38:26.515Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/5b/28365212062939d213802e5e5fe855cdb231e1c2a93254ba1690066504e3/xarray-2026.7.0-py3-none-any.whl", hash = "sha256:bf9dd130b93806dc78e90c1b7ac24851b31557b888674c53622235691cf21824", size = 1426778, upload-time = "2026-07-09T17:38:24.224Z" }, +] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, +] From 5873bce3642627957f6c8f89fc8f21f0ceebba80 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 15:48:43 +0100 Subject: [PATCH 74/95] Pin filelock --- pproc/pyproject.toml | 3 +- pproc/tests/common/test_io.py | 3 +- pproc/uv.lock | 65 ++++++++++++++++++++++++++++++++--- 3 files changed, 64 insertions(+), 7 deletions(-) diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index 69ef4675..00280f35 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -21,7 +21,8 @@ dependencies = [ "earthkit-time >= 0.1.3", "earthkit-utils >= 0.2.1", "eccodes >= 1.6.1", - "filelock >= 3.12.0", + "fdb5lib", + "filelock >= 3.12.0,<3.32", "mir-python >= 0.2.0", "numexpr", "numpy >= 1.21.2", diff --git a/pproc/tests/common/test_io.py b/pproc/tests/common/test_io.py index bca69093..bcc2bf94 100644 --- a/pproc/tests/common/test_io.py +++ b/pproc/tests/common/test_io.py @@ -30,8 +30,6 @@ "param": [138, 155], "step": range(0, 7, 3), } - - def test_fdb_read(fdb): data = io.fdb_read(fdb, request) assert len(data.coords["param"]) == 2 @@ -128,6 +126,7 @@ def _write(target, message): [{"step": x} for x in range(12, 37, 6)], ], ], + ids=["file", "fileset"] ) def test_target_parallel(tmpdir, fdb, loc, out_loc, reqs): loc = loc.replace("TMPDIR", str(tmpdir)) diff --git a/pproc/uv.lock b/pproc/uv.lock index b71f8ecb..b777973f 100644 --- a/pproc/uv.lock +++ b/pproc/uv.lock @@ -650,13 +650,41 @@ wheels = [ { 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 = "fdb5lib" +version = "5.22.0.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eccodeslib" }, + { name = "eckitlib" }, + { name = "metkitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/49/5c1f7f151541c331d79522fe665e8a55fe9ffed3cde064bd71c063f7efba/fdb5lib-5.22.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:87d8af388e98a6f69723898b86fb5064ce131116925e5291d31f2dd75f6b9aa5", size = 1382211, upload-time = "2026-07-17T13:27:29.388Z" }, + { url = "https://files.pythonhosted.org/packages/81/1f/24f57837f246ac6fbe14749bb9c82af0c5c368a0e75a07a8b250ded04f3b/fdb5lib-5.22.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:0010a5f7e891805f65c75bc72943d0252ee4b7967b5fdfda2d8a2c517fecb7c4", size = 1411561, upload-time = "2026-07-17T13:23:49.057Z" }, + { url = "https://files.pythonhosted.org/packages/6f/31/dd1cd93184773b2827a34b0837973eab5ddebe4a9d2d19cd9127cb1191f7/fdb5lib-5.22.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f70cb2f13f68494cc7bee0b6375519c759a7086a518c55068acb66ee02926cb6", size = 1686593, upload-time = "2026-07-17T13:16:48.918Z" }, + { url = "https://files.pythonhosted.org/packages/c6/60/f5c9fc93e624548c009cc3089a01ce5248d0cfcabe6e8dfd767f22914d9f/fdb5lib-5.22.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fd90efb69d2a4aab231ae12d3665b1e175524b21af1502a7e417426167b27e18", size = 1666240, upload-time = "2026-07-17T13:32:49.89Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bb/8255376ba4821d362e6d41cdad33275b2ef8f018cf21ac7df727450471ce/fdb5lib-5.22.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:aa8527fb1d5586cc7541befd66fd437af8609e2c8a9b1c3f39403c3a25bdbfac", size = 1382212, upload-time = "2026-07-17T13:59:32.088Z" }, + { url = "https://files.pythonhosted.org/packages/78/81/17ae4c2defd367d8412a15d6668d2f365bd0d5ed25d4c2dcedc438092a41/fdb5lib-5.22.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:231bcb831f2caef376269ed9bc2080d671e6491e5f0a68c06927b2d9c2f54247", size = 1411561, upload-time = "2026-07-17T13:46:53.299Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ac/30a98657c871700dc22750515a72c7cb706669d86ba3ffd4311ebbcabc66/fdb5lib-5.22.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6efcb5d4c3bdd37d8d1f151e330d10beb8ebb4d798c6e934b9fdb8bdd150358d", size = 1686595, upload-time = "2026-07-17T13:17:08.019Z" }, + { url = "https://files.pythonhosted.org/packages/df/47/5990a0caeee4c1fd2527dad1830c3613cffaf3be58bdfa0ad9051c10b7a5/fdb5lib-5.22.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:13a7d72ee6a9c3a5ad6020ca5ebe4a253d2fd2864fc6e30ab0542aff3509ed5f", size = 1666241, upload-time = "2026-07-17T13:31:57.576Z" }, + { url = "https://files.pythonhosted.org/packages/22/11/eba302bf27ace0c7c93ece7c1d2236b95cb9130f0497039924ae06c30ab8/fdb5lib-5.22.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:de4afea1a1312ba217a9866ca178d6dfb6d9b1a6acee4cfc4beacfe054df3c1f", size = 1382211, upload-time = "2026-07-17T13:15:53.681Z" }, + { url = "https://files.pythonhosted.org/packages/ef/45/3e20a4d94b6635c1537a2ff0e72fe8c211ca0d4b5f95652b09a3ae175b50/fdb5lib-5.22.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:784e3a389e79502b00a5fdc7c042807f3c37a3118fe12fed32ed87fa434ba79b", size = 1411562, upload-time = "2026-07-17T13:43:43.886Z" }, + { url = "https://files.pythonhosted.org/packages/b7/ac/81153c8578456bf1bb1c1bc69d712177b695b5a3c97640a1e9fccd1f469e/fdb5lib-5.22.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e2238ac8d0c1d3a27c518d1e17fa0b7c6cf76a64dac2f25b1e55b987ab24b869", size = 1686594, upload-time = "2026-07-17T13:16:57.814Z" }, + { url = "https://files.pythonhosted.org/packages/42/93/f491422b46db859686f7820b706e9aff2e1968171e5fd0117a8392c57b14/fdb5lib-5.22.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ef674ca3f397a76e5fa5f38b7ce2070b08daa5f641f8da7ca1990b244ba17a65", size = 1666240, upload-time = "2026-07-17T13:29:12.866Z" }, + { url = "https://files.pythonhosted.org/packages/9a/b6/be543b0438e15e055ce11a984dd3fbd7c4667428b6bd71d3679985244b6a/fdb5lib-5.22.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:7e1f81e2349623edb7cd64fe5d99596b437fd9aa595741ae2001cd34ae4c0a33", size = 1382212, upload-time = "2026-07-17T13:59:03.879Z" }, + { url = "https://files.pythonhosted.org/packages/9a/74/9534c6f39b536259093830b475818297c6430bbd9747eb0c4b102a3217e0/fdb5lib-5.22.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:315b8cd55d4f405a95c09c566e47a5145c2e1e5bec4fda93239b37839edf6f7f", size = 1411563, upload-time = "2026-07-17T13:22:00.049Z" }, + { url = "https://files.pythonhosted.org/packages/12/f9/852f8dcdbc7091e69d1efe0f6280f4ab3cd54442a9eae92d30a54942d5f2/fdb5lib-5.22.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:aa9d55d36830c1fde15d766522326a5f931b5553ce8ead256eb321ab128ebed6", size = 1686595, upload-time = "2026-07-17T13:17:33.692Z" }, + { url = "https://files.pythonhosted.org/packages/0a/70/d7edf388ad0c8bcc693b632ea86df262617b2f0a1ac591d59209890c7fdb/fdb5lib-5.22.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:983e447ef67a8ecae44016f0b90003c2190013bb6824b4705a766dbd0c9cb990", size = 1666239, upload-time = "2026-07-17T13:30:00.03Z" }, +] + [[package]] name = "filelock" -version = "3.32.0" +version = "3.29.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c0/80/8232b582c4b318b817cf1274ba74976b07b34d35ef439b3eb948f98645a1/filelock-3.32.0.tar.gz", hash = "sha256:7be2ad23a14607ccc71808e68fe30848aeace7058ace17852f68e2a68e310402", size = 213757, upload-time = "2026-07-21T13:17:42.898Z" } +sdist = { url = "https://files.pythonhosted.org/packages/35/94/00f2059e4835eace3ae8fde680b932c496f8ec7bdc99168dfa53fb2e6b79/filelock-3.29.7.tar.gz", hash = "sha256:5b481979797ae69e72f0b389d89a80bdd585c260c5b3f1fb9c0a5ba9bb3f195d", size = 71521, upload-time = "2026-07-08T05:46:58.716Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/79/b4c714bef36bc4ec2beeae1e0c124f0223888cd8c6feb1cdc56038116920/filelock-3.32.0-py3-none-any.whl", hash = "sha256:d396bea984af47333ef05e50eae7eff88c84256de6112aea0ec48a233c064fe3", size = 97732, upload-time = "2026-07-21T13:17:41.55Z" }, + { url = "https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl", hash = "sha256:987db6f789a3a2a59f55081801b2b3697cb97e2a736b5f1a9e99b559285fbc51", size = 46036, upload-time = "2026-07-08T05:46:57.53Z" }, ] [[package]] @@ -1066,6 +1094,33 @@ wheels = [ { 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 = "metkitlib" +version = "1.19.0.26" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "eccodeslib" }, + { name = "eckitlib" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/97/ba9000713307e88ed6184bb183ac45b8868c7d03a8343d4ef839be9c50bc/metkitlib-1.19.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4161935ea9f57676f1a88c8becf31d9448cb757b2ece2b87b32b29c53786a46e", size = 989625, upload-time = "2026-07-17T13:27:34.039Z" }, + { url = "https://files.pythonhosted.org/packages/1a/c5/8b497e39f6b36ee4ffd46191d77fb395d432d681d812d456f0ee13796594/metkitlib-1.19.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:1f1602c112fc15d4dcf94a016cbce54b2f87e2be5fcf41f3cf3d219af50085d7", size = 1040412, upload-time = "2026-07-17T13:23:54.918Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5c/ca936bf7b3088c4ef51f89521d437a9e6d04aa6340609f12d3c106507965/metkitlib-1.19.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e350669905fad1a4d4b07164396b0f613cad762bde9bdd34d11cd1706ca2a925", size = 1081997, upload-time = "2026-07-17T13:16:52.531Z" }, + { url = "https://files.pythonhosted.org/packages/62/77/093233001432a0f33413d9158a7e5448eb190618115d0957c58c3fbc24b1/metkitlib-1.19.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:5eec63149eadbf95c4cb7fb7284744418dcbc4696358952311cb72d0c7992929", size = 1119066, upload-time = "2026-07-17T13:32:56.207Z" }, + { url = "https://files.pythonhosted.org/packages/39/f0/065e0a54ee7608e738aefd85b270e6e9f2a3981ca65e829ad48a2f3f525f/metkitlib-1.19.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:26a885638422eeed4cb17d6df2f7c006a0a2e6ce4f89a63aee841519814fe9c4", size = 989622, upload-time = "2026-07-17T13:59:36.595Z" }, + { url = "https://files.pythonhosted.org/packages/c9/33/ad9f953e39e41cd30bf9b8badb258ddee2d28d1878d18f50eff2cd76f632/metkitlib-1.19.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:d702ad19561ff93484643d844dc3813b32b0867f7a0af6a91ef982c9c9f6699d", size = 1040412, upload-time = "2026-07-17T13:46:58.768Z" }, + { url = "https://files.pythonhosted.org/packages/d4/bc/e1c0d04271e921a8bf8af38ff63a69716a1466ca8f81f219f0a84e1aac45/metkitlib-1.19.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:147d8919d33e97cbfbe0bca8419ac0e5567e40d75a70524976668d12eb63a16b", size = 1081998, upload-time = "2026-07-17T13:17:11.925Z" }, + { url = "https://files.pythonhosted.org/packages/be/12/c5786dc0aa79a9a04635610e9ff4d9957c28920bb1767ecc96fc454138eb/metkitlib-1.19.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:622d04e918f60ea12e7f847d555ec7e0bbab762d9c77ccfc1b3c3e6cdb9eab34", size = 1119064, upload-time = "2026-07-17T13:32:03.594Z" }, + { url = "https://files.pythonhosted.org/packages/8f/36/076dc6e6e7e2d7db8f7e990f9a0c96c029328ad7837c3967f506ed254007/metkitlib-1.19.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:58a913c507b583667a64a03089ded8c717bbcea4b9480737876d76990797b95f", size = 989628, upload-time = "2026-07-17T13:15:58.719Z" }, + { url = "https://files.pythonhosted.org/packages/e8/24/a7413c09ad1ed2ea20c1b2e7ce9f48024f205ec3ccb9c9df3a389fb025bd/metkitlib-1.19.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:56b3e15c0f36d6e54d6342bcb5a118e13ae142609ad84c80a1dc4768795b8406", size = 1040412, upload-time = "2026-07-17T13:43:49.535Z" }, + { url = "https://files.pythonhosted.org/packages/60/1c/67814c698a7c1b5e6ab66cb72a451e98e31769ccd33ff4dde21d97e4c92c/metkitlib-1.19.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:0ae9cfe83021d7e769a84683773e173c9c781bfef79d9c7dbebff4e9464f561b", size = 1081994, upload-time = "2026-07-17T13:17:02.019Z" }, + { url = "https://files.pythonhosted.org/packages/60/e3/4b0c5bf41eb2ce28f37d9f8b70855d29586a4ec08020531ecd80c7df1989/metkitlib-1.19.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:052a39c19a986841d05d54b298492539d039c01f783592f41ef0f5e95aefd5b9", size = 1119065, upload-time = "2026-07-17T13:29:19.571Z" }, + { url = "https://files.pythonhosted.org/packages/af/11/cd6a9b7dc715d3450195ba50a4c2ba3b5bef671329c1cf4610d951e49108/metkitlib-1.19.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:893ebb0e63944e796a110b934c2451fb2c7062be46e57dafd5435340e98eb883", size = 989626, upload-time = "2026-07-17T13:59:08.7Z" }, + { url = "https://files.pythonhosted.org/packages/53/8e/062e80d64549447bb44070a4a711a59c119871f945a590c659e687b2ade6/metkitlib-1.19.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:4f40d8867b21b7217b21765c8e2f44c84ec1ddc0c783344da9e9894ede8f6c19", size = 1040410, upload-time = "2026-07-17T13:22:05.776Z" }, + { url = "https://files.pythonhosted.org/packages/05/44/332894e30f26cebd23e2304e0453236734c05679724ac99ed5385821cb76/metkitlib-1.19.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:793b1f76a984d19afc66067f77794b8b4b613b31bc578ec57ec7c52a843c868d", size = 1081996, upload-time = "2026-07-17T13:17:37.439Z" }, + { url = "https://files.pythonhosted.org/packages/95/46/6f86f6980eff04f8ab3b13eeee14f537ebd30b828597763136963b1187bd/metkitlib-1.19.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:cd1476d4f44448fb6db236afff0a5584154d310c650632d1c515f754467c9091", size = 1119064, upload-time = "2026-07-17T13:30:05.971Z" }, +] + [[package]] name = "mir-python" version = "1.29.1.26" @@ -1627,6 +1682,7 @@ dependencies = [ { name = "earthkit-time" }, { name = "earthkit-utils" }, { name = "eccodes" }, + { name = "fdb5lib" }, { name = "filelock" }, { name = "mir-python" }, { name = "numexpr" }, @@ -1664,7 +1720,8 @@ requires-dist = [ { name = "earthkit-time", specifier = ">=0.1.3" }, { name = "earthkit-utils", specifier = ">=0.2.1" }, { name = "eccodes", specifier = ">=1.6.1" }, - { name = "filelock", specifier = ">=3.12.0" }, + { name = "fdb5lib" }, + { name = "filelock", specifier = ">=3.12.0,<3.32" }, { name = "mir-python", specifier = ">=0.2.0" }, { name = "numexpr" }, { name = "numpy", specifier = ">=1.21.2" }, From ededa287c6549fc7c7400bbb97576e8f9066378c Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 16:05:46 +0100 Subject: [PATCH 75/95] Pin eccodeslib version --- pproc/pyproject.toml | 1 + pproc/uv.lock | 274 ++++++++++++++++++++++--------------------- 2 files changed, 139 insertions(+), 136 deletions(-) diff --git a/pproc/pyproject.toml b/pproc/pyproject.toml index 00280f35..262898dd 100644 --- a/pproc/pyproject.toml +++ b/pproc/pyproject.toml @@ -21,6 +21,7 @@ dependencies = [ "earthkit-time >= 0.1.3", "earthkit-utils >= 0.2.1", "eccodes >= 1.6.1", + "eccodeslib<2.48", "fdb5lib", "filelock >= 3.12.0,<3.32", "mir-python >= 0.2.0", diff --git a/pproc/uv.lock b/pproc/uv.lock index b777973f..544f0418 100644 --- a/pproc/uv.lock +++ b/pproc/uv.lock @@ -51,28 +51,28 @@ wheels = [ [[package]] name = "atlaslib-ecmwf" -version = "0.46.0.26" +version = "0.46.0.21" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/b2/9a09dffb2b9def1f5cf0f4e3a8cb25a39fdc48ed41214e43b01554b73bd0/atlaslib_ecmwf-0.46.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4db3ca8319143af942bfde5a6334d10d60931c0e32dc876e5fd59582f5a6ed12", size = 5200839, upload-time = "2026-07-17T13:27:18.716Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ba/87905f125cfa3198193d4c6780ae65cb7de2bb280f5b00f1a0e86eb5d6a8/atlaslib_ecmwf-0.46.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:9bcd0444e225131064aa2b3d0fa4fe2900e8480168e846da1fe68ddebc1827a5", size = 5712549, upload-time = "2026-07-17T13:23:37.599Z" }, - { url = "https://files.pythonhosted.org/packages/ec/fb/0bc4cc7dde2daeb4174ef264dfd7af35c7652a2bbcd6aae9d03a088982a0/atlaslib_ecmwf-0.46.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:977ecdffa7d14b664bfb44837f2b5960e6809fff78b6f444b3e10ad5d447aca9", size = 6062331, upload-time = "2026-07-17T13:16:40.343Z" }, - { url = "https://files.pythonhosted.org/packages/e4/dd/b022f3e71199ed819156086ad4e2e351018fc209a4530e2f97f49d70e513/atlaslib_ecmwf-0.46.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:376bd697906b346ae60e45e467133720f1a4e34117fd4f8195ca7c5439da76c7", size = 6423487, upload-time = "2026-07-17T13:32:35.996Z" }, - { url = "https://files.pythonhosted.org/packages/5a/ed/257d774da7803a86739990351cea4c808fbbbd234c7fb9d454bb2eb224d7/atlaslib_ecmwf-0.46.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:7e082635d8be0cd6de29e927c3286c7315230886936987406bf3bb8cab888252", size = 5200837, upload-time = "2026-07-17T13:59:21.463Z" }, - { url = "https://files.pythonhosted.org/packages/0c/48/bfd4fbb3f78e456ea31c43e2ce09a6727534b6dd4ac59be67d8de9edc368/atlaslib_ecmwf-0.46.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:f1f2823efec418f6811fe4a445d0f16648fd28dfb3a5289276fa12c94736c6aa", size = 5712561, upload-time = "2026-07-17T13:46:37.58Z" }, - { url = "https://files.pythonhosted.org/packages/cd/6b/1896493b0ccce45efd56c705ea89c0e077d3f2115163b3ce40aa8d5907e9/atlaslib_ecmwf-0.46.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:df61850318fcad8055949d4aacab5c0ac1bc128235cad38e18c428f9fc787dbb", size = 6062325, upload-time = "2026-07-17T13:16:58.857Z" }, - { url = "https://files.pythonhosted.org/packages/cb/da/6192049ee1cdb22fc3b8bc34e18163852da07589b4157ab80ceb9f3ca46c/atlaslib_ecmwf-0.46.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:59ada48b4bfac8dc59cb626ec4b09cfec988c85506f949e824bd3aa082842191", size = 6423492, upload-time = "2026-07-17T13:31:43.162Z" }, - { url = "https://files.pythonhosted.org/packages/c9/73/6301050439b9e2cbbc9887c8a8b7b6ae5c6fb572b79e8c3b3435f3934fd8/atlaslib_ecmwf-0.46.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:ceb4914a07fbbe9f1f968b93cbc5ac00fde728a2c7ac3694c3214ee814fa10da", size = 5200846, upload-time = "2026-07-17T13:15:42.274Z" }, - { url = "https://files.pythonhosted.org/packages/d8/2e/fe86dec20a1aa34ef6b21566faf25283cfb29101f878e950ca437df09fd5/atlaslib_ecmwf-0.46.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:8993e823e1bf3ee78a8b60ff539d38886c346cdca04406dad8544600b28e9cdb", size = 5706278, upload-time = "2026-07-17T13:43:31.548Z" }, - { url = "https://files.pythonhosted.org/packages/5a/ec/02c2aa71f610e09f26c1b81dc5dca821b792a6e5ccec22931ce5e80fbc22/atlaslib_ecmwf-0.46.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:cf9e8ed30906f3df1c87660c58c84957a4078ee80f7d53e8eb44376e10678742", size = 6062296, upload-time = "2026-07-17T13:16:49.267Z" }, - { url = "https://files.pythonhosted.org/packages/a9/4c/d5bbbdd643a6319011c6e2a3fe5e0306aaf10ef9ea6e3c179522fbbe11ba/atlaslib_ecmwf-0.46.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:31607725a5f4bcc4512c5cf445e264718602b9b29212f76ca0825f2adec10c82", size = 6423486, upload-time = "2026-07-17T13:28:58.598Z" }, - { url = "https://files.pythonhosted.org/packages/ea/bc/9d0f7fed54b7dcff382fc0d7ce1a12bc8515bad29f6a09dd9dceab20ba6c/atlaslib_ecmwf-0.46.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:0ded369d12923d91c3fce81237cbfe443a40a95ceedd71f8951df132dbc6dc29", size = 5200844, upload-time = "2026-07-17T13:58:52.991Z" }, - { url = "https://files.pythonhosted.org/packages/58/91/61308161d4dd72e63c67a1a93a1468aab6b48b8a8c0debe0808f78f74097/atlaslib_ecmwf-0.46.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:4c0257d0a2f309fe12d489ab5e46408b6e5f51768937658c233adb6f066a51d9", size = 5706269, upload-time = "2026-07-17T13:21:48.677Z" }, - { url = "https://files.pythonhosted.org/packages/84/91/867537823d5b5b0753edeb5f9f62ea4c9ae0621c5c5488ebe1000ae7c8cc/atlaslib_ecmwf-0.46.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:aa600616407f4201abb1b1f934b71f22b088dad089f73266a685e4e45ed867de", size = 6062338, upload-time = "2026-07-17T13:17:25.495Z" }, - { url = "https://files.pythonhosted.org/packages/75/d0/ec7f1c7aab7168909a34c162bec99729ce6474191394f6b3b0f94f658f30/atlaslib_ecmwf-0.46.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:eba6324c4ea2ad772c28822f8f3803df72143d197e66131ad697122878dd29bd", size = 6423485, upload-time = "2026-07-17T13:29:46.309Z" }, + { url = "https://files.pythonhosted.org/packages/d3/c5/d95e9d6464905d60528196dc4c068206782360006e5a9b9caea071a538e8/atlaslib_ecmwf-0.46.0.21-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:976772194a60c8662d1b68b5ffd95ea24985ee40fdef74aac47fa08f52faaf4e", size = 5200953, upload-time = "2026-06-25T14:50:00.881Z" }, + { url = "https://files.pythonhosted.org/packages/2e/ca/e702208b82695eae60b7f802e1321164315806a730ea8b2bc7563c5be040/atlaslib_ecmwf-0.46.0.21-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:3648c420dcd77d0dc9c1917b539d1f649d66e1746bf608c5ad779eaf7656c89d", size = 5706361, upload-time = "2026-06-25T14:39:02.488Z" }, + { url = "https://files.pythonhosted.org/packages/15/56/472a7ef5eeca36d0c8a7c9b3ecbf3187ebd8da9b592cc95fb1f6fe219711/atlaslib_ecmwf-0.46.0.21-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:eb8924e1d2e4dd1ee91913c8c0d418bac25239edc76101ee1b04742d6f8ca149", size = 6062471, upload-time = "2026-06-25T14:35:02.239Z" }, + { url = "https://files.pythonhosted.org/packages/4a/50/fee738d2a6536aaf107a26385e7f6aa1b1fd133fdf5b14b82ad021cea301/atlaslib_ecmwf-0.46.0.21-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:b60fd13c869d24aba5c3434f4dce2859622335a68a1c2f505706cfc22e96f72a", size = 6423612, upload-time = "2026-06-25T14:35:09.938Z" }, + { url = "https://files.pythonhosted.org/packages/c3/bc/dbb64d56d1133270db1f48aa22b1c89e99cd4973f418126e0576a7ef0063/atlaslib_ecmwf-0.46.0.21-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:fd3a18b8a2d0a45e8fa8fa6a2611640cf1a670b21f57989849e7d0dd62399277", size = 5200955, upload-time = "2026-06-25T15:07:48Z" }, + { url = "https://files.pythonhosted.org/packages/33/eb/831e9b9ffff109e2335d399beb5ece7e14992181d982c6edee14efd01a0e/atlaslib_ecmwf-0.46.0.21-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:0bc572f2cadf8f685da2f1aea7f5743c2abaee8badf933d93e75493bc8c4a0b3", size = 5706357, upload-time = "2026-06-25T15:19:49.423Z" }, + { url = "https://files.pythonhosted.org/packages/bd/f7/0738534cc3f220bd9e1dea5d4faaffdedbd10221e1e79696bb43a68843da/atlaslib_ecmwf-0.46.0.21-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:86b26125ac6367c4f62fd70eeb6adaa17e34a55feb96fa8631b75a778930edc7", size = 6062489, upload-time = "2026-06-25T14:36:01.008Z" }, + { url = "https://files.pythonhosted.org/packages/7f/0b/4574bc9123db4fb404da02504f67e5e7f4267fc8a95351f7d50bb3d4a195/atlaslib_ecmwf-0.46.0.21-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2aed77caced30ca68380e312d3255d423aea63e28ab20d6d3ae11b3269180116", size = 6423614, upload-time = "2026-06-25T14:35:36.178Z" }, + { url = "https://files.pythonhosted.org/packages/2a/90/0f698714e4ef439d4da8d4575b64e67183b0c37f82789d53e224992251b2/atlaslib_ecmwf-0.46.0.21-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:51412637dcc546446b399817c40c6cfba8182c928edba4ef1c46c7128fd041a3", size = 5200953, upload-time = "2026-06-25T15:03:48.84Z" }, + { url = "https://files.pythonhosted.org/packages/3f/5b/522da8438ae39ba7eff8c19711101e3a937e6419cd1102a9d7b672541178/atlaslib_ecmwf-0.46.0.21-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:e578b5fcde0933d7ff04b10ad8c5ac485cb29ac1d8bec471bfaa83b9b3f43941", size = 5712649, upload-time = "2026-06-25T14:40:02.256Z" }, + { url = "https://files.pythonhosted.org/packages/7e/b6/516bdf42addf48a21e0651dec41e7ee926d1052716227a80ca7b63a1c15c/atlaslib_ecmwf-0.46.0.21-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:efe4654f4dcc2d454b3849a0de0f62833b67d17916f9357680a1ee5ecb2deda1", size = 6062495, upload-time = "2026-06-25T14:32:59.348Z" }, + { url = "https://files.pythonhosted.org/packages/13/6a/6f5665a5e3cac005dda23c445635c8aa868e8d5e3f36c77f204520d8f12d/atlaslib_ecmwf-0.46.0.21-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:36b192768f0b850b730dbdba15f28679b8e0acf77aff0843c00daf05ffaf23aa", size = 6423614, upload-time = "2026-06-25T14:35:26.189Z" }, + { url = "https://files.pythonhosted.org/packages/6b/64/cf63658050b3c28a628c542c073618031619cc40dd3d871c60f1238e7b41/atlaslib_ecmwf-0.46.0.21-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:d7851728efdde2c1751ad0776ecb1c332ff0a3a11347a7edce25ca59b9baec32", size = 5200957, upload-time = "2026-06-25T14:35:11.035Z" }, + { url = "https://files.pythonhosted.org/packages/d5/31/f99f6373c49863a2f5d24bc89dc831db1c404676c1da6b273ff30ad79a91/atlaslib_ecmwf-0.46.0.21-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:256e0c0045c4f238d7a7ee239f5ee8227ae3a1a6744f7037b5ab8399394e47f9", size = 5706360, upload-time = "2026-06-25T14:59:06.254Z" }, + { url = "https://files.pythonhosted.org/packages/39/ae/7eb9e89c2569f67a0e288ad8e7a7bf5b0405b09ca22a095d3891c7d0baa4/atlaslib_ecmwf-0.46.0.21-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:8577087e6fc15e5793339c6a256aba4c323a0858103ad6b0c5afd917ab69bfd6", size = 6062483, upload-time = "2026-06-25T14:34:42.284Z" }, + { url = "https://files.pythonhosted.org/packages/1f/1f/50cf1276f08be8576cdc771310eba027b587d07e8e432390f2761ea98086/atlaslib_ecmwf-0.46.0.21-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:9cea41ffca75cd21d869a66a97bd4b7ba5101c0aff02b62456300b5a9e8e22fa", size = 6423615, upload-time = "2026-06-25T14:35:09.895Z" }, ] [[package]] @@ -547,33 +547,33 @@ wheels = [ [[package]] name = "eccodeslib" -version = "2.48.0.26" +version = "2.47.3.21" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/88/a9/670a1e84381324c167b339a130e22f50a18528b9d7d09cfbd4e88aa1a7b2/eccodeslib-2.48.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:8a9bfdf8a7d081c108150c769a0fdb349d917ea1333fcf627460505ce594765a", size = 9097184, upload-time = "2026-07-17T13:27:21.841Z" }, - { url = "https://files.pythonhosted.org/packages/6d/03/bccf65f813ffe9094b7acc4c8ac861130844778de0bb030dee95c28e1578/eccodeslib-2.48.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6567970b2c6cb1dcf31741ff515153aa684f317d913a7cd6659fb85ab9dd5696", size = 8911899, upload-time = "2026-07-17T13:23:40.789Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d4/d57cbf1e278a36aae33fff842a060ff8763e7da58b5ab03daa7037d0691e/eccodeslib-2.48.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:daa351d56a2539601e48d2b57db33aa5dbfe506fa8cc9b778aeab50450f749b4", size = 9303576, upload-time = "2026-07-17T13:16:42.531Z" }, - { url = "https://files.pythonhosted.org/packages/48/af/32011bf877fc14043d618d87ad4e95537b552c5da06fe74834f494f897a7/eccodeslib-2.48.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:56b632e229afdd0c7d5a5906f12be55c18fccc4974f276252da5efde76f4c278", size = 9092983, upload-time = "2026-07-17T13:32:39.84Z" }, - { url = "https://files.pythonhosted.org/packages/40/58/bc1aacba6ba814c56f4c4d55ab825cc01ef27e545c6d8e1d194a49e72f2f/eccodeslib-2.48.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:ead5acb5214fb79a4d9d1f3aebec67defa1f7f18088fcf38fed968d66be60e65", size = 9097221, upload-time = "2026-07-17T13:59:24.485Z" }, - { url = "https://files.pythonhosted.org/packages/20/2c/8d64cc3899a48c7edb2fc5119fd57c957bae8e36fc3113f0cbc9fa4a5b64/eccodeslib-2.48.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:78c2e9b4b86648806ebe9b300329696222f43930f2aaccdaf048292b594981ae", size = 8911920, upload-time = "2026-07-17T13:46:44.763Z" }, - { url = "https://files.pythonhosted.org/packages/7f/9e/1700cd553d6bcec8fd519aa473ad67402cdb94d73123293aa97f7e924cca/eccodeslib-2.48.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a4908810573a15d969a1ccaed815445482874101dc6707a54394eda6ad96610b", size = 9303577, upload-time = "2026-07-17T13:17:01.157Z" }, - { url = "https://files.pythonhosted.org/packages/4e/85/6c2bf17daa7de0207f550922c59c4e1f9267277636edbe46ce8287fdd4bc/eccodeslib-2.48.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5892ef7bac9a1ecc2b4d4cd7e3d6bd2b31581f41b82c0e7a04dfa87b572369fa", size = 9092981, upload-time = "2026-07-17T13:31:46.775Z" }, - { url = "https://files.pythonhosted.org/packages/31/f1/f338e1a5dd5f4e9b078c37bb239a53381db35e6eb6947533535f121488b9/eccodeslib-2.48.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:1abe306e41a317fa9812ac78452c485abf8fd19285d3c5177b610d17f036cf56", size = 9097177, upload-time = "2026-07-17T13:15:45.699Z" }, - { url = "https://files.pythonhosted.org/packages/44/92/df6a63dbfed66ba1feb78062e33cd20ddd67bb01231bfdeaa5c2bde74e34/eccodeslib-2.48.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:c1bc7b1a3675ac876be208f2b11ff35709d83b6a462ff18239d295c9d4d5fec1", size = 8911903, upload-time = "2026-07-17T13:43:35.098Z" }, - { url = "https://files.pythonhosted.org/packages/2d/ec/99267a6e10af2999255fc7492330b11a0c407e45a918d932d365c5e04a18/eccodeslib-2.48.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:a1427aa201114b0b586606facb25ae8b65e4292b5ce883c8d880556c1390f893", size = 9303577, upload-time = "2026-07-17T13:16:51.708Z" }, - { url = "https://files.pythonhosted.org/packages/1a/13/15ee59c9c0066768abc73ce22b401a507c1d8582132805911a2f89679f0f/eccodeslib-2.48.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:b833ed9900d348b04ffe7a1b8acaa5b12851da07ddd854966f03d4b3d105ea44", size = 9092982, upload-time = "2026-07-17T13:29:02.352Z" }, - { url = "https://files.pythonhosted.org/packages/70/7a/27420329eb9fc11abaecd3a0ef375c1a709bfa24bf785b6d604484a8c7e7/eccodeslib-2.48.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:27a3cc3d711dfa49968c61d7098e16f8ee939c1f3b2942892aebbffddd00c48d", size = 9097231, upload-time = "2026-07-17T13:58:56.049Z" }, - { url = "https://files.pythonhosted.org/packages/34/5c/d07302687852b166be933ad99f7941845b16f90b2e1ca0ee08f7efe9b1fb/eccodeslib-2.48.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:bac6340aaecfd0cb21b8eae7b957f009c25912d468284c9821567edcaed950bc", size = 8911895, upload-time = "2026-07-17T13:21:52.004Z" }, - { url = "https://files.pythonhosted.org/packages/f3/76/1b86868da7e9ffc563d54c4a8c874278ec686bbd551904a3c02b712ee3ad/eccodeslib-2.48.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:3e18afbb2e3bb51288845401f1d37f93f4927389a0276ab2c0496fd099595ee0", size = 9303576, upload-time = "2026-07-17T13:17:27.668Z" }, - { url = "https://files.pythonhosted.org/packages/86/5f/21e45a69b772d36b8aa6ddd02414c813c8e9420e56e3ead5070d1e7121f5/eccodeslib-2.48.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:b8806183d2d633f761e67bb33e430b8d2b5b1324439c8aa5581ee2b1a244dc73", size = 9092982, upload-time = "2026-07-17T13:29:50.111Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f0/e632b43e69e48ba6d2ddf499d44008fb3482302b42f68fe94dd2fcabc2a5/eccodeslib-2.47.3.21-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:f85c7adbdb69e7301a4c134664bc2fc4dec08d235c15135bb7ba910120cca13c", size = 9028159, upload-time = "2026-06-25T14:50:04.148Z" }, + { url = "https://files.pythonhosted.org/packages/73/24/16239a49d1925705f4c4381412f893aa711b80ec45c892c8f9a09263713b/eccodeslib-2.47.3.21-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:e36af63f3c61576722e49ba440cf81edf5f86f38b0acc026db911925222a064d", size = 8838802, upload-time = "2026-06-25T14:39:05.932Z" }, + { url = "https://files.pythonhosted.org/packages/60/21/72a3db13d74ea6307d84bdd239bfc5c8b63aa334b84286b1136566be9835/eccodeslib-2.47.3.21-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e5eb64ed8ff3a70138fb39570132dbbe5c4254001cbe823694adca08cab9a7eb", size = 9112804, upload-time = "2026-06-25T14:35:04.817Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6d/2d298f36465835ecd499015ce01d2917aaa4e55f56cf92545e45a6fc2d7d/eccodeslib-2.47.3.21-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:552a5903e2ec5c7bea8a730c1875633821322a333352f2b3b782041e648cbde9", size = 9012384, upload-time = "2026-06-25T14:35:14.095Z" }, + { url = "https://files.pythonhosted.org/packages/e8/63/815e2b04527beb484a1fa9a6e2078f0ebf91be170f30518c008097b8e22f/eccodeslib-2.47.3.21-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:6402dd5e0ca46999b362d570df0dd53d2ca82421b8be8239dea9ccc5d37a9783", size = 9028141, upload-time = "2026-06-25T15:07:51.154Z" }, + { url = "https://files.pythonhosted.org/packages/4a/8b/ff69d262638253368779b56175c0bad7d75c8fe4892f91f84610847ab705/eccodeslib-2.47.3.21-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:9c5b04f70bab30188ea51e40387d34cafb01af77035f768e0d0a49443e73b3ae", size = 8838806, upload-time = "2026-06-25T15:19:53.127Z" }, + { url = "https://files.pythonhosted.org/packages/46/a3/73ad3e28852d865012c1f27aa0ea83d07bf6fdfb8ea755b3b44d462413d5/eccodeslib-2.47.3.21-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:2404c0ab63b52b56ba7b9293e227784c2f70ae378d29d925391d10512175419f", size = 9112802, upload-time = "2026-06-25T14:36:03.94Z" }, + { url = "https://files.pythonhosted.org/packages/1c/55/d1daa7be3f51e766d63a63d187f02313a785b7d407f09ae70eb8634e91ac/eccodeslib-2.47.3.21-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a695c897882a63609a5ec655bf526f5acd633969bfde85b4d1ccf347069afad5", size = 9012383, upload-time = "2026-06-25T14:35:40.158Z" }, + { url = "https://files.pythonhosted.org/packages/17/48/482d1f7b89b59a16cd2a92dc9f7de0bd018b96de02c992d47ff03b45cc65/eccodeslib-2.47.3.21-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:0b7801f2a34ae49a125941509b3645a31e489a25fc34324f0dfc8d5eca99d1be", size = 9028142, upload-time = "2026-06-25T15:03:51.961Z" }, + { url = "https://files.pythonhosted.org/packages/d8/1f/24f1e1551e2f9a853c9ee68996132e609278501b2a87d4296c8c00c4c829/eccodeslib-2.47.3.21-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:c4bdea8eda9b2194d0b1f797b54c0b42e9b0833c940c0677fcbf7965855add59", size = 8838818, upload-time = "2026-06-25T14:40:05.602Z" }, + { url = "https://files.pythonhosted.org/packages/fa/4a/37aad5c0da3b15c456d2ad5b3d0ef3cdb58ab6eb94150bbd86549fea2af0/eccodeslib-2.47.3.21-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f8e5615cc7b6dcd74e42ee7df63765bd122662fac972c21cc011db094fd33617", size = 9112803, upload-time = "2026-06-25T14:33:01.943Z" }, + { url = "https://files.pythonhosted.org/packages/14/83/a961cbd2750e5481f642b71260581111f07c19a4c79748740a77482a01fd/eccodeslib-2.47.3.21-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:d797d87640971c243b351de0a2f87c4af9d94a2a6160af1b48bb2ee66d781b7f", size = 9012387, upload-time = "2026-06-25T14:35:30.127Z" }, + { url = "https://files.pythonhosted.org/packages/c8/c8/c01eb1ea558099fc34412740a1a856cf74f08cdb86c999c102652f3e0cb0/eccodeslib-2.47.3.21-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:12b1ada1078a40a28b12e4c0b906eee4599f640e205e5172a6ac80243d2cd4c7", size = 9028130, upload-time = "2026-06-25T14:35:15.853Z" }, + { url = "https://files.pythonhosted.org/packages/47/8e/50442c597f7fe2bbd7617486d46b8b16cab66c664434dca2392ebf8b7f08/eccodeslib-2.47.3.21-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:7fb9fee37cddbc7288505fc717c620149f9960802099efe1b1ba866825cd16cc", size = 8838822, upload-time = "2026-06-25T14:59:09.769Z" }, + { url = "https://files.pythonhosted.org/packages/db/b1/439d03430637f2e807fe6f24f70532a0af41da78e5355e58bf8efd20dbaa/eccodeslib-2.47.3.21-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:e7a46a2ee488fcfa34e4b4b2df963029606d1d2f2b2be17b8accc2df6a6423ed", size = 9112804, upload-time = "2026-06-25T14:34:45.168Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f2/3d3df398358741e05e42d4eaed9155ee05672868cd6e85ad3cfb92280a67/eccodeslib-2.47.3.21-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:29b828fffaf5eef6a8b7e09fc956cc164293e7438a20fae66c4710f06e6d4518", size = 9012386, upload-time = "2026-06-25T14:35:15.443Z" }, ] [[package]] name = "eckit" -version = "2.1.1.26" +version = "2.1.0.21" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eckitlib" }, @@ -582,45 +582,45 @@ dependencies = [ { name = "requests" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/8b/54d3275f712799ee4c95da7abe5a02325775c8b67ecb2bd2e1afffa07f0d/eckit-2.1.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:910ea47a3107f3d6626b5a1f835309a70e67eda36efa1aeded4a977d6ac8abe2", size = 62992, upload-time = "2026-07-17T13:27:24.579Z" }, - { url = "https://files.pythonhosted.org/packages/d6/cf/77895689aac55cc586d60611b5eca028d9476af68f7b33cd03dacc99a3e8/eckit-2.1.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:58a4f85f88217b2df20fe066bcc87c54b3c2f54babec21e3c9cad9c6de48528d", size = 61831, upload-time = "2026-07-17T13:23:43.702Z" }, - { url = "https://files.pythonhosted.org/packages/c9/f0/0fea63b4f4c57875dcb6ae20b84c0a692a506f0e9ec449965cf63a5e2682/eckit-2.1.1.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e6e8f2cc7b160b7d773874dccf27124e4d7419acfac3b8688299f2789fc5a121", size = 68050, upload-time = "2026-07-17T13:16:45.248Z" }, - { url = "https://files.pythonhosted.org/packages/62/ba/18c9b0474fe6dafb96508eaa04613117ae82cf0a072563b09062f39ee6c5/eckit-2.1.1.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:29041c5f13bbe8a90b18ed036b10fa7ce099b481ce342b8e7e5a04c88c049831", size = 67399, upload-time = "2026-07-17T13:32:43.092Z" }, - { url = "https://files.pythonhosted.org/packages/0a/94/7bdae5e7e8be76f938e12deeaf3fef837e94c687a1285c3381af19d01f16/eckit-2.1.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:3e7c74b8b56c91aea77d8a2abfeec8efbd7460fcf56508fbf0de25accf02b220", size = 63637, upload-time = "2026-07-17T13:59:27.159Z" }, - { url = "https://files.pythonhosted.org/packages/2d/a6/b1efb232ace93a76d3edebd2f550ee2ad617a18566aea08e4814dba1a938/eckit-2.1.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:8051f71fdb1a3f06fbaf35d37759585084e39253d2516f00223dc101196373c9", size = 63246, upload-time = "2026-07-17T13:46:47.62Z" }, - { url = "https://files.pythonhosted.org/packages/29/99/e135036fc2b22ff34b0861feed3aa4a276225aa29e27a6bcd8e21813a6ea/eckit-2.1.1.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:b5a608dbe0daa77b6d9eeedbf3f34bdb2e6540889c3378c8b55e7b875f9ff2a8", size = 69763, upload-time = "2026-07-17T13:17:03.657Z" }, - { url = "https://files.pythonhosted.org/packages/c0/55/091fdb2595adeff082bca2c45399e6447ea406d3108b38d65572e319204f/eckit-2.1.1.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0fac5c046d8d19f740fda32fcc2a3e823c79c04785037cde96ea0029405542a1", size = 69504, upload-time = "2026-07-17T13:31:50.338Z" }, - { url = "https://files.pythonhosted.org/packages/d9/cd/1327f37d0ba8045e802783d927df95c249795670de0f4fb908f73a268102/eckit-2.1.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:496e5b1d1f50f661514bf8d24cd084ad7047a1642a96f267986858c7254fc291", size = 63221, upload-time = "2026-07-17T13:15:48.354Z" }, - { url = "https://files.pythonhosted.org/packages/b8/83/27675d9fee56ca15590928dc7af01c2a923a89f51f3fd30f81d65db8e816/eckit-2.1.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:e4f7977913568a072ffa0a4323af80114ad7d9602e02bc48765e0b2e74d592ca", size = 62735, upload-time = "2026-07-17T13:43:38.111Z" }, - { url = "https://files.pythonhosted.org/packages/53/32/4b632c06c66aadbb72c7a156caffad5a473372d0ddda237a2770850ffea7/eckit-2.1.1.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:8677888e08fefb77bc39ff341b72a8af23a000492a42539100b341ad06e588a2", size = 69619, upload-time = "2026-07-17T13:16:54.057Z" }, - { url = "https://files.pythonhosted.org/packages/b0/02/089acb47f7cd81c9c987d8381468680fda4fb2995dc3d901a7ad971e48be/eckit-2.1.1.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:cc6f026210a9770e687a13cbbf814a257fcd9eba4d7f838580da632da4d06f1c", size = 69403, upload-time = "2026-07-17T13:29:05.858Z" }, - { url = "https://files.pythonhosted.org/packages/70/5f/7b87b4cb80faa54ea2ad77b115f0f4ea6f4fd2f5e11c40d0686211d6d53b/eckit-2.1.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:3089b3d10b6a28aad9b4aa9257ce33f557c5f60364898259e2a767608c3a903a", size = 63809, upload-time = "2026-07-17T13:58:58.841Z" }, - { url = "https://files.pythonhosted.org/packages/b0/72/ae233e124d26d6e5a9d9ecd9109c733e391258493dae07decc56cc462c09/eckit-2.1.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:78ed306c776335d1ee058cf1731e4f990b4e5f035165f426031bcb10ca638b83", size = 63076, upload-time = "2026-07-17T13:21:54.71Z" }, - { url = "https://files.pythonhosted.org/packages/23/ed/424f979692165c2222a61860b92ec902cafb66e1dc2f6ca97a5d00deb1ff/eckit-2.1.1.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:68759b5f36d9ed4385da44545b56d9b9474c18198d2acb3d22de1402f3ab706c", size = 70033, upload-time = "2026-07-17T13:17:30.041Z" }, - { url = "https://files.pythonhosted.org/packages/ea/15/3dad7376ee431aa054fd8db57ba2d2e0576297c2a366541ed4222902c60e/eckit-2.1.1.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:30ea4747e66007dffe79ba4302ddce462945ba98a76563722ce8d054b368255d", size = 69636, upload-time = "2026-07-17T13:29:53.606Z" }, + { url = "https://files.pythonhosted.org/packages/91/06/eea5a0030059ebcabd03672d80aa38ac67f0f201d63bda5aa7cd36ed62a1/eckit-2.1.0.21-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:ab52004a58df4ce9a31b514ca179988b00c975682ca4cda3117919be494bc113", size = 62264, upload-time = "2026-06-25T14:50:07.012Z" }, + { url = "https://files.pythonhosted.org/packages/fe/97/0b614972c12a5600314eba56739a32e1c300ea17a49b77cf36381557d00d/eckit-2.1.0.21-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:664200c370a6d067b255d76eb6b7350ec2f55b38054a980e3344d4d896c4ed00", size = 61067, upload-time = "2026-06-25T14:39:08.856Z" }, + { url = "https://files.pythonhosted.org/packages/75/df/5e733aad55ddf77d32d976d141a993477dc94c97dbe9887d25f6f644d65e/eckit-2.1.0.21-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6baf62666f029d9521677661e4569824c623d2893c32a734015ac368efaa932d", size = 67171, upload-time = "2026-06-25T14:35:07.619Z" }, + { url = "https://files.pythonhosted.org/packages/73/0e/43413cecca5cc6a93f515ca4fb3279d66f8e13115c616083ea51f25ed6ab/eckit-2.1.0.21-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7c6464c1f103aa58b5afd398423088dccdf9c17767109a5283a400579856178e", size = 66610, upload-time = "2026-06-25T14:35:17.378Z" }, + { url = "https://files.pythonhosted.org/packages/a6/4b/0310b509f8bf5bd090cd68457f76a6b51664bb9a95a0519d04881b1bd326/eckit-2.1.0.21-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:6f49484ffe62b2d8d7b113c1a1c63f558061a5ac3972b0a5fa62ba1124855a30", size = 62799, upload-time = "2026-06-25T15:07:53.758Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f8/018a16f52440e568613abd676156a3f86bdf4084c5b42004651a4668319b/eckit-2.1.0.21-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:da2f9f5ab6aa7067aa4a7f60f61a889e4bc5565b2091eb6ea34a5fccd5bf354d", size = 62350, upload-time = "2026-06-25T15:19:56.526Z" }, + { url = "https://files.pythonhosted.org/packages/ba/9a/9709c3ffbf314ba16415402b5e2bd09bab3527d77cd874fb8b06bc1d4236/eckit-2.1.0.21-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:272a355537df37dcdd8ce88ad1fa4c6992b89302a9597e60f609bb0e0f60b623", size = 68768, upload-time = "2026-06-25T14:36:06.853Z" }, + { url = "https://files.pythonhosted.org/packages/aa/3d/a36e7076a2c86f4f02ba144f0e27bf04054c078cb74b29fa78834acd47da/eckit-2.1.0.21-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:caa4b92dc7e8535498182a0a20e2b365592ff56b470e40e351ef63c77980c3ba", size = 68344, upload-time = "2026-06-25T14:35:43.811Z" }, + { url = "https://files.pythonhosted.org/packages/e4/66/e6d41f0338f4bef469134ff2643a22c89dad5c75f41e8b4c5eeb32db3b47/eckit-2.1.0.21-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:325d71760af22dcdca8a9b4d85ebc03411eb585941f57e7e98c9d29903b2a6cc", size = 62440, upload-time = "2026-06-25T15:03:55.197Z" }, + { url = "https://files.pythonhosted.org/packages/8b/66/deb51bf3ac3e1f631147aed39569525507cc1539b034fec9d629e2e188af/eckit-2.1.0.21-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:21d35376dfd3a36c5fb716ac4c3520e0e6558a68a0564d3c7e42d4ce7bafe80a", size = 61837, upload-time = "2026-06-25T14:40:08.583Z" }, + { url = "https://files.pythonhosted.org/packages/81/0b/6c9ff5198954f9a7bb07115254f9ade38469ca2be2dbe807aef7eaf61685/eckit-2.1.0.21-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:a2caeb9e5b5347f55d02928f625e886fae6c56fbd1de9698b2f83c3a39b6a883", size = 68773, upload-time = "2026-06-25T14:33:04.473Z" }, + { url = "https://files.pythonhosted.org/packages/de/e0/def5930af95ff1fbea94dfb257bd85b7544d08d05c050dd11f5bc6062a2b/eckit-2.1.0.21-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:2f05013dbe37c9a840cb7f75ca8ca95497d9f2f77f13a747f9a3c46926a77402", size = 68394, upload-time = "2026-06-25T14:35:33.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/4e/2d4ffa54fe34462611277738a4268f9d8dd097600ebe73acf0980e754a80/eckit-2.1.0.21-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:0433ebbed2db97145b2c1729efb067a20b4fdc8e71a3310dde7585d4ba8f7e0a", size = 62965, upload-time = "2026-06-25T14:35:19.635Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fe/a2a6513f3d283597be1b561ed9c1f746d1937d4f5da3bed1bde997616080/eckit-2.1.0.21-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:56a3b0f81f738c0d251a63aba65c64524776789183188e2616771e58d7ab846f", size = 62180, upload-time = "2026-06-25T14:59:12.905Z" }, + { url = "https://files.pythonhosted.org/packages/3f/eb/756706ca35b36215c8f105bc44c2f9276058c269e09a58b78959dbd23517/eckit-2.1.0.21-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:288ff903cb40998e554e28699ce380a03672a6b21a94d1e583e5cadd6ff35b22", size = 69170, upload-time = "2026-06-25T14:34:48.33Z" }, + { url = "https://files.pythonhosted.org/packages/68/05/3cbfc829ceda8da7e10941bc1c7fa4fccde13deacc52656ff174ce7a8aa8/eckit-2.1.0.21-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:ef55eda6366dd7462706a114133120d77afd3242f480e69e9bf2b745e206daa1", size = 68654, upload-time = "2026-06-25T14:35:18.968Z" }, ] [[package]] name = "eckitlib" -version = "2.1.1.26" +version = "2.1.0.21" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/7f/d0734ceaecd6dc1dda92074c2dd19aa155e0e69b09eb07b04c802f1e16dd/eckitlib-2.1.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:c434f15d661b8e9cd96925560fc97bdf0692920199ba3645ae576e53f94d107d", size = 2486593, upload-time = "2026-07-17T13:27:26.805Z" }, - { url = "https://files.pythonhosted.org/packages/2e/64/c4a6346576d3cd8d7d7e42cb2f92c5d3dbeeb63e1394d6cc7c52fa7ad424/eckitlib-2.1.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:52a730578fbfec59472dce90946ea6c0e796810225a5595fac569e82095d2009", size = 2623443, upload-time = "2026-07-17T13:23:46.312Z" }, - { url = "https://files.pythonhosted.org/packages/a1/6f/cfb50af2ca8df6879bb06acab1650adbab88dab926e652614393257e7b4c/eckitlib-2.1.1.26-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:169c3c188cbb769f2c47c382c26a4730a48b47cdd1411404f1c2ccb6b08ae487", size = 7046373, upload-time = "2026-07-17T13:16:46.875Z" }, - { url = "https://files.pythonhosted.org/packages/da/03/464ffd0681e3f93625865b011d05c6b26e60488e753558caefa11ee898b6/eckitlib-2.1.1.26-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcb2cf107b86a8757fedd26961c5c4d26458e07ef3a9e5c202ef6907465c6691", size = 7173537, upload-time = "2026-07-17T13:32:46.467Z" }, - { url = "https://files.pythonhosted.org/packages/c7/9e/c86bfda3293247f469db5271482b0e08ae2520001f918b8fd4f12bdd7065/eckitlib-2.1.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:ee0103b532e9e5dfd454d5de3616defe295d84115b8f6e5922acca1f70857dbc", size = 2486595, upload-time = "2026-07-17T13:59:29.52Z" }, - { url = "https://files.pythonhosted.org/packages/fc/0d/4e13acec84430356f69a1646b6c6d503add0703978d0ba116738675c49d6/eckitlib-2.1.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:a5caf612b4fe2322a1f594a2cb0687c2509926418f8bf9ba235736114ce6ccd1", size = 2623445, upload-time = "2026-07-17T13:46:50.23Z" }, - { url = "https://files.pythonhosted.org/packages/2c/56/13f1cf010ba2b4f0087e50f1c824f614e97b52c16914e4460db167a789ef/eckitlib-2.1.1.26-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:213e667f5533ed7ded1b30beecad3e34560ed34c92da44a9945be991d9bc2c64", size = 7046378, upload-time = "2026-07-17T13:17:05.353Z" }, - { url = "https://files.pythonhosted.org/packages/6b/6d/cdbd51f0848cf9a4410761c666361c2c35d93635e9bfb7cbc715aa39950a/eckitlib-2.1.1.26-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d719d9580f04d37b34fa85f41d849e40b77d8b2be3e2af1d5dab5e42d25605ed", size = 7173535, upload-time = "2026-07-17T13:31:53.667Z" }, - { url = "https://files.pythonhosted.org/packages/46/7f/66e225af369c0a20d07bc5db686bb4cb63172d65d1170d4cd95be4e10d1f/eckitlib-2.1.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:11ee25ef262e23fef6478fdc26db020a388ee32c0510fa7b685f09821829471c", size = 2486593, upload-time = "2026-07-17T13:15:50.997Z" }, - { url = "https://files.pythonhosted.org/packages/bd/fa/01b51ee8cda87c75f55ecafc569d52929badfe5f4984ff179cc40e470bfd/eckitlib-2.1.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:9d7f30627c1f8b2011fb7ce55732f7ef03e815397e74dcf7e454a03978bdf818", size = 2623448, upload-time = "2026-07-17T13:43:40.798Z" }, - { url = "https://files.pythonhosted.org/packages/7d/7a/3b67fd567503318cb589c270f7b82c30084c60f50e1074c364e140a0e950/eckitlib-2.1.1.26-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfbf7bae139c156f1c2450e51f826136708b4ee55033ce6ecdd329685c330ed9", size = 7046388, upload-time = "2026-07-17T13:16:55.824Z" }, - { url = "https://files.pythonhosted.org/packages/3b/31/56e9a7c99b0cde691977f5f02e1ea78cf88c2bbddd0723bd54998e011352/eckitlib-2.1.1.26-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b432df5e6a15cec8bba24cd21c9d7823edbad2eb944b788021cfb2eec02c459b", size = 7173537, upload-time = "2026-07-17T13:29:09.289Z" }, - { url = "https://files.pythonhosted.org/packages/b2/38/da477636044d4cb8ec936a6359355b48cb674ce30e37f356ef2901a75ddf/eckitlib-2.1.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:6f0fd96207c35cb4241ed5b88b7708eea7fe6d74068ad6dc48f2486859528496", size = 2486594, upload-time = "2026-07-17T13:59:01.301Z" }, - { url = "https://files.pythonhosted.org/packages/30/dc/aaeb8766288c5ff9870757a17c3a08228cad24f4b57d95210af9e5390114/eckitlib-2.1.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:3c4ac9cd84804ed67f09ff59792e551d8f91fb7a720657c0879c230d208ce861", size = 2623446, upload-time = "2026-07-17T13:21:57.204Z" }, - { url = "https://files.pythonhosted.org/packages/47/7d/43da4ab8697bf261a19e30138907aeb4e5802f23241a42da63d603ec1cfa/eckitlib-2.1.1.26-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7423149aa3742129f0929f85a8cc4bd637841ceb581d3eb9d564dc13e729e686", size = 7046375, upload-time = "2026-07-17T13:17:31.643Z" }, - { url = "https://files.pythonhosted.org/packages/9c/61/1145f9a7d335a7836e8713917d1b7cdb9c58307f064343ee4ce8bee7a8c6/eckitlib-2.1.1.26-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e5c197940585c2c3cac6f7098830b1e6e8fda2a810977b1ede4f5677c8ea5a7", size = 7173537, upload-time = "2026-07-17T13:29:56.798Z" }, + { url = "https://files.pythonhosted.org/packages/81/03/b2e458d6c28b3905146cf0d7b15c37ba66ee38cefa87c31043f73568531b/eckitlib-2.1.0.21-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:616279096f54a466871c00db51f8657088a531f648035bc1ec019f494a5a4b58", size = 2486603, upload-time = "2026-06-25T14:50:09.66Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ba/d10694f7bfcdb7de461d78b2e23e0ee4c86b747bb233f4c8c8181a695960/eckitlib-2.1.0.21-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:68fb850cb5b740f0858b5f32be4fed874ea8aa92f87ccb1fff292e7cb359fafe", size = 2623459, upload-time = "2026-06-25T14:39:11.554Z" }, + { url = "https://files.pythonhosted.org/packages/79/01/0f1d3b1472dff0f2f00d92135815f46e53af99eb229dccabaf6299da3e9f/eckitlib-2.1.0.21-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7aed097bafc22389cc83a5376539c7c4003fa6c868775988ef8fbcf2b772d172", size = 7044388, upload-time = "2026-06-25T14:35:09.809Z" }, + { url = "https://files.pythonhosted.org/packages/a4/40/7b4c3d6473df5fc73677e0f185f9fbb6262536939b90adfa176bdd485389/eckitlib-2.1.0.21-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9e0ce2a62b606ae92b0a16c3867ab19d1a0680ae7ad9e64ac5c5d779577eb5e", size = 7172300, upload-time = "2026-06-25T14:35:20.729Z" }, + { url = "https://files.pythonhosted.org/packages/49/48/855090b6c5830db955255234dd181ba2b536a504f7582d2a21d5139864c0/eckitlib-2.1.0.21-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:25af6bd0f184543970c235047d05aafb4336ef921fa2e22052f7af2b2992b66f", size = 2486612, upload-time = "2026-06-25T15:07:56.142Z" }, + { url = "https://files.pythonhosted.org/packages/08/b8/4ad8aaec202414ff864d8c899be473821a6922d4e470076d44d7feffd181/eckitlib-2.1.0.21-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:bcbc57a01ade90da0380c2708001d2f067e9b9e2288db54e2ed1d05a9a6dcd4e", size = 2623455, upload-time = "2026-06-25T15:19:59.363Z" }, + { url = "https://files.pythonhosted.org/packages/3d/11/a7601e467cb3a598c507324ef4ae0df474f054c807653ad2ea0ddd7ceea6/eckitlib-2.1.0.21-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b9fc94a791cf279442d531b477610b5d904ffdfb398d1ed23cb6bd3f99f225d", size = 7044403, upload-time = "2026-06-25T14:36:09.319Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3e/df093e61e485c80cce3bbde4ba5281d7bd7bd2f720f6d9a221b59f079ea7/eckitlib-2.1.0.21-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0bfd207a7cc4c14f5c80d64eb2b99082282aa0b7019201f9a3f077d6a3bc09f", size = 7172282, upload-time = "2026-06-25T14:35:47.14Z" }, + { url = "https://files.pythonhosted.org/packages/26/83/3057ecdfaa33f502856f318b7fa0ac787219800c8b1d32edb137479105f0/eckitlib-2.1.0.21-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:07cf9eb202345928b4f2cd065042bf9576a7b6d090edb660bd2e18cbd3ee7525", size = 2486606, upload-time = "2026-06-25T15:03:57.534Z" }, + { url = "https://files.pythonhosted.org/packages/d2/a3/6a61f92c74ac873416285d5407097a8feff0979a024d0c76d2e3f161bf50/eckitlib-2.1.0.21-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:a91c14f270a120b08feef06f1b1a8cc47015d4ac4f58fed623c12762ca9c9a8c", size = 2623462, upload-time = "2026-06-25T14:40:11.193Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/2bd0142d9b2a0858f71bc96c53403c1c902dcefb806229fb4c72d42ac4ea/eckitlib-2.1.0.21-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf09a9832cb839017a3276389a6c7e626674e3ec174e545642fbadf0cbaec136", size = 7044397, upload-time = "2026-06-25T14:33:06.625Z" }, + { url = "https://files.pythonhosted.org/packages/c3/97/2e9a04da4cead7497a6d63dd24c5c2344cfabc389c3115f5508759299d46/eckitlib-2.1.0.21-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e81dbf594da7b78e0cb8b88e7ee69e115c640a4fe3ab239dbbccd8f73326009", size = 7172280, upload-time = "2026-06-25T14:35:36.536Z" }, + { url = "https://files.pythonhosted.org/packages/47/f3/e65b06d676872f0616dbc903b4ff10192f1e65b5762440a85131a3517551/eckitlib-2.1.0.21-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:7525dd7f8386ae12949532ab20587ef1aea5d12b0604188cfc35a557171331c5", size = 2486607, upload-time = "2026-06-25T14:35:21.956Z" }, + { url = "https://files.pythonhosted.org/packages/41/47/11b861efc359a38ef9ca1206235f5319669ee42ceed197c44403339e69a7/eckitlib-2.1.0.21-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:2c6da56832610be3a449bfa9fe56bc760135468856a3ed45f89a217801d4f798", size = 2623461, upload-time = "2026-06-25T14:59:16.56Z" }, + { url = "https://files.pythonhosted.org/packages/8e/23/bd23c7aa50bdaf46ca81f5c656f4e0f3b136fe2c51d52870946b6675c110/eckitlib-2.1.0.21-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d210fce1ab44715f6e7080305836bdb2e499bdf2e0bb66cae326b57cae3e8de", size = 7044383, upload-time = "2026-06-25T14:34:50.86Z" }, + { url = "https://files.pythonhosted.org/packages/74/70/6b5abe1f726eb95e6c677dbbefe0f673707c1a10e514b96d3f4c9c38b38f/eckitlib-2.1.0.21-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:17169e998b1839c57eb0716b33ffc9fc2c47b5aa5525fe14ec7c623fcffbce5d", size = 7172279, upload-time = "2026-06-25T14:35:22.195Z" }, ] [[package]] @@ -652,7 +652,7 @@ wheels = [ [[package]] name = "fdb5lib" -version = "5.22.0.26" +version = "5.21.4.21" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eccodeslib" }, @@ -660,22 +660,22 @@ dependencies = [ { name = "metkitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/49/5c1f7f151541c331d79522fe665e8a55fe9ffed3cde064bd71c063f7efba/fdb5lib-5.22.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:87d8af388e98a6f69723898b86fb5064ce131116925e5291d31f2dd75f6b9aa5", size = 1382211, upload-time = "2026-07-17T13:27:29.388Z" }, - { url = "https://files.pythonhosted.org/packages/81/1f/24f57837f246ac6fbe14749bb9c82af0c5c368a0e75a07a8b250ded04f3b/fdb5lib-5.22.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:0010a5f7e891805f65c75bc72943d0252ee4b7967b5fdfda2d8a2c517fecb7c4", size = 1411561, upload-time = "2026-07-17T13:23:49.057Z" }, - { url = "https://files.pythonhosted.org/packages/6f/31/dd1cd93184773b2827a34b0837973eab5ddebe4a9d2d19cd9127cb1191f7/fdb5lib-5.22.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f70cb2f13f68494cc7bee0b6375519c759a7086a518c55068acb66ee02926cb6", size = 1686593, upload-time = "2026-07-17T13:16:48.918Z" }, - { url = "https://files.pythonhosted.org/packages/c6/60/f5c9fc93e624548c009cc3089a01ce5248d0cfcabe6e8dfd767f22914d9f/fdb5lib-5.22.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fd90efb69d2a4aab231ae12d3665b1e175524b21af1502a7e417426167b27e18", size = 1666240, upload-time = "2026-07-17T13:32:49.89Z" }, - { url = "https://files.pythonhosted.org/packages/f9/bb/8255376ba4821d362e6d41cdad33275b2ef8f018cf21ac7df727450471ce/fdb5lib-5.22.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:aa8527fb1d5586cc7541befd66fd437af8609e2c8a9b1c3f39403c3a25bdbfac", size = 1382212, upload-time = "2026-07-17T13:59:32.088Z" }, - { url = "https://files.pythonhosted.org/packages/78/81/17ae4c2defd367d8412a15d6668d2f365bd0d5ed25d4c2dcedc438092a41/fdb5lib-5.22.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:231bcb831f2caef376269ed9bc2080d671e6491e5f0a68c06927b2d9c2f54247", size = 1411561, upload-time = "2026-07-17T13:46:53.299Z" }, - { url = "https://files.pythonhosted.org/packages/3e/ac/30a98657c871700dc22750515a72c7cb706669d86ba3ffd4311ebbcabc66/fdb5lib-5.22.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6efcb5d4c3bdd37d8d1f151e330d10beb8ebb4d798c6e934b9fdb8bdd150358d", size = 1686595, upload-time = "2026-07-17T13:17:08.019Z" }, - { url = "https://files.pythonhosted.org/packages/df/47/5990a0caeee4c1fd2527dad1830c3613cffaf3be58bdfa0ad9051c10b7a5/fdb5lib-5.22.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:13a7d72ee6a9c3a5ad6020ca5ebe4a253d2fd2864fc6e30ab0542aff3509ed5f", size = 1666241, upload-time = "2026-07-17T13:31:57.576Z" }, - { url = "https://files.pythonhosted.org/packages/22/11/eba302bf27ace0c7c93ece7c1d2236b95cb9130f0497039924ae06c30ab8/fdb5lib-5.22.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:de4afea1a1312ba217a9866ca178d6dfb6d9b1a6acee4cfc4beacfe054df3c1f", size = 1382211, upload-time = "2026-07-17T13:15:53.681Z" }, - { url = "https://files.pythonhosted.org/packages/ef/45/3e20a4d94b6635c1537a2ff0e72fe8c211ca0d4b5f95652b09a3ae175b50/fdb5lib-5.22.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:784e3a389e79502b00a5fdc7c042807f3c37a3118fe12fed32ed87fa434ba79b", size = 1411562, upload-time = "2026-07-17T13:43:43.886Z" }, - { url = "https://files.pythonhosted.org/packages/b7/ac/81153c8578456bf1bb1c1bc69d712177b695b5a3c97640a1e9fccd1f469e/fdb5lib-5.22.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e2238ac8d0c1d3a27c518d1e17fa0b7c6cf76a64dac2f25b1e55b987ab24b869", size = 1686594, upload-time = "2026-07-17T13:16:57.814Z" }, - { url = "https://files.pythonhosted.org/packages/42/93/f491422b46db859686f7820b706e9aff2e1968171e5fd0117a8392c57b14/fdb5lib-5.22.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ef674ca3f397a76e5fa5f38b7ce2070b08daa5f641f8da7ca1990b244ba17a65", size = 1666240, upload-time = "2026-07-17T13:29:12.866Z" }, - { url = "https://files.pythonhosted.org/packages/9a/b6/be543b0438e15e055ce11a984dd3fbd7c4667428b6bd71d3679985244b6a/fdb5lib-5.22.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:7e1f81e2349623edb7cd64fe5d99596b437fd9aa595741ae2001cd34ae4c0a33", size = 1382212, upload-time = "2026-07-17T13:59:03.879Z" }, - { url = "https://files.pythonhosted.org/packages/9a/74/9534c6f39b536259093830b475818297c6430bbd9747eb0c4b102a3217e0/fdb5lib-5.22.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:315b8cd55d4f405a95c09c566e47a5145c2e1e5bec4fda93239b37839edf6f7f", size = 1411563, upload-time = "2026-07-17T13:22:00.049Z" }, - { url = "https://files.pythonhosted.org/packages/12/f9/852f8dcdbc7091e69d1efe0f6280f4ab3cd54442a9eae92d30a54942d5f2/fdb5lib-5.22.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:aa9d55d36830c1fde15d766522326a5f931b5553ce8ead256eb321ab128ebed6", size = 1686595, upload-time = "2026-07-17T13:17:33.692Z" }, - { url = "https://files.pythonhosted.org/packages/0a/70/d7edf388ad0c8bcc693b632ea86df262617b2f0a1ac591d59209890c7fdb/fdb5lib-5.22.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:983e447ef67a8ecae44016f0b90003c2190013bb6824b4705a766dbd0c9cb990", size = 1666239, upload-time = "2026-07-17T13:30:00.03Z" }, + { url = "https://files.pythonhosted.org/packages/21/42/ad862302f4252ee81045a1d3b7dfd18c91afe71a565c2009ed3ead4e2828/fdb5lib-5.21.4.21-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:47457a9e524adc1e6386af29fcfdd8134e9ce302918eb88dcd40687c9bbef52b", size = 1383780, upload-time = "2026-06-25T14:50:12.38Z" }, + { url = "https://files.pythonhosted.org/packages/1b/0d/225080639df23bbc168afbe8a315713127946581650c38104f392dd4369b/fdb5lib-5.21.4.21-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:c8382a26ddb024750e0ef2079900c37bbb85e0a714577930d0f6eb964a6c9792", size = 1413311, upload-time = "2026-06-25T14:39:14.826Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d1/08c3a597684b40901c39cd932c7e3a11590f85f2d9c8545472ac70754223/fdb5lib-5.21.4.21-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:62a31a0f9d65ff97d87c2c9e2dd966a68f68fd34f048ee4c8c906f69e942ff89", size = 1687866, upload-time = "2026-06-25T14:35:12.348Z" }, + { url = "https://files.pythonhosted.org/packages/f6/67/3f6fb9e06f5434e3c001881eae57ea1e1fe33602cf1ed0375fdce343de44/fdb5lib-5.21.4.21-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:3b1f97c93c02d1eac2a0f7c80207942fc7ee1687117c90bf9c31b75957f38f4f", size = 1667418, upload-time = "2026-06-25T14:35:24.423Z" }, + { url = "https://files.pythonhosted.org/packages/30/b6/7cf7763e593c920b54e7be47b0a676a819b5b2aa7416e083444585eae04f/fdb5lib-5.21.4.21-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:4328703222058fe67dc590c7957aa0b09d92887455212c0bfd851fed2edad4bb", size = 1383779, upload-time = "2026-06-25T15:07:59.25Z" }, + { url = "https://files.pythonhosted.org/packages/ce/5f/a36d1c694859bce2511b548fea4fb42175689fb44e96d999ba9f6e1c5af7/fdb5lib-5.21.4.21-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:fe343e453db17ae80adad14d13f169feb99a7a81baa0446cb9dc6addba4ec5eb", size = 1413310, upload-time = "2026-06-25T15:20:02.611Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2e/6168244bf0da56887fb7a212276326f18b8a7553378e0d20e7f4c29f6fc0/fdb5lib-5.21.4.21-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6d072697b93ebfda93791993a68188baee8137ea7a5fbd540333a85d80a0b9ec", size = 1687865, upload-time = "2026-06-25T14:36:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/13/9a/c716cc83f3557d678de74acd7c9dbad3eeacbde227fda9d7db8bea5fbe0a/fdb5lib-5.21.4.21-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:1bd16c7515840aff8fcdf4fdb260a7c23e6d1e8c9ea54e0c7cea3a5974eba16a", size = 1667418, upload-time = "2026-06-25T14:35:51.007Z" }, + { url = "https://files.pythonhosted.org/packages/66/48/149ef9a854187423dbdf57133e2ba3655d6a784acf1bf51b9d56903c1dd8/fdb5lib-5.21.4.21-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:afd95eab549646717c5258757661c7b30854b2b79fd6f54f3dfe7f70be0e971b", size = 1383782, upload-time = "2026-06-25T15:04:00.29Z" }, + { url = "https://files.pythonhosted.org/packages/b8/bd/27a70984ee0a14013d046108d971327632bd5a65f0b092c66b55314dab03/fdb5lib-5.21.4.21-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:0a1e4349c6c1e89cd8dfbd0c87964a493e2906e25f17c967cbf3e2468b44c4a8", size = 1413311, upload-time = "2026-06-25T14:40:14.193Z" }, + { url = "https://files.pythonhosted.org/packages/b0/95/2d2a435d1476c346e66950f11b4c181bca2e7ce06fbfa2ec74f3049e01af/fdb5lib-5.21.4.21-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:7fc98326abfa122103d760138e0baaa63fd509ca23d5bb266701cc722d7e9a09", size = 1687866, upload-time = "2026-06-25T14:33:09.171Z" }, + { url = "https://files.pythonhosted.org/packages/87/9a/f5645fe4c7d7e141a3f107cdd1c946f2ee8a120b7c861527f8b41ae5ceab/fdb5lib-5.21.4.21-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:f43fd9d0aa1961905a0c973471ed98c7f33867647e5178816a36d8068fab5029", size = 1667421, upload-time = "2026-06-25T14:35:40.179Z" }, + { url = "https://files.pythonhosted.org/packages/37/80/fa2b8dde32cdf73b23deaa5c7716b9fa24e652a7664903ac4a25f9cd4451/fdb5lib-5.21.4.21-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:59715fdb92026f6ff6aa9e450da2d61fbdbd43e4b273fa92993580a9928fa43f", size = 1383781, upload-time = "2026-06-25T14:35:24.469Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b1/be84089e4e930367e8ef9ef122ba483bc5ce08f486447bc2b161ad0cb8f6/fdb5lib-5.21.4.21-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:792f1c9e42e2ff9133c2a495b601c412c9fd9abf7afee6ca343b0b97f41b4e0b", size = 1413312, upload-time = "2026-06-25T14:59:19.479Z" }, + { url = "https://files.pythonhosted.org/packages/48/5c/e9858d63d3d69d8539cedb3f9dfaff0eda4c7a972271eb2a4c0be39f1b5c/fdb5lib-5.21.4.21-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:ac5f25d58b80c674b3b4186a06709898bb06d05195292498820d861b1237c872", size = 1687866, upload-time = "2026-06-25T14:34:53.662Z" }, + { url = "https://files.pythonhosted.org/packages/b9/20/5c5be93b09a59d5eb546fd67f723bd6f3585784d7bd081099cb2ea864a7c/fdb5lib-5.21.4.21-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:e649d51bfc7797f3989481932b7889a72b5255d9b46722ba83505a035ba5c764", size = 1667418, upload-time = "2026-06-25T14:35:26.413Z" }, ] [[package]] @@ -1096,34 +1096,34 @@ wheels = [ [[package]] name = "metkitlib" -version = "1.19.0.26" +version = "1.18.3.21" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eccodeslib" }, { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/78/97/ba9000713307e88ed6184bb183ac45b8868c7d03a8343d4ef839be9c50bc/metkitlib-1.19.0.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4161935ea9f57676f1a88c8becf31d9448cb757b2ece2b87b32b29c53786a46e", size = 989625, upload-time = "2026-07-17T13:27:34.039Z" }, - { url = "https://files.pythonhosted.org/packages/1a/c5/8b497e39f6b36ee4ffd46191d77fb395d432d681d812d456f0ee13796594/metkitlib-1.19.0.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:1f1602c112fc15d4dcf94a016cbce54b2f87e2be5fcf41f3cf3d219af50085d7", size = 1040412, upload-time = "2026-07-17T13:23:54.918Z" }, - { url = "https://files.pythonhosted.org/packages/0d/5c/ca936bf7b3088c4ef51f89521d437a9e6d04aa6340609f12d3c106507965/metkitlib-1.19.0.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:e350669905fad1a4d4b07164396b0f613cad762bde9bdd34d11cd1706ca2a925", size = 1081997, upload-time = "2026-07-17T13:16:52.531Z" }, - { url = "https://files.pythonhosted.org/packages/62/77/093233001432a0f33413d9158a7e5448eb190618115d0957c58c3fbc24b1/metkitlib-1.19.0.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:5eec63149eadbf95c4cb7fb7284744418dcbc4696358952311cb72d0c7992929", size = 1119066, upload-time = "2026-07-17T13:32:56.207Z" }, - { url = "https://files.pythonhosted.org/packages/39/f0/065e0a54ee7608e738aefd85b270e6e9f2a3981ca65e829ad48a2f3f525f/metkitlib-1.19.0.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:26a885638422eeed4cb17d6df2f7c006a0a2e6ce4f89a63aee841519814fe9c4", size = 989622, upload-time = "2026-07-17T13:59:36.595Z" }, - { url = "https://files.pythonhosted.org/packages/c9/33/ad9f953e39e41cd30bf9b8badb258ddee2d28d1878d18f50eff2cd76f632/metkitlib-1.19.0.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:d702ad19561ff93484643d844dc3813b32b0867f7a0af6a91ef982c9c9f6699d", size = 1040412, upload-time = "2026-07-17T13:46:58.768Z" }, - { url = "https://files.pythonhosted.org/packages/d4/bc/e1c0d04271e921a8bf8af38ff63a69716a1466ca8f81f219f0a84e1aac45/metkitlib-1.19.0.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:147d8919d33e97cbfbe0bca8419ac0e5567e40d75a70524976668d12eb63a16b", size = 1081998, upload-time = "2026-07-17T13:17:11.925Z" }, - { url = "https://files.pythonhosted.org/packages/be/12/c5786dc0aa79a9a04635610e9ff4d9957c28920bb1767ecc96fc454138eb/metkitlib-1.19.0.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:622d04e918f60ea12e7f847d555ec7e0bbab762d9c77ccfc1b3c3e6cdb9eab34", size = 1119064, upload-time = "2026-07-17T13:32:03.594Z" }, - { url = "https://files.pythonhosted.org/packages/8f/36/076dc6e6e7e2d7db8f7e990f9a0c96c029328ad7837c3967f506ed254007/metkitlib-1.19.0.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:58a913c507b583667a64a03089ded8c717bbcea4b9480737876d76990797b95f", size = 989628, upload-time = "2026-07-17T13:15:58.719Z" }, - { url = "https://files.pythonhosted.org/packages/e8/24/a7413c09ad1ed2ea20c1b2e7ce9f48024f205ec3ccb9c9df3a389fb025bd/metkitlib-1.19.0.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:56b3e15c0f36d6e54d6342bcb5a118e13ae142609ad84c80a1dc4768795b8406", size = 1040412, upload-time = "2026-07-17T13:43:49.535Z" }, - { url = "https://files.pythonhosted.org/packages/60/1c/67814c698a7c1b5e6ab66cb72a451e98e31769ccd33ff4dde21d97e4c92c/metkitlib-1.19.0.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:0ae9cfe83021d7e769a84683773e173c9c781bfef79d9c7dbebff4e9464f561b", size = 1081994, upload-time = "2026-07-17T13:17:02.019Z" }, - { url = "https://files.pythonhosted.org/packages/60/e3/4b0c5bf41eb2ce28f37d9f8b70855d29586a4ec08020531ecd80c7df1989/metkitlib-1.19.0.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:052a39c19a986841d05d54b298492539d039c01f783592f41ef0f5e95aefd5b9", size = 1119065, upload-time = "2026-07-17T13:29:19.571Z" }, - { url = "https://files.pythonhosted.org/packages/af/11/cd6a9b7dc715d3450195ba50a4c2ba3b5bef671329c1cf4610d951e49108/metkitlib-1.19.0.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:893ebb0e63944e796a110b934c2451fb2c7062be46e57dafd5435340e98eb883", size = 989626, upload-time = "2026-07-17T13:59:08.7Z" }, - { url = "https://files.pythonhosted.org/packages/53/8e/062e80d64549447bb44070a4a711a59c119871f945a590c659e687b2ade6/metkitlib-1.19.0.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:4f40d8867b21b7217b21765c8e2f44c84ec1ddc0c783344da9e9894ede8f6c19", size = 1040410, upload-time = "2026-07-17T13:22:05.776Z" }, - { url = "https://files.pythonhosted.org/packages/05/44/332894e30f26cebd23e2304e0453236734c05679724ac99ed5385821cb76/metkitlib-1.19.0.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:793b1f76a984d19afc66067f77794b8b4b613b31bc578ec57ec7c52a843c868d", size = 1081996, upload-time = "2026-07-17T13:17:37.439Z" }, - { url = "https://files.pythonhosted.org/packages/95/46/6f86f6980eff04f8ab3b13eeee14f537ebd30b828597763136963b1187bd/metkitlib-1.19.0.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:cd1476d4f44448fb6db236afff0a5584154d310c650632d1c515f754467c9091", size = 1119064, upload-time = "2026-07-17T13:30:05.971Z" }, + { url = "https://files.pythonhosted.org/packages/83/39/22796962d3fa1f9c1933ec435cae770a6e9c12cd84d2b60c36049ce73a6c/metkitlib-1.18.3.21-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:2744b70ba96c0e575473147a7629d3bda32bcfb3680ee09fe80d0e874328b766", size = 948486, upload-time = "2026-06-25T14:50:14.901Z" }, + { url = "https://files.pythonhosted.org/packages/be/5f/788970e80ac0460c0ea0567c49df546d2b46f2c816be5f4f7d3b49d2d836/metkitlib-1.18.3.21-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:1204ce430a0a103a7a0b54ede4320643736ec9eaefb4f4a3a3184f799aed4bbd", size = 993570, upload-time = "2026-06-25T14:39:18.166Z" }, + { url = "https://files.pythonhosted.org/packages/00/75/f00cc2c7b36471c396acbaf70dfc424d94ec6e3f7ee22632d8f82714b00c/metkitlib-1.18.3.21-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:7898fca26401fe091872a3214cbdd46731b5304c3dd7b08f78c635d0c74b0f6c", size = 1038267, upload-time = "2026-06-25T14:35:14.733Z" }, + { url = "https://files.pythonhosted.org/packages/25/ce/a528262530c8c39aa8b7cbe35b6abfbc8db32dc3e75cf2aa86d000a6dde6/metkitlib-1.18.3.21-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f2047b67f95a498d315a00a6e24cade20cc20479f7c3ca4650ad30a083d78c83", size = 1073555, upload-time = "2026-06-25T14:35:27.688Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a2/775eecc029b413f019844bd8fdc6c268fdad99958e7e4246091bc2b26d2a/metkitlib-1.18.3.21-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:6daf0c0695b3d6ee84508059e9112c7b5befe5376b55468fd3ccb87bdc0f2106", size = 948484, upload-time = "2026-06-25T15:08:01.746Z" }, + { url = "https://files.pythonhosted.org/packages/f7/98/2c28bdbc4300022418c5b05e72208434bcb608b852f1fa151d0d2cf5dbd3/metkitlib-1.18.3.21-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:8e1309b9dfd02b9611628f38695b3991c7c05a678566da3baab828878d004f66", size = 993570, upload-time = "2026-06-25T15:20:05.454Z" }, + { url = "https://files.pythonhosted.org/packages/22/4a/91df7945c9673e9db26c0a9fd04085ccb6c0b6287213ad9fabbda3d4241a/metkitlib-1.18.3.21-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f93c8046368d49534844c2aaa7b45a8810ea14f291ea9241e345ddecbda22463", size = 1038267, upload-time = "2026-06-25T14:36:14.432Z" }, + { url = "https://files.pythonhosted.org/packages/22/2c/6b65b295e689ef40605c0da4e58f6042cc56061132cacefb9ba668da144d/metkitlib-1.18.3.21-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:42560798e800dec6f251c8d947d4560422dbb33cc139436954cbee674ebf8b18", size = 1073556, upload-time = "2026-06-25T14:35:54.441Z" }, + { url = "https://files.pythonhosted.org/packages/50/3a/aa7cba991330a143334f3a25958790df045a425e8f62fb6608811216b1b4/metkitlib-1.18.3.21-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:ed70c936f9ef1ec898c7d2d4450548da9c51a289bd15ee5abbab4ac1a5b84436", size = 948486, upload-time = "2026-06-25T15:04:02.689Z" }, + { url = "https://files.pythonhosted.org/packages/b0/4e/7c28c315d4be71270120631af02b87beca7674f3b1e4e9be404a7db62a11/metkitlib-1.18.3.21-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:308e3e2084da51650b09657731b911f18e4edef26f16548c50c2125b61666bba", size = 993575, upload-time = "2026-06-25T14:40:17.046Z" }, + { url = "https://files.pythonhosted.org/packages/cc/67/095a563914a43250430f3c69fd235d0a0d5e8bc405e3ce2c97f2874e6a83/metkitlib-1.18.3.21-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:0155b398de2bf16759495718d9ebf43463865c2b1444f0c837ce158d67111c4c", size = 1038265, upload-time = "2026-06-25T14:33:11.495Z" }, + { url = "https://files.pythonhosted.org/packages/1f/41/e65cb9cb3949440a5b691adc2035f8897863b802ee747bddf49a2e8eb811/metkitlib-1.18.3.21-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1d47fcd78529e67a72fad30ee7df85f2a4455245ae58cd9c38a2d3b3902311d0", size = 1073557, upload-time = "2026-06-25T14:35:43.43Z" }, + { url = "https://files.pythonhosted.org/packages/8d/b4/d99fb6f49937958ce1f2bfaa98c407b7d38e2be7dacbde51a0173cdd2504/metkitlib-1.18.3.21-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:b2a793f597766ec1f1dfc510706ec6c7c061b5150c0f2d9f0f9914d28ab3442b", size = 948485, upload-time = "2026-06-25T14:35:28.261Z" }, + { url = "https://files.pythonhosted.org/packages/34/47/ec16aafb2e3ceea1725a5aaf33362b378c2e327c30fe96c8347ff1d94b61/metkitlib-1.18.3.21-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:a41b4d7a723237f2b76adc566f589d4f6f8ddaa42b8d83aaa513fdfd405f0557", size = 993573, upload-time = "2026-06-25T14:59:22.827Z" }, + { url = "https://files.pythonhosted.org/packages/4d/d0/b19d70b208731dbb88be918c066f369e5eda6d4f056e9f1dd212b134264f/metkitlib-1.18.3.21-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:13873e85ee6a0c561e5c1d0421bc80540f0ef06be3b710f53a6be6019c84397e", size = 1038265, upload-time = "2026-06-25T14:34:56.306Z" }, + { url = "https://files.pythonhosted.org/packages/fd/78/c5235fe5cd54fad3e96aa2b9e5f616dd121fbfa68283c2744d208a080606/metkitlib-1.18.3.21-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:a20603e0c9726ad5fa4f5f2a5633c6cdf6d3651d26807d8cfa812aa904c5d001", size = 1073557, upload-time = "2026-06-25T14:35:30.473Z" }, ] [[package]] name = "mir-python" -version = "1.29.1.26" +version = "1.29.0.21" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eckit" }, @@ -1136,27 +1136,27 @@ dependencies = [ { name = "scipy", version = "1.18.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/45/b17c9f6add1c6aabcd58e983581a88bb833338fdb9ad601ed650ab092fa5/mir_python-1.29.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1bf2bde0dc1453ca67d4b343302a2159596548cb6f65d31f564c6e76f061e2ce", size = 125800, upload-time = "2026-07-17T13:27:36.165Z" }, - { url = "https://files.pythonhosted.org/packages/84/2e/edf17da43a670357b4ff4e7ac343a6c0ffca3057e1d5a0ae03bc453ae1fc/mir_python-1.29.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:5090887138be393bc721abf293c9177a1f3ade545efe1684d96061a343008531", size = 128746, upload-time = "2026-07-17T13:23:57.466Z" }, - { url = "https://files.pythonhosted.org/packages/94/70/47f19b88ce05791c39ad662389ccd80833ba8df435bd830f44b183277dbd/mir_python-1.29.1.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:790b094d065f6b62a2862b37d1c51dbec6664a3b3cda853dea577ff5d80d1082", size = 118685, upload-time = "2026-07-17T13:16:56.674Z" }, - { url = "https://files.pythonhosted.org/packages/ac/9a/696880f0618f7725c4daedc84bd6f60bb8ccf881ad4d4d83bf49e22dff82/mir_python-1.29.1.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:0353782e561b00fa65f38b3f8a8a5958790f6e92ba6d12f3378d06e80ef1252d", size = 121404, upload-time = "2026-07-17T13:33:02.516Z" }, - { url = "https://files.pythonhosted.org/packages/9f/0c/d60e89bec16900b56b18b7dad9b5c62fe01059e8c0f95e2195da475779dc/mir_python-1.29.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:2d81051c31f2e79584e2e75ff7003fb66afee93ace90ee6fc3fc89c8912d62be", size = 126303, upload-time = "2026-07-17T13:59:38.649Z" }, - { url = "https://files.pythonhosted.org/packages/2d/84/eac68651147db28589a42e2319cfa7cbfcb18b5ea2f3194917f8d0b224f1/mir_python-1.29.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:2296b588a6956ac5bd3b3c9343e15ba644edfc89489c55e1afe6649a3dcc2fca", size = 130964, upload-time = "2026-07-17T13:47:01.376Z" }, - { url = "https://files.pythonhosted.org/packages/90/59/4cfb13022308b89c6293f47be9921f46f24e43c4e7a49c91a2b796de5785/mir_python-1.29.1.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f3f0a898a303817fd8f9d40e7c7d973c495ce7914e05ed56e7e0f07df405ebf6", size = 121514, upload-time = "2026-07-17T13:17:15.662Z" }, - { url = "https://files.pythonhosted.org/packages/88/d4/3a9664e7c29612b3142f28985d8acd2a79665e5c64fa3e030abbd506f2f7/mir_python-1.29.1.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2874f5b357ee9a74fee1fa993620be802995e16420a0bfef67710d877827e730", size = 124817, upload-time = "2026-07-17T13:32:09.599Z" }, - { url = "https://files.pythonhosted.org/packages/25/8a/0c11e67519007341f8ec099345dff27eb9fdfc4161ccf1f9955b80c5f6a7/mir_python-1.29.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:67937d7ea6b6e55652b83574e6bd047ba0f53fc44f6a6680b3e2bc8b89e86e46", size = 125709, upload-time = "2026-07-17T13:16:01.509Z" }, - { url = "https://files.pythonhosted.org/packages/9a/87/1a938c4ba4a1476e1aca196b91f079767ab7fde7f2c4701b7b7c1bccc259/mir_python-1.29.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b3efb75fc23ce63d104e63d5c04fa1cd46be050b07df5c4fa00669a4771a0979", size = 130180, upload-time = "2026-07-17T13:43:52.033Z" }, - { url = "https://files.pythonhosted.org/packages/e8/41/c55f505779dacf9f2d513346b946172976de105e4f9f014596a7fa2a7685/mir_python-1.29.1.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c5276f17e1b59c2209f2e5f7962cfd8e113113262192ec88fecd962aa4764d18", size = 121406, upload-time = "2026-07-17T13:17:10.847Z" }, - { url = "https://files.pythonhosted.org/packages/16/b5/a3dfde9299397abddaa3e3abcd9827f43da0ce67f5cab5334fc7e0c90339/mir_python-1.29.1.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:78980944a6885a4a55e94ecc9e0ff726380a699abb8f46e4eaaaf2aad0ae49b4", size = 124700, upload-time = "2026-07-17T13:29:26.096Z" }, - { url = "https://files.pythonhosted.org/packages/ad/d3/e5d995af94ec1db6e8e831eb778974cfcad52fcdfa897b216120285a1ec7/mir_python-1.29.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:5d789897a0a454e399e5e81e638e5fb4b5d0a43fed29fe1b990d812144c057d9", size = 126859, upload-time = "2026-07-17T13:59:11.115Z" }, - { url = "https://files.pythonhosted.org/packages/db/ea/4b7d22aaa3772d80af8ccdab90ffb5ff187f0763a52400f24a763f2d0dbf/mir_python-1.29.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:6622846e21a8f797ba64889fc3658dabf40d254f97f9e54a47d4a91addecbcf5", size = 130548, upload-time = "2026-07-17T13:22:08.106Z" }, - { url = "https://files.pythonhosted.org/packages/36/94/14a8b521f3e639351fd00a35467b70e0798ce9f6607d301a41b8e12f6e23/mir_python-1.29.1.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:33d3d38fe9d68eb31d15c606160bf6c6719c2f48795ad20469e43a0a6987d830", size = 122200, upload-time = "2026-07-17T13:17:41.447Z" }, - { url = "https://files.pythonhosted.org/packages/45/92/e4645d6f1e9a965c64fbfe6b2bc6fb96efa8ece0216c7ea3a023fafe1c62/mir_python-1.29.1.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:864452e086b01a55a0b671da10c8ac68fef591948b215197bdffb87ac7d997f6", size = 124512, upload-time = "2026-07-17T13:30:12.727Z" }, + { url = "https://files.pythonhosted.org/packages/7a/4a/f5ce941be7db958e6d3a3b9e63bbb3c1e4c08bea77852ff1c2152498de46/mir_python-1.29.0.21-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:5958bda598cc8af6beed4021407042603a9d4e5d215a40fffd0c29aae34e210d", size = 125476, upload-time = "2026-06-25T14:50:17.562Z" }, + { url = "https://files.pythonhosted.org/packages/aa/7d/a6ce460075e8395f3b017d9a33c1381f34caea6481e38365f01bb22b752c/mir_python-1.29.0.21-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:037eaaef52804c047e375aa83b1eff26aaa6c5e8c4af47290b1b68ac6b951406", size = 128519, upload-time = "2026-06-25T14:39:20.69Z" }, + { url = "https://files.pythonhosted.org/packages/28/53/7827d331e962ff757c11d4911f80252502576b8cf22b4e45fe449447dc4b/mir_python-1.29.0.21-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:b33f877961292b2d59e13223ffb00c330d0fceb3e8374cfae9975e72587d68be", size = 118308, upload-time = "2026-06-25T14:35:19.381Z" }, + { url = "https://files.pythonhosted.org/packages/bf/d8/7e45629b8816204778e092aea4782555b5b6d022c6264871ab8dc1e51799/mir_python-1.29.0.21-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:17408d9f17b3b566540ea116637e485b43ccec34acd72337ebc2f3bfe868d2c4", size = 121020, upload-time = "2026-06-25T14:35:34.668Z" }, + { url = "https://files.pythonhosted.org/packages/28/50/57affaf98168b4fe6baa667f5b9e30a7189c312b5603ffcfd50a6bae4371/mir_python-1.29.0.21-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:5c405ba1836a13d8a7e61f72df93bfac637fd0a070aedb0c2235e525d97d1e68", size = 125873, upload-time = "2026-06-25T15:08:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f5/3a374341976952937f78c5e8fa437413a66d5c4e4f2daaa54023be0562c3/mir_python-1.29.0.21-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:391879074894800fd770c85748901cc93a1e7d2ec67d660ae0832a683be12f9a", size = 130600, upload-time = "2026-06-25T15:20:08.162Z" }, + { url = "https://files.pythonhosted.org/packages/a7/90/304ba78af7a64ee6123bac83b62ee9de6e75f8ca07286b8ceb7d672b8d59/mir_python-1.29.0.21-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e9dc04f558ec4b7f612888cd349a0ef866b9ae2fe802bcfce19c0133f7e39d74", size = 121244, upload-time = "2026-06-25T14:36:19.15Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/03d60923110e18a563fc875a346e86736c445c2c15960ae0cfeeeab38449/mir_python-1.29.0.21-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3be55256ae6845ba6c9c2403dbe9f4a7d6c24617e3032963f5dcf2e771769dee", size = 124384, upload-time = "2026-06-25T14:36:00.651Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d8/6a01aa7b582b8e99b5e5f8eb2f7062bd5a57816cc1e2d48cfc25a87f666a/mir_python-1.29.0.21-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:a39819091d1cd2795c401754800a6d9f81345c1a36164403d42d78bcdf14e7a9", size = 125296, upload-time = "2026-06-25T15:04:04.925Z" }, + { url = "https://files.pythonhosted.org/packages/c4/40/10acd808e51ba73a63614ca59e30d13696bd52ec31fad6e7460986003d6a/mir_python-1.29.0.21-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:e5d0c48d203884db81b6a755feff032ff592abf049a14fd7c110bb8ccc1f226a", size = 129808, upload-time = "2026-06-25T14:40:20.072Z" }, + { url = "https://files.pythonhosted.org/packages/12/36/e5ef1d56cf5187a66368572c3a0f85a1d25f2a6496649828331d061d7093/mir_python-1.29.0.21-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f44fdc895eb5d2af8891df3d93848ece259eebfb8579b403cc66b8e34fe593b5", size = 120965, upload-time = "2026-06-25T14:33:16.163Z" }, + { url = "https://files.pythonhosted.org/packages/69/8b/106d819290226aa56ac99359e4a8875e9d084c0f05478d6aed3fd56e87f0/mir_python-1.29.0.21-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:2f1e2dbdc06e545bd784aa176ae11a9b65b0a6bf6f3bf0171156a2b169267b15", size = 124143, upload-time = "2026-06-25T14:35:49.705Z" }, + { url = "https://files.pythonhosted.org/packages/39/52/7c6c1831786a3cda8c924a8973e43775f23b8ddbf27451e585cdc94fd1fb/mir_python-1.29.0.21-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:e13ee30381943426434af73875d753b1ded6612928f62d9473e94841c72cf64e", size = 126541, upload-time = "2026-06-25T14:35:31.224Z" }, + { url = "https://files.pythonhosted.org/packages/98/b1/3e1e850dcb7e4f307e6296ac9d14602b0b6df304066050f0537af57ff7db/mir_python-1.29.0.21-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:2d07c8448492bd1113070e333f5bead2449da0bbea169ee3e25683e254df266f", size = 130285, upload-time = "2026-06-25T14:59:25.541Z" }, + { url = "https://files.pythonhosted.org/packages/68/ae/faec83302748c96110083148d26de544f52c9c6ee132670702fe63d0fadf/mir_python-1.29.0.21-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:f8d4e04b6ddb6e74fbe67d9d104d05c7539c1b97a3a6f75e6a7a03bb06a46024", size = 121824, upload-time = "2026-06-25T14:35:00.872Z" }, + { url = "https://files.pythonhosted.org/packages/51/28/4bda279c2fee799c3602ff2cf462155edb8bd6c817edeca5bf5088709a48/mir_python-1.29.0.21-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:99c790ba19c6f47c241d7337e2338c82ad9ce257f240f8bcd32268f842b91d93", size = 124096, upload-time = "2026-06-25T14:35:37.655Z" }, ] [[package]] name = "mirlib" -version = "1.29.1.26" +version = "1.29.0.21" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "atlaslib-ecmwf" }, @@ -1164,22 +1164,22 @@ dependencies = [ { name = "eckitlib" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/cb/649270717c07797bf93c6f7233719d1a178def42ff089e9cffd67653ee5d/mirlib-1.29.1.26-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:c65079c7be3c37b85c28c76434b96aaa98f9bd500c4fdbc234b0f9d815a6b581", size = 1843649, upload-time = "2026-07-17T13:27:38.637Z" }, - { url = "https://files.pythonhosted.org/packages/e3/99/01bc5fafa430598831afc31bb1727f514912862fcf2507e0ab3f90d51396/mirlib-1.29.1.26-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:69141f8a693964332d4994ec34e5de1747e64d2b5522899bf82ec140380e4b68", size = 1939878, upload-time = "2026-07-17T13:24:00.065Z" }, - { url = "https://files.pythonhosted.org/packages/62/f8/f7b7c024896bc9274609b3d0f900c137ce1740efe9821508925a13815bec/mirlib-1.29.1.26-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:1aac3bee63787042710da6c7a6480f6f4ec823062d0465a930299d15f9591ff1", size = 2450640, upload-time = "2026-07-17T13:16:54.762Z" }, - { url = "https://files.pythonhosted.org/packages/60/12/72dc2cb2f1d1fea279f0e0142fd798244234aff93fbd0184bd9d904e7e02/mirlib-1.29.1.26-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:279ed95888a89a67a9c8c3017a4fc61a44901f5b76185383fa47c2ee32ec9b74", size = 2425118, upload-time = "2026-07-17T13:32:59.533Z" }, - { url = "https://files.pythonhosted.org/packages/ec/fa/758a67ef82a4f56a5821bb8482304638a69319421fb6ba201af44287a129/mirlib-1.29.1.26-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:3fc863b9cb6c4d3fd8abda065c69cba430142a014d2d3d1e1e91f85263b1c0d0", size = 1843650, upload-time = "2026-07-17T13:59:40.981Z" }, - { url = "https://files.pythonhosted.org/packages/83/02/91668531c58023cfa3fe49059b23db66114b035b1c3797cde66c5027b07d/mirlib-1.29.1.26-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:e935a4e39c515b99d3e5ab2ee051a8f386ed67b646ef774769883927b0a8d846", size = 1939875, upload-time = "2026-07-17T13:47:03.988Z" }, - { url = "https://files.pythonhosted.org/packages/96/04/5f7ddfe54cb4d22564c52f84a3845b2e3b5c00b776ab38bd9cd335956388/mirlib-1.29.1.26-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:034d9ec0ccd8a8a080faa04857e2a1328d9a8e3fb6569e08cd2bbbefa4c42898", size = 2450643, upload-time = "2026-07-17T13:17:13.761Z" }, - { url = "https://files.pythonhosted.org/packages/4c/d3/932b7ec146768300c4988262b879cd05df8290e455ee374dbe9feb39d218/mirlib-1.29.1.26-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a2b43f3930223b4eb1815f3e3f83258d6e3c39b4f8a6861f4cdde82165c937cd", size = 2425115, upload-time = "2026-07-17T13:32:06.877Z" }, - { url = "https://files.pythonhosted.org/packages/3a/f3/d5ccd589dadea6e195d3b443e58663dc56077cc53cc351880735d45f8c91/mirlib-1.29.1.26-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:8da65c1d57d0e19515c3d94669391e86eea939426086e1517b112324da7c6db7", size = 1843653, upload-time = "2026-07-17T13:16:04.221Z" }, - { url = "https://files.pythonhosted.org/packages/36/11/fd86dcb06dc2e5fbcff0c7ef5c6736b488055c196f6622193401d5864531/mirlib-1.29.1.26-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:e7f6cb1d8f5f9ffe5538878fbbdf9ae0cf98895145d7720f2aad8f7f83c811ca", size = 1939196, upload-time = "2026-07-17T13:43:54.618Z" }, - { url = "https://files.pythonhosted.org/packages/f5/86/8cad36c0e3a8ddf2e1019f8926a6ee3e30396525374a69866a9775109b08/mirlib-1.29.1.26-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c380bf036a17d3f6f3001831a3a031e6103b8ab2c774dc7b6690b4d58ee8f053", size = 2450643, upload-time = "2026-07-17T13:17:08.529Z" }, - { url = "https://files.pythonhosted.org/packages/c8/13/88ce4474729202753e0a056b857e3eac0665a7ea3241c196be28131c5c00/mirlib-1.29.1.26-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1d0a4d6971ad4dcbac7f1e2621a94cffc1b06cf8e2dd6636d08ddf069769f221", size = 2425116, upload-time = "2026-07-17T13:29:23.036Z" }, - { url = "https://files.pythonhosted.org/packages/07/5a/b64779e356b9bc1af7caa10c1094a644d5b1d339bd90e8623babf24f9acf/mirlib-1.29.1.26-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:b06507ad7ab1a93171049a507855ee651f71b2fac0937a75afabd71f3fbc0d72", size = 1843652, upload-time = "2026-07-17T13:59:13.577Z" }, - { url = "https://files.pythonhosted.org/packages/ce/48/9af899fa891da23a4012172902e06418ff83e018594d3a230fa6b34dff44/mirlib-1.29.1.26-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:bdb76653f8f3da8dfa099162f1674022304f48ddead525a9fd919cc74efd7a6b", size = 1939196, upload-time = "2026-07-17T13:22:10.814Z" }, - { url = "https://files.pythonhosted.org/packages/11/33/b004d969256e57677944329736a370c68206c07cbb1aff05133e70186955/mirlib-1.29.1.26-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:70d48cdb0a2d3e89d095fec8f6ed9de89cad21c087ae53d231d123febfda31b5", size = 2450644, upload-time = "2026-07-17T13:17:39.287Z" }, - { url = "https://files.pythonhosted.org/packages/ce/23/694345c717c046ffb23dcb6f3ca2f4a94749b804986d26ca1402a2ce1148/mirlib-1.29.1.26-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:df415d34ca8c933760ab3d54dea02ae68fab50ce4242b1d4f2f0b64fe57a36fd", size = 2425113, upload-time = "2026-07-17T13:30:09.66Z" }, + { url = "https://files.pythonhosted.org/packages/45/c5/0d10af6667266e39472fdfbd2a6f58864d3a075439ab25f908ece90c9fa8/mirlib-1.29.0.21-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:54f41cf28d53148cf2e7d67666a672a1a03d81a5c96b2e059a037daa25951894", size = 1843730, upload-time = "2026-06-25T14:50:20.213Z" }, + { url = "https://files.pythonhosted.org/packages/e9/36/65384d0e56b90362a2621c5b38076108dded9b9fab6af922b239abedddff/mirlib-1.29.0.21-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:d8bed80e4b91812ddf476095041975ad84c9cf06fa1c29b877c33fd55b16f286", size = 1939340, upload-time = "2026-06-25T14:39:23.281Z" }, + { url = "https://files.pythonhosted.org/packages/94/15/7880300d914b422a7e23ad056db0b2ffb2e71a1d770aa4d4bf700bf44d85/mirlib-1.29.0.21-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dac25db06eb044c4aea101be5bfc938b8d15113200cd37d0ff042467de0de8bb", size = 2451013, upload-time = "2026-06-25T14:35:17.097Z" }, + { url = "https://files.pythonhosted.org/packages/a7/0b/3fae67c84bdb27af1d039b5d825f8f5acaba8b2a1e3f72d5ea292ee992ae/mirlib-1.29.0.21-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2b1601190a7b1f4af2f14aebbeb5b6349315d26a99e1e1009e869b3d0bb0cffb", size = 2425273, upload-time = "2026-06-25T14:35:31.423Z" }, + { url = "https://files.pythonhosted.org/packages/35/4d/7e85e5db10c676c0f38da1a4948b2b1ca757ad208b23d250d260d41aeb7e/mirlib-1.29.0.21-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:ba7ecd1fa4f9421c93b3b1950fd6e3a80fb397b383c4351ddd2a2d219f980133", size = 1843724, upload-time = "2026-06-25T15:08:06.274Z" }, + { url = "https://files.pythonhosted.org/packages/14/f9/d35cef505db8f650273a478538b7ad1f5e6390a1a17f61a1f98860f501b6/mirlib-1.29.0.21-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:b6a75f1411da3c2eee96b5ec1946f9260f232fce7002932533346d70ff9ce581", size = 1939338, upload-time = "2026-06-25T15:20:10.95Z" }, + { url = "https://files.pythonhosted.org/packages/0e/c3/a9debac769dd3793036f1fb4151795e4773f2ee663258a4e2ecf8dff0835/mirlib-1.29.0.21-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:925d982290714ab8b154ac6b525ce9b09b23656f8755a84fabf66350762db660", size = 2451012, upload-time = "2026-06-25T14:36:16.857Z" }, + { url = "https://files.pythonhosted.org/packages/fe/6b/35dc8cb472ed7c5df6d663544a58979a547905db72309eb0cea53b532487/mirlib-1.29.0.21-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:dd0f3c3829f54c4051ac5f0a3aee36166eafd88361e469ef66a7c785b77250cb", size = 2425272, upload-time = "2026-06-25T14:35:57.833Z" }, + { url = "https://files.pythonhosted.org/packages/67/92/30d0ffc841cdc269b395eb0155f31b8e751a70c35278179ce71f91e6db6d/mirlib-1.29.0.21-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:48cf74cd360f7e186dcba84c99a56ad6d2935a4973b2f708a442f6dd103b4cce", size = 1843726, upload-time = "2026-06-25T15:04:07.352Z" }, + { url = "https://files.pythonhosted.org/packages/04/22/75a3f175384a5d988c377b411fe430fa4be19854a1e7d4005ab8c64afd02/mirlib-1.29.0.21-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:b7a25ece3e8cd0ace1c9d87e0f5b1354bdd98404c5455ec887e0bfa86cdf54a0", size = 1940018, upload-time = "2026-06-25T14:40:22.708Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e4/84442fbc3560cc727a47849dfe25abce494b342e026960366ada8ba8e2c5/mirlib-1.29.0.21-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:451d57fcf88769c0f32b2bb4a4dcf0024b7f08b2ff24ef3e099640ad40231141", size = 2451009, upload-time = "2026-06-25T14:33:13.96Z" }, + { url = "https://files.pythonhosted.org/packages/58/d4/e8fd624cfd977d839d15c6374d4923cf0a1e95ed6d2abcb9134096925a75/mirlib-1.29.0.21-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6650cbb11fd6cb74b1730e6ed29a12da6e74b6fdd7c9ae2275de9654b3593854", size = 2425274, upload-time = "2026-06-25T14:35:46.819Z" }, + { url = "https://files.pythonhosted.org/packages/a5/25/6a58d1e47ebfd54547959cf830d02fc7d2acd72cc6f885f89996929587d1/mirlib-1.29.0.21-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:5216c8bc036481bea4f95e27a480caa342ffe013a55a88509a48827be782e92c", size = 1843730, upload-time = "2026-06-25T14:35:33.573Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ba/f25ca34d3a5e00d42a8acd5d55b1cf4eecd9b688b5c9d2bbe21221b9cae2/mirlib-1.29.0.21-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:3f2987331e257db369008fbe9ff30fa14c2854f0f9e3e4d1604bfa1714f26959", size = 1939341, upload-time = "2026-06-25T14:59:28.293Z" }, + { url = "https://files.pythonhosted.org/packages/5e/cd/ed761579aac7cc6a095c61f4e8df2372df5848bb6643e8671bb60e743ce1/mirlib-1.29.0.21-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:928d34a9cdb9dbce89ddbbf7883242d3f5bb2d49a1f3fedf2bd3b8b8a5cf6c49", size = 2451011, upload-time = "2026-06-25T14:34:58.577Z" }, + { url = "https://files.pythonhosted.org/packages/05/1f/ae00bc701ae6be4cb26ec6913b0b1c574c4c760d8db2240aa15dff2dca16/mirlib-1.29.0.21-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:09b38bbc4c3190cd110338ab2223f9247e0284f7d558f6eb0d588bdfa0c1ed87", size = 2425278, upload-time = "2026-06-25T14:35:33.8Z" }, ] [[package]] @@ -1682,6 +1682,7 @@ dependencies = [ { name = "earthkit-time" }, { name = "earthkit-utils" }, { name = "eccodes" }, + { name = "eccodeslib" }, { name = "fdb5lib" }, { name = "filelock" }, { name = "mir-python" }, @@ -1720,6 +1721,7 @@ requires-dist = [ { name = "earthkit-time", specifier = ">=0.1.3" }, { name = "earthkit-utils", specifier = ">=0.2.1" }, { name = "eccodes", specifier = ">=1.6.1" }, + { name = "eccodeslib", specifier = "<2.48" }, { name = "fdb5lib" }, { name = "filelock", specifier = ">=3.12.0,<3.32" }, { name = "mir-python", specifier = ">=0.2.0" }, From 73650f90184e88512dcbd57f166f634601f60006 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 15:42:04 +0000 Subject: [PATCH 76/95] Change failing tests --- pproc/tests/templates/v2/t850.yaml | 32 ----------- pproc/tests/templates/v3/thermo.yaml | 82 ++++++++++++++-------------- pproc/tests/test_products.py | 6 +- 3 files changed, 44 insertions(+), 76 deletions(-) diff --git a/pproc/tests/templates/v2/t850.yaml b/pproc/tests/templates/v2/t850.yaml index 658cbc25..75525f5f 100644 --- a/pproc/tests/templates/v2/t850.yaml +++ b/pproc/tests/templates/v2/t850.yaml @@ -53,38 +53,6 @@ parameters: value: 2 metadata: bitsPerValue: 24 - - coords: [[0], [12]] - operation: maximum - std_anomaly: true - thresholds: - - metadata: {"paramId": 133093} - comparison: '>' - value: 1 - metadata: - localDefinitionNumber: 30 - bitsPerValue: 24 - edition: 2 - typeOfGeneratingProcess: 5 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: grid_ccsds - - coords: [[0], [12]] - operation: minimum - std_anomaly: true - thresholds: - - metadata: {"paramId": 133096} - comparison: < - value: -1 - metadata: - localDefinitionNumber: 30 - bitsPerValue: 24 - edition: 2 - typeOfGeneratingProcess: 5 - paramId: 0 - timeIncrement: 12 - typeOfStatisticalProcessing: 10 - packingType: grid_ccsds inputs: fc: request: diff --git a/pproc/tests/templates/v3/thermo.yaml b/pproc/tests/templates/v3/thermo.yaml index 5413bccd..0200d582 100644 --- a/pproc/tests/templates/v3/thermo.yaml +++ b/pproc/tests/templates/v3/thermo.yaml @@ -57,7 +57,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: - 0 @@ -71,17 +71,17 @@ products: - '175' - '176' - '177' - date: '20260720' + date: '20240605' - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' levtype: sfc param: '167' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -94,7 +94,7 @@ products: levtype: sfc domain: g param: 261002 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 @@ -173,7 +173,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: - 0 @@ -187,11 +187,11 @@ products: - '177' - '228021' - '47' - date: '20260720' + date: '20240605' - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' @@ -201,7 +201,7 @@ products: - '166' - '167' - '168' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -214,7 +214,7 @@ products: levtype: sfc domain: g param: 261001 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 @@ -244,7 +244,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' @@ -252,7 +252,7 @@ products: param: - '167' - '168' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -265,7 +265,7 @@ products: levtype: sfc domain: g param: 260004 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 @@ -303,7 +303,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' @@ -312,7 +312,7 @@ products: - '165' - '166' - '167' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -325,7 +325,7 @@ products: levtype: sfc domain: g param: 260005 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 @@ -376,7 +376,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' @@ -386,7 +386,7 @@ products: - '166' - '167' - '168' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -399,7 +399,7 @@ products: levtype: sfc domain: g param: 260255 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 @@ -429,7 +429,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' @@ -437,7 +437,7 @@ products: param: - '167' - '168' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -450,7 +450,7 @@ products: levtype: sfc domain: g param: 260242 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 @@ -480,7 +480,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' @@ -488,7 +488,7 @@ products: param: - '167' - '168' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -501,7 +501,7 @@ products: levtype: sfc domain: g param: 261016 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 @@ -552,7 +552,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' @@ -562,7 +562,7 @@ products: - '166' - '167' - '168' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -575,7 +575,7 @@ products: levtype: sfc domain: g param: 261018 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 @@ -653,7 +653,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: - 0 @@ -667,11 +667,11 @@ products: - '177' - '228021' - '47' - date: '20260720' + date: '20240605' - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' @@ -681,7 +681,7 @@ products: - '166' - '167' - '168' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -694,7 +694,7 @@ products: levtype: sfc domain: g param: 261015 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 @@ -773,7 +773,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: - 0 @@ -787,11 +787,11 @@ products: - '177' - '228021' - '47' - date: '20260720' + date: '20240605' - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' @@ -801,7 +801,7 @@ products: - '166' - '167' - '168' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -814,7 +814,7 @@ products: levtype: sfc domain: g param: 261014 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 @@ -856,7 +856,7 @@ products: - class: od stream: oper type: fc - time: '1200' + time: '0000' domain: g step: 1 expver: '0001' @@ -864,7 +864,7 @@ products: param: - '167' - '168' - date: '20260720' + date: '20240605' expand_exclude: [] dtype: float32 output: @@ -877,7 +877,7 @@ products: levtype: sfc domain: g param: 261023 - date: '20260720' + date: '20240605' time: 12 expver: '0001' step: 1 diff --git a/pproc/tests/test_products.py b/pproc/tests/test_products.py index d66975e1..d6a1bd79 100644 --- a/pproc/tests/test_products.py +++ b/pproc/tests/test_products.py @@ -46,7 +46,7 @@ "param": [131022, 133093], "step": [0, 12], }, - 4, + 2, ], [ "ensms", @@ -214,8 +214,8 @@ def test_products_v2(tmpdir, monkeypatch, fdb, product, main, custom_args, req, "type": "fc", "param": [261002, 261001, 260004, 260005, 260255, 260242, 261016, 261018, 261015, 261014, 261023], "step": [1], - "date": 20260720, - "time": 12, + "date": 20240605, + "time": 00, }, 11, ], From 1a461aa4af2a59477b198f1b4d7d83e935c375e7 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 16:47:23 +0100 Subject: [PATCH 77/95] Disable pre-commit check for pproc --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 78d548c4..7612f99b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,7 +65,7 @@ jobs: cd pproc export UV_FROZEN=1 uv sync --python "${{ matrix.python_version }}" --all-packages - uv run prek --directory . --config ../.pre-commit-config.yaml + # uv run prek --directory . --config ../.pre-commit-config.yaml if [ -d "tests" ]; then uv run --prerelease allow -m tests/ -v fi From ce86309515bffedef96eadbcdd408f9b5979a545 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 16:58:29 +0100 Subject: [PATCH 78/95] Remove version check in ppcore and ppruntime cd workflows --- .github/workflows/cd-ppcore.yml | 13 ------------- .github/workflows/cd-ppruntime.yml | 13 ------------- 2 files changed, 26 deletions(-) diff --git a/.github/workflows/cd-ppcore.yml b/.github/workflows/cd-ppcore.yml index 010f6e53..b57028d7 100644 --- a/.github/workflows/cd-ppcore.yml +++ b/.github/workflows/cd-ppcore.yml @@ -63,19 +63,6 @@ jobs: python -m pip install --upgrade pip pip install setuptools wheel twine build - - name: Check version - run: | - if [ -f "setup.py" ]; then - if [ -f "pyproject.toml" ] ; then - # we need to install eg setuptools_scm to correctly determine version later - extra_deps=$(python -c 'import tomllib; print(" ".join(f"{e}" for e in tomllib.load(open("pyproject.toml", "rb"))["build-system"]["requires"]))') - pip install --upgrade $extra_deps - fi - version=$(python setup.py --version) - release=${{ github.ref_name }} - if [ "${{ inputs.testpypi }}" != "true" ] ; then test "$release" == "$version"; fi - fi - - run: | cd pproc-core python -m pip install --upgrade build twine diff --git a/.github/workflows/cd-ppruntime.yml b/.github/workflows/cd-ppruntime.yml index 1153402e..4331c119 100644 --- a/.github/workflows/cd-ppruntime.yml +++ b/.github/workflows/cd-ppruntime.yml @@ -64,19 +64,6 @@ jobs: python -m pip install --upgrade pip pip install setuptools wheel twine build - - name: Check version - run: | - if [ -f "setup.py" ]; then - if [ -f "pyproject.toml" ] ; then - # we need to install eg setuptools_scm to correctly determine version later - extra_deps=$(python -c 'import tomllib; print(" ".join(f"{e}" for e in tomllib.load(open("pyproject.toml", "rb"))["build-system"]["requires"]))') - pip install --upgrade $extra_deps - fi - version=$(python setup.py --version) - release=${{ github.ref_name }} - if [ "${{ inputs.testpypi }}" != "true" ] ; then test "$release" == "$version"; fi - fi - - run: | cd pproc-runtime python -m pip install --upgrade build twine From 8688e2f78497b28c33b7828fa78e455ba6393d6a Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 17:24:26 +0100 Subject: [PATCH 79/95] Improve workflows --- .github/workflows/cd-ppcore.yml | 18 ++++++------------ .github/workflows/cd-pproc.yml | 2 +- .github/workflows/cd-ppruntime.yml | 15 ++++----------- .github/workflows/ci.yml | 6 +++--- .github/workflows/sync.yml | 10 +++++----- 5 files changed, 19 insertions(+), 32 deletions(-) diff --git a/.github/workflows/cd-ppcore.yml b/.github/workflows/cd-ppcore.yml index b57028d7..bdb921ad 100644 --- a/.github/workflows/cd-ppcore.yml +++ b/.github/workflows/cd-ppcore.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: inputs: tag: - description: 'Release tag X.Y.Z' + description: 'Release tag ppcore-X.Y.Z' required: true type: string environment: @@ -22,11 +22,12 @@ jobs: strategy: fail-fast: true matrix: - python_version: ["3.11", "3.12", "3.13"] + python_version: ["3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 with: ref: ${{ inputs.tag }} + - uses: astral-sh/setup-uv@v7 - name: Run checks and tests run: | @@ -40,23 +41,16 @@ jobs: publish: needs: test runs-on: ubuntu-latest - strategy: - fail-fast: true - matrix: - python_version: ["3.11", "3.12", "3.13"] - permissions: - id-token: write - contents: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: ref: ${{ inputs.tag }} - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: ${{ matrix.python_version }} + python-version: "3.x" - name: Install dependencies run: | diff --git a/.github/workflows/cd-pproc.yml b/.github/workflows/cd-pproc.yml index afb957e0..3b316bab 100644 --- a/.github/workflows/cd-pproc.yml +++ b/.github/workflows/cd-pproc.yml @@ -9,6 +9,6 @@ jobs: pypi: uses: ecmwf/reusable-workflows/.github/workflows/cd-pypi.yml@v2 - with: + with: working-directory: pproc secrets: inherit diff --git a/.github/workflows/cd-ppruntime.yml b/.github/workflows/cd-ppruntime.yml index 4331c119..2b08ad26 100644 --- a/.github/workflows/cd-ppruntime.yml +++ b/.github/workflows/cd-ppruntime.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: inputs: tag: - description: 'Release tag X.Y.Z' + description: 'Release tag ppruntime-X.Y.Z' required: true type: string environment: @@ -22,7 +22,7 @@ jobs: strategy: fail-fast: true matrix: - python_version: ["3.11", "3.12", "3.13"] + python_version: ["3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 with: @@ -41,13 +41,6 @@ jobs: publish: needs: test runs-on: ubuntu-latest - strategy: - fail-fast: true - matrix: - python_version: ["3.11", "3.12", "3.13"] - permissions: - id-token: write - contents: read steps: - uses: actions/checkout@v4 @@ -55,9 +48,9 @@ jobs: ref: ${{ inputs.tag }} - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: ${{ matrix.python_version }} + python-version: "3.x" - name: Install dependencies run: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7612f99b..0f1c46f3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: strategy: fail-fast: true matrix: - python-version: ['3.11', '3.12', '3.13'] + python-version: ['3.10', '3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v7 @@ -37,7 +37,7 @@ jobs: strategy: fail-fast: true matrix: - python-version: ['3.11', '3.12', '3.13'] + python-version: ['3.10', '3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v7 @@ -56,7 +56,7 @@ jobs: strategy: fail-fast: true matrix: - python-version: ['3.11', '3.12', '3.13'] + python-version: ['3.10', '3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v7 diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml index fc06d5d9..3597c7bc 100644 --- a/.github/workflows/sync.yml +++ b/.github/workflows/sync.yml @@ -1,20 +1,20 @@ name: sync - + # Controls when the workflow will run on: - + # Trigger the workflow on all pushes push: branches: - '**' tags: - '**' - + # Trigger the workflow when a branch or tag is deleted delete: ~ - + jobs: - + # Calls a reusable CI workflow to sync the current with a remote repository. # It will correctly handle addition of any new and removal of existing Git objects. sync: From 676ab3dcf4b7bc372c33df7abe963ca6951dafbb Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 17:27:34 +0100 Subject: [PATCH 80/95] Fix licenses --- LICENSE | 2 +- NOTICE | 2 +- pproc-core/LICENSE | 2 +- pproc-runtime/LICENSE | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/LICENSE b/LICENSE index 19b15663..af25a625 100644 --- a/LICENSE +++ b/LICENSE @@ -76,4 +76,4 @@ limitations under the License. In applying this licence, ECMWF does not waive the privileges and immunities granted to it by virtue of its status as an intergovernmental organisation -nor does it submit to any jurisdiction. \ No newline at end of file +nor does it submit to any jurisdiction. diff --git a/NOTICE b/NOTICE index e687ebf2..0652e5af 100644 --- a/NOTICE +++ b/NOTICE @@ -5,4 +5,4 @@ This product includes software developed at ECMWF (https://www.ecmwf.int). In applying this licence, ECMWF does not waive the privileges and immunities granted to it by virtue of its status as an intergovernmental organisation -nor does it submit to any jurisdiction. \ No newline at end of file +nor does it submit to any jurisdiction. diff --git a/pproc-core/LICENSE b/pproc-core/LICENSE index 19b15663..af25a625 100644 --- a/pproc-core/LICENSE +++ b/pproc-core/LICENSE @@ -76,4 +76,4 @@ limitations under the License. In applying this licence, ECMWF does not waive the privileges and immunities granted to it by virtue of its status as an intergovernmental organisation -nor does it submit to any jurisdiction. \ No newline at end of file +nor does it submit to any jurisdiction. diff --git a/pproc-runtime/LICENSE b/pproc-runtime/LICENSE index 19b15663..af25a625 100644 --- a/pproc-runtime/LICENSE +++ b/pproc-runtime/LICENSE @@ -76,4 +76,4 @@ limitations under the License. In applying this licence, ECMWF does not waive the privileges and immunities granted to it by virtue of its status as an intergovernmental organisation -nor does it submit to any jurisdiction. \ No newline at end of file +nor does it submit to any jurisdiction. From bfb1082f1664a3bd4e5f6c80c9732f8b7f9d2378 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 17:48:37 +0100 Subject: [PATCH 81/95] Remove 3.10 from ppcore and pproc ci/cd and use pypi ppruntime --- .github/workflows/cd-ppcore.yml | 2 +- .github/workflows/ci.yml | 4 ++-- pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cd-ppcore.yml b/.github/workflows/cd-ppcore.yml index bdb921ad..ecd55f1a 100644 --- a/.github/workflows/cd-ppcore.yml +++ b/.github/workflows/cd-ppcore.yml @@ -22,7 +22,7 @@ jobs: strategy: fail-fast: true matrix: - python_version: ["3.10", "3.11", "3.12", "3.13"] + python_version: ["3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0f1c46f3..ff637849 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: strategy: fail-fast: true matrix: - python-version: ['3.10', '3.11', '3.12', '3.13'] + python-version: ['3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v7 @@ -56,7 +56,7 @@ jobs: strategy: fail-fast: true matrix: - python-version: ['3.10', '3.11', '3.12', '3.13'] + python-version: ['3.11', '3.12', '3.13'] steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v7 diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index fbf588b6..f7f14531 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -32,10 +32,10 @@ from earthkit.workflows.plugins.pproc.metadata.accumulation import accumulation_metadata from earthkit.workflows.plugins.pproc.metadata.threshold import threshold_metadata -# TODO: change git url to ppruntime when published in PyPI + ENVIRONMENT = { "ppruntime": [ - "pproc-runtime @ git+https://git@github.com/ecmwf/pproc.git@feature/mono-repo#subdirectory=pproc-runtime" + "pproc-runtime", ], } From 2437a002eab03a944bdf624c4485aaa2593baa28 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 18:05:57 +0100 Subject: [PATCH 82/95] CI fixes --- .github/workflows/ci.yml | 2 +- pproc-runtime/tests/conftest.py | 3 +++ pproc-runtime/tests/test_io.py | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff637849..9bdc218a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,5 +67,5 @@ jobs: uv sync --python "${{ matrix.python_version }}" --all-packages # uv run prek --directory . --config ../.pre-commit-config.yaml if [ -d "tests" ]; then - uv run --prerelease allow -m tests/ -v + uv run -m pytest tests/ -v fi diff --git a/pproc-runtime/tests/conftest.py b/pproc-runtime/tests/conftest.py index 1350fab3..f05cc527 100644 --- a/pproc-runtime/tests/conftest.py +++ b/pproc-runtime/tests/conftest.py @@ -41,6 +41,9 @@ def download_test_data( return local_files +download_test_data(["test_2t_12.grib"], os.path.join(NEXUS, "pproc-runtime")) + + def populate_fdb( fdb, test_files: List[str], diff --git a/pproc-runtime/tests/test_io.py b/pproc-runtime/tests/test_io.py index 050f861b..0b97dbb1 100644 --- a/pproc-runtime/tests/test_io.py +++ b/pproc-runtime/tests/test_io.py @@ -6,6 +6,7 @@ from datetime import datetime, timedelta import pytest +from earthkit.data.testing import NO_MARS from ppruntime.io import retrieve @@ -26,6 +27,7 @@ } +@pytest.mark.skipif(NO_MARS, reason="No access to MARS") @pytest.mark.parametrize( "overrides", [ From b87474fc68674a5f07ace4a11b723cf4d87b4923 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Wed, 29 Jul 2026 19:06:04 +0100 Subject: [PATCH 83/95] Ensure test files are downloaded --- pproc-runtime/tests/conftest.py | 57 +++++++-------- pproc-runtime/tests/test_accumulation.py | 2 +- pproc-runtime/tests/test_io.py | 2 +- pproc-runtime/tests/test_thermal_indices.py | 2 +- pproc/tests/common/test_io.py | 6 +- pproc/tests/conftest.py | 80 +++++++++++---------- 6 files changed, 73 insertions(+), 76 deletions(-) diff --git a/pproc-runtime/tests/conftest.py b/pproc-runtime/tests/conftest.py index f05cc527..585176c3 100644 --- a/pproc-runtime/tests/conftest.py +++ b/pproc-runtime/tests/conftest.py @@ -41,26 +41,24 @@ def download_test_data( return local_files -download_test_data(["test_2t_12.grib"], os.path.join(NEXUS, "pproc-runtime")) - - -def populate_fdb( - fdb, - test_files: List[str], - dir_url: str = NEXUS, - local_dir: str = DATA_DIR, -): - data_files = download_test_data(test_files, dir_url, local_dir) - for filepath in data_files: - if os.path.isfile(filepath): - reader = eccodes.FileReader(filepath) - for msg in reader: - fdb.archive(msg.get_buffer()) - fdb.flush() +@pytest.fixture(scope="session") +def download_all_test_data(): + download_test_data( + [ + "test_2t_12.grib", + ], + os.path.join(NEXUS, "pproc-runtime"), + ) + download_test_data( + [ + "wind.grib", + ], + os.path.join(NEXUS, "test-data"), + ) @pytest.fixture(scope="session") -def fdb() -> Iterator[pyfdb.FDB]: +def fdb(download_all_test_data) -> Iterator[pyfdb.FDB]: tmpdir = tempfile.mkdtemp() print("Using temporary directory", tmpdir) os.makedirs(f"{tmpdir}/etc/fdb") @@ -81,20 +79,15 @@ def fdb() -> Iterator[pyfdb.FDB]: os.environ["FDB_HOME"] = str(tmpdir) os.environ["FDB_HANDLE_LUSTRE_STRIPE"] = "0" temp_fdb = pyfdb.FDB() - populate_fdb( - temp_fdb, - [ - "test_2t_12.grib", - ], - os.path.join(NEXUS, "pproc-runtime"), - ) - populate_fdb( - temp_fdb, - [ - "wind.grib", - ], - os.path.join(NEXUS, "test-data"), - ) - + for filename in [ + "test_2t_12.grib", + "wind.grib", + ]: + filepath = os.path.join(DATA_DIR, filename) + if os.path.isfile(filepath): + reader = eccodes.FileReader(filepath) + for msg in reader: + temp_fdb.archive(msg.get_buffer()) + temp_fdb.flush() yield temp_fdb shutil.rmtree(tmpdir) diff --git a/pproc-runtime/tests/test_accumulation.py b/pproc-runtime/tests/test_accumulation.py index 485e5555..44097f28 100644 --- a/pproc-runtime/tests/test_accumulation.py +++ b/pproc-runtime/tests/test_accumulation.py @@ -12,7 +12,7 @@ DATA_DIR = os.path.join(TEST_DIR, "data") -def test_difference_rate(): +def test_difference_rate(download_all_test_data): fl: earthkit.data.FieldList = earthkit.data.from_source( "file", os.path.join(DATA_DIR, "test_2t_12.grib") ) # type: ignore diff --git a/pproc-runtime/tests/test_io.py b/pproc-runtime/tests/test_io.py index 0b97dbb1..013fb97d 100644 --- a/pproc-runtime/tests/test_io.py +++ b/pproc-runtime/tests/test_io.py @@ -99,7 +99,7 @@ def test_fdb_retrieve(fdb, stream, overrides): ], ids=["file", "file-pattern"], ) -def test_file_retrieve(source): +def test_file_retrieve(download_all_test_data, source): request = { "stream": "enfo", "type": "cf", diff --git a/pproc-runtime/tests/test_thermal_indices.py b/pproc-runtime/tests/test_thermal_indices.py index 9687bdcb..dd1dc4db 100644 --- a/pproc-runtime/tests/test_thermal_indices.py +++ b/pproc-runtime/tests/test_thermal_indices.py @@ -33,7 +33,7 @@ [thermal_indices.calc_cossza, 214001], ], ) -def test_thermal_indices(monkeypatch, function, paramid): +def test_thermal_indices(monkeypatch, download_all_test_data, function, paramid): inputs: earthkit.data.FieldList = earthkit.data.from_source( "file", os.path.join(DATA_DIR, "test_2t_12.grib") ) # type: ignore diff --git a/pproc/tests/common/test_io.py b/pproc/tests/common/test_io.py index bcc2bf94..9a5f7f97 100644 --- a/pproc/tests/common/test_io.py +++ b/pproc/tests/common/test_io.py @@ -71,7 +71,7 @@ def test_fdb_missing_values(fdb): assert not np.any(data == 9999) -def test_fdb_target(): +def test_fdb_target(download_all_test_data): target = io.target_from_location("fdb:") for msg in eccodes.FileReader(f"{DATA_DIR}/wind.grib"): msg.set("type", "em") @@ -83,7 +83,7 @@ def test_fdb_target(): assert len(data) == 6 -def test_file_target(tmpdir): +def test_file_target(tmpdir, download_all_test_data): target = io.target_from_location(f"file:{tmpdir}/test.grib") messages = [ msg @@ -97,7 +97,7 @@ def test_file_target(tmpdir): assert len(data) == 5 -def test_fileset_target(tmpdir): +def test_fileset_target(tmpdir, download_all_test_data): target = io.target_from_location(f"fileset:{tmpdir}" + "/test_{step}.grib") for msg in eccodes.FileReader(f"{DATA_DIR}/2t_ens.grib"): target.write(msg) diff --git a/pproc/tests/conftest.py b/pproc/tests/conftest.py index 43c1046c..8b401adb 100644 --- a/pproc/tests/conftest.py +++ b/pproc/tests/conftest.py @@ -48,43 +48,8 @@ def download_test_data( return local_files -def populate_fdb( - fdb, - test_files: List[str], - dir_url: str = NEXUS, - local_dir: str = DATA_DIR, -): - data_files = download_test_data(test_files, dir_url, local_dir) - for filepath in data_files: - if os.path.isfile(filepath): - reader = eccodes.FileReader(filepath) - for msg in reader: - fdb.archive(msg.get_buffer()) - fdb.flush() - - @pytest.fixture(scope="session") -def fdb() -> pyfdb.FDB: - tmpdir = tempfile.mkdtemp() - print("Using temporary directory", tmpdir) - os.makedirs(f"{tmpdir}/etc/fdb") - os.mkdir(f"{tmpdir}/fdb") - shutil.copyfile(f"{TEST_DIR}/templates/fdb/schema", f"{tmpdir}/etc/fdb/schema") - with open(f"{tmpdir}/etc/fdb/config.yaml", "w") as f: - f.write( - f""" ---- -type: local -engine: toc -schema: "{tmpdir}/etc/fdb/schema" -spaces: -- roots: - - path: {tmpdir}/fdb -""" - ) - os.environ["FDB_HOME"] = str(tmpdir) - os.environ["FDB_HANDLE_LUSTRE_STRIPE"] = "0" - temp_fdb = pyfdb.FDB() +def download_all_test_data(): download_test_data( [ "era_clcen_eof_mjjas.gts", @@ -97,8 +62,7 @@ def fdb() -> pyfdb.FDB: f"{NEXUS}/clustclim", f"{DATA_DIR}/clustclim", ) - populate_fdb( - temp_fdb, + download_test_data( [ "2t_ens.grib", "2t_clim.grib", @@ -108,8 +72,48 @@ def fdb() -> pyfdb.FDB: "has_missing.grib", "thermo.grib", ], + NEXUS, + DATA_DIR, ) + +@pytest.fixture(scope="session") +def fdb(download_all_test_data) -> pyfdb.FDB: + tmpdir = tempfile.mkdtemp() + print("Using temporary directory", tmpdir) + os.makedirs(f"{tmpdir}/etc/fdb") + os.mkdir(f"{tmpdir}/fdb") + shutil.copyfile(f"{TEST_DIR}/templates/fdb/schema", f"{tmpdir}/etc/fdb/schema") + with open(f"{tmpdir}/etc/fdb/config.yaml", "w") as f: + f.write( + f""" +--- +type: local +engine: toc +schema: "{tmpdir}/etc/fdb/schema" +spaces: +- roots: + - path: {tmpdir}/fdb +""" + ) + os.environ["FDB_HOME"] = str(tmpdir) + os.environ["FDB_HANDLE_LUSTRE_STRIPE"] = "0" + temp_fdb = pyfdb.FDB() + for filename in [ + "2t_ens.grib", + "2t_clim.grib", + "wind.grib", + "t850.grib", + "cluster.grib", + "has_missing.grib", + "thermo.grib", + ]: + filepath = os.path.join(DATA_DIR, filename) + if os.path.isfile(filepath): + reader = eccodes.FileReader(filepath) + for msg in reader: + temp_fdb.archive(msg.get_buffer()) + temp_fdb.flush() yield temp_fdb shutil.rmtree(tmpdir) From dbc6c691ec4878e8096756061feea4945b1160d1 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Thu, 30 Jul 2026 09:35:06 +0100 Subject: [PATCH 84/95] Make visualisation optional in pproc-core --- pproc-core/pyproject.toml | 6 +++++- pproc-core/src/ppcore/config.py | 4 ++-- pproc-core/uv.lock | 13 ++++++++++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index 11f8aac6..dd2b8ebc 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -33,13 +33,17 @@ dependencies = [ "code-meters", "conflator>=0.1.8", "earthkit-time", - "earthkit-workflows[vizualize]>=0.15.4", + "earthkit-workflows>=0.15.4", "numpy", "pandas", "pydantic", "qubed>=0.3,<0.4.4", ] +optional-dependencies.vizualize = [ + "earthkit-workflows[vizualize]>=0.15.4", +] + scripts.ppcore-config = "ppcore.config:main" scripts.pproc-product = "ppcore.product:main" diff --git a/pproc-core/src/ppcore/config.py b/pproc-core/src/ppcore/config.py index 33e07f6b..122055ec 100644 --- a/pproc-core/src/ppcore/config.py +++ b/pproc-core/src/ppcore/config.py @@ -12,8 +12,6 @@ import json from pydantic import TypeAdapter -from earthkit.workflows.visualise import visualise - from ppcore.configs import from_outputs as config_from_outputs from ppcore.configs import from_inputs as config_from_inputs from ppcore.configs.entrypoint.base import EntrypointConfig @@ -171,6 +169,8 @@ def plot(args): entrypoint_config.input_overrides, entrypoint_config.output_overrides, ) + from earthkit.workflows.visualise import visualise + visualise(graph, args.file) diff --git a/pproc-core/uv.lock b/pproc-core/uv.lock index 24a820ef..08984d45 100644 --- a/pproc-core/uv.lock +++ b/pproc-core/uv.lock @@ -1263,13 +1263,18 @@ dependencies = [ { name = "code-meters" }, { name = "conflator" }, { name = "earthkit-time" }, - { name = "earthkit-workflows", extra = ["vizualize"] }, + { name = "earthkit-workflows" }, { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, { name = "qubed" }, ] +[package.optional-dependencies] +vizualize = [ + { name = "earthkit-workflows", extra = ["vizualize"] }, +] + [package.dev-dependencies] dev = [ { name = "prek" }, @@ -1282,12 +1287,14 @@ requires-dist = [ { name = "code-meters" }, { name = "conflator", specifier = ">=0.1.8" }, { name = "earthkit-time" }, - { name = "earthkit-workflows", extras = ["vizualize"], specifier = ">=0.15.4" }, + { name = "earthkit-workflows", specifier = ">=0.15.4" }, + { name = "earthkit-workflows", extras = ["vizualize"], marker = "extra == 'vizualize'", specifier = ">=0.15.4" }, { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, - { name = "qubed", specifier = ">=0.3.0,<0.4.4" }, + { name = "qubed", specifier = ">=0.3,<0.4.4" }, ] +provides-extras = ["vizualize"] [package.metadata.requires-dev] dev = [ From f8dd9d213d3512f448bfa4393a1fe3695e06cc02 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Thu, 30 Jul 2026 14:51:54 +0100 Subject: [PATCH 85/95] Introduce custom errors for schema components --- pproc-core/src/ppcore/schema/base.py | 41 +++++++++++++------ pproc-core/src/ppcore/schema/config.py | 9 ++-- pproc-core/src/ppcore/schema/exceptions.py | 18 ++++++++ pproc-core/src/ppcore/schema/forecast.py | 13 +++--- pproc-core/src/ppcore/schema/input.py | 25 +++++++---- pproc-core/src/ppcore/schema/step.py | 8 ++-- .../tests/ppcore/schema/test_step_schema.py | 9 ++++ pproc-core/tests/schema.yaml | 3 ++ 8 files changed, 91 insertions(+), 35 deletions(-) create mode 100644 pproc-core/src/ppcore/schema/exceptions.py diff --git a/pproc-core/src/ppcore/schema/base.py b/pproc-core/src/ppcore/schema/base.py index ad010589..c339b3d2 100644 --- a/pproc-core/src/ppcore/schema/base.py +++ b/pproc-core/src/ppcore/schema/base.py @@ -16,6 +16,7 @@ from typing_extensions import Self from ppcore.utils.dicts import deep_update +from ppcore.schema.exceptions import PProcSchemaError logger = logging.getLogger(__name__) @@ -35,6 +36,7 @@ def dict_update(base: dict, update: dict) -> dict: class BaseSchema: + exception = PProcSchemaError custom_update: dict[str, UpdateFunc] = {} custom_filter: dict[str, FilterFunc] = {} custom_match: dict[str, MatchFunc] = {} @@ -108,24 +110,38 @@ def is_subschema(cls, key: str) -> bool: return "filter" in key @classmethod - def subschema(cls, key: str, schema: dict, request: dict) -> dict: + def subschema( + cls, key: str, schema: dict, request: dict, traversed: list[str] + ) -> dict: _, mars_key = key.split(":") filter_value = cls.custom_filter.get(mars_key, DEFAULT_FILTER)( request, mars_key ) - ret = schema.get(filter_value, schema.get("*", None)) - if ret is None: - raise ValueError( - f"Filter value {filter_value} not found in schema {schema}, and no default provided" - ) - assert isinstance(ret, dict), "Subschema must be a dictionary." + if filter_value in schema: + ret = schema[filter_value] + traversed.append(f"{mars_key}={filter_value}") + else: + ret = schema.get("*", None) + if ret is None: + raise cls.exception( + f"No match for {mars_key}={filter_value} along path {','.join(traversed)}, and no default provided" + ) + traversed.append(f"{mars_key}=*") + + if not isinstance(ret, dict): + raise cls.exception("Subschema must be a dictionary.") return ret @classmethod - def _traverse(cls, sub_schema: dict, request: dict, config: dict) -> dict: + def _traverse( + cls, sub_schema: dict, request: dict, config: dict, traversed: list[str] + ) -> dict: for key, value in sub_schema.items(): if cls.is_subschema(key): - cls._traverse(cls.subschema(key, value, request), request, config) + path = traversed.copy() + cls._traverse( + cls.subschema(key, value, request, path), request, config, path + ) else: # TODO: Remove copies? cls.custom_update.get(key, DEFAULT_UPDATE)( @@ -135,10 +151,11 @@ def _traverse(cls, sub_schema: dict, request: dict, config: dict) -> dict: def traverse(self, request: dict, config: Optional[dict] = None) -> dict: if len(set.intersection(set(request.keys()), self.filters)) < len(self.filters): - raise ValueError( + raise self.exception( f"Request {request} does not contain all required filters {self.filters}" ) - return self._traverse(self.schema, request, config or {}) + traversed = [] + return self._traverse(self.schema, request, config or {}, traversed) @classmethod def _find_matching( @@ -291,7 +308,7 @@ def reconstruct( configs = self._get_cached_matching(cache_key) if method not in ["dfs", "bfs"]: - raise ValueError(f"Invalid method '{method}'. Must be 'dfs' or 'bfs'.") + raise self.exception(f"Invalid method '{method}'. Must be 'dfs' or 'bfs'.") method_func = ( self._find_matching_dfs if method == "dfs" else self._find_matching ) diff --git a/pproc-core/src/ppcore/schema/config.py b/pproc-core/src/ppcore/schema/config.py index ff1d0dfc..69c3fc54 100644 --- a/pproc-core/src/ppcore/schema/config.py +++ b/pproc-core/src/ppcore/schema/config.py @@ -5,17 +5,16 @@ import numpy as np from earthkit.workflows.plugins.pproc.utils.metadata import fill_template_value -from ppcore.schema.base import BaseSchema -from ppcore.schema.base import dict_update -from ppcore.schema.filters import _selection -from ppcore.schema.filters import _steplength -from ppcore.schema.filters import _steptype +from ppcore.schema.base import BaseSchema, dict_update +from ppcore.schema.filters import _selection, _steplength, _steptype +from ppcore.schema.exceptions import PProcConfigSchemaError from ppcore.utils.dicts import dict_apply from ppcore.utils.helpers import to_list from ppcore.utils.requests import validate_request class ConfigSchema(BaseSchema): + exception = PProcConfigSchemaError custom_filter = { "steplength": _steplength, "selection": _selection, diff --git a/pproc-core/src/ppcore/schema/exceptions.py b/pproc-core/src/ppcore/schema/exceptions.py new file mode 100644 index 00000000..d189b9fc --- /dev/null +++ b/pproc-core/src/ppcore/schema/exceptions.py @@ -0,0 +1,18 @@ +class PProcSchemaError(Exception): + pass + + +class PProcConfigSchemaError(PProcSchemaError): + pass + + +class PProcInputSchemaError(PProcSchemaError): + pass + + +class PProcStepSchemaError(PProcSchemaError): + pass + + +class PProcDatasetError(Exception): + pass diff --git a/pproc-core/src/ppcore/schema/forecast.py b/pproc-core/src/ppcore/schema/forecast.py index b4a39fd3..abff402a 100644 --- a/pproc-core/src/ppcore/schema/forecast.py +++ b/pproc-core/src/ppcore/schema/forecast.py @@ -12,6 +12,7 @@ from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.utils.requests import validate_request +from ppcore.schema.exceptions import PProcDatasetError logger = logging.getLogger(__name__) @@ -49,7 +50,7 @@ def populate_request(cls, data: list[dict]) -> list[dict]: @model_validator(mode="after") def validate_qube(self) -> Self: if self.wave is None and any(["param" not in cube for cube in self.datacubes]): - raise ValueError( + raise PProcDatasetError( "Forecast must contain a list of parameters or a wave configuration" ) return self @@ -86,7 +87,7 @@ def qube(self) -> Qube: @cached_property def wave_qube(self) -> Qube: if self.wave is None: - raise ValueError("No wave configuration defined for this forecast") + raise PProcDatasetError("No wave configuration defined for this forecast") wave_qube = Qube.empty() for condition in self.wave: wave_qube = wave_qube | self.qube.select(condition) @@ -95,12 +96,12 @@ def wave_qube(self) -> Qube: @cached_property def atmos_qube(self) -> Qube: if self.wave is None: - raise ValueError("No wave configuration defined for this forecast") + raise PProcDatasetError("No wave configuration defined for this forecast") return self.qube - self.wave_qube def stream(self, request: dict) -> str: if self.wave is None: - raise ValueError("No wave configuration defined for this forecast") + raise PProcDatasetError("No wave configuration defined for this forecast") for condition in self.wave: if all([request[key] == value for key, value in condition.items()]): return "wave" @@ -153,7 +154,7 @@ def steps(self, request: dict) -> list[int] | list[str]: if time is not None and len(qube.axes().get("time", [])) > 1: qube = self.qube.select({"time": time}) if qube.n_leaves == 0: - raise ValueError(f"No datacubes available for time {time}") + raise PProcDatasetError(f"No datacubes available for time {time}") steps = list(qube.axes()["step"]) return sorted( steps, key=lambda x: int(x.split("-")[0]) if isinstance(x, str) else x @@ -162,7 +163,7 @@ def steps(self, request: dict) -> list[int] | list[str]: def sample_datacube(self, qube: Optional[Qube] = None) -> dict: qube = qube or self.qube if qube.n_leaves == 0: - raise ValueError("No datacubes available for this forecast") + raise PProcDatasetError("No datacubes available for this forecast") return validate_request(list(qube.datacubes())[0]) diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index 471d7da8..6e1c055f 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -35,6 +35,7 @@ _steplength, _steptype, ) +from ppcore.schema.exceptions import PProcInputSchemaError, PProcDatasetError from ppcore.utils.requests import ( validate_request, update_request, @@ -196,9 +197,9 @@ def validate_derivers( cls, derive: dict[str, list[ClimatologyDeriver]] ) -> dict[str, list[ClimatologyDeriver]]: if "step" not in derive: - raise ValueError("Step driver required for climatology input") + raise PProcInputSchemaError("Step driver required for climatology input") if "date" not in derive: - raise ValueError("Date driver required for climatology input") + raise PProcInputSchemaError("Date driver required for climatology input") return derive def create_selection( @@ -244,7 +245,7 @@ def inputs( for inp in self.fc_inputs: inputs = list(inp.requests(output_request, forecast)) if len(inputs) == 0: - raise ValueError( + raise PProcDatasetError( f"No forecast inputs matched for {output_request}, requiring {inp}" ) if sample_input is None: @@ -278,13 +279,15 @@ def matched_outputs( return iter([]) if self.clim_inputs and len(fc_inputs) > 1: - raise ValueError("Climatology should be uniquely tied to forecast") + raise PProcDatasetError("Climatology should be uniquely tied to forecast") # Determine output steps that can be generated step_schema = step_schema or StepSchema({}) fc_steps = list(fc_inputs[0].axes()["step"]) if len(fc_steps) > 1: if any("-" in str(x) for x in fc_steps): - raise ValueError("Combining different step ranges is not supported") + raise NotImplementedError( + "Combining different step ranges is not supported" + ) fc_steps = sorted(list(map(int, fc_steps))) sample = forecast.sample_datacube(fc_inputs[0], pop=["step", "number"]) @@ -301,9 +304,10 @@ def matched_outputs( out = {**sample_datacube, **request, step_dim: step} # Determine climatology is present if self.clim_inputs: - assert ( - climatology is not None - ), "Climatology input defined but no climatology provided" + if climatology is None: + raise PProcDatasetError( + "Climatology input required but no climatology provided" + ) clim_input = [ union(paired_inputs) for paired_inputs in zip( @@ -316,7 +320,9 @@ def matched_outputs( if len(clim_input) == 0: continue if len(clim_input) > 1: - raise ValueError("Climatology should be uniquely tied to forecast") + raise PProcDatasetError( + "Climatology should be uniquely tied to forecast" + ) yield out @@ -327,6 +333,7 @@ def _update_inputs(config, update) -> dict: class InputSchema(BaseSchema): + exception = PProcInputSchemaError custom_update = { "fc_inputs": _update_inputs, "clim_inputs": _update_inputs, diff --git a/pproc-core/src/ppcore/schema/step.py b/pproc-core/src/ppcore/schema/step.py index 38740d98..a6e1450a 100644 --- a/pproc-core/src/ppcore/schema/step.py +++ b/pproc-core/src/ppcore/schema/step.py @@ -14,8 +14,8 @@ from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.schema.base import BaseSchema -from ppcore.utils.stepseq import steprange_to_fcmonth -from ppcore.utils.stepseq import stepseq_monthly +from ppcore.schema.exceptions import PProcStepSchemaError +from ppcore.utils.stepseq import steprange_to_fcmonth, stepseq_monthly class Instantaneous(PProcBaseModel): @@ -86,6 +86,8 @@ def generate_steps(self, steps: list[int]) -> list[int]: class StepSchema(BaseSchema): + exception = PProcStepSchemaError + @classmethod def _create_steps(cls, step_config: list[dict]) -> list[int]: steps = set( @@ -109,7 +111,7 @@ def out_steps( config = self.traverse(request, {}) step_configs = config.get("out_steps", None) if step_configs is None: - raise ValueError(f"No output steps defined {request}") + raise self.exception(f"No output steps defined {request}") if isinstance(step_configs, dict): step_configs = [step_configs] diff --git a/pproc-core/tests/ppcore/schema/test_step_schema.py b/pproc-core/tests/ppcore/schema/test_step_schema.py index 2beebbab..5752d564 100644 --- a/pproc-core/tests/ppcore/schema/test_step_schema.py +++ b/pproc-core/tests/ppcore/schema/test_step_schema.py @@ -5,6 +5,7 @@ import pytest from conftest import schema +from ppcore.schema.exceptions import PProcStepSchemaError from ppcore.schema.step import StepSchema from ppcore.schema.step import StepType from ppcore.schema.forecast import DatasetDefinitions, definition_to_dataset @@ -117,3 +118,11 @@ def test_out_steps(out, dataset, expected, in_steps): in_steps = definition_to_dataset(datasets.definition(dataset)).steps(out) _, out_steps = test_schema.out_steps(out, in_steps) assert out_steps == expected + + +def test_exception(): + step_schema = StepSchema(schema("windows")) + with pytest.raises(PProcStepSchemaError, match="type=ep,stream=enfo"): + step_schema.traverse( + {"type": "ep", "stream": "enfo", "param": "unknown", "time": "0000"} + ) diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index bdd74ff9..2552897e 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -3114,6 +3114,9 @@ inputs: select: param: "140232" pb: + fc_inputs: + select: + ensemble: True filter:param: "121/122/123": fc_inputs: From 536da12c5cd967cd3495049388df95e7148c1650 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Thu, 30 Jul 2026 16:56:23 +0100 Subject: [PATCH 86/95] Handle thermofeel from custom source --- pproc-core/src/ppcore/products/ensemble.py | 28 +++- .../tests/ppcore/products/test_products.py | 134 +++++++++++------- 2 files changed, 107 insertions(+), 55 deletions(-) diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index 19c8be27..78cee0ac 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -6,8 +6,10 @@ from typing import Optional, Iterator from dataclasses import dataclass import numpy as np +import logging from earthkit.workflows.fluent import merge +from earthkit.workflows.nodetree import nodetree_dimensions from earthkit.workflows.plugins.pproc.fluent import ( Action, from_source, @@ -20,6 +22,9 @@ from ppcore.products.base import Product +logger = logging.Logger(__name__) + + @dataclass class Ensemble(Product): config: Config @@ -73,21 +78,32 @@ def action( preprocessing_dim: Optional[str] = None, ensemble_dim: Optional[str] = None, ) -> Action: + ens_dim = ensemble_dim or self.ensemble_dim + preprocess_dim = preprocessing_dim or self.preprocessing_dim if forecast: + logger.debug(f"Forecast {forecast.nodes}") actions = [] + is_ensemble = ens_dim in nodetree_dimensions(forecast.nodes) for req in self.config.inputs.fc.requests: - req.setdefault("number", [0]) + if is_ensemble: + req.setdefault(ens_dim, [0]) selected = forecast.sel(req) - selected.set_path(path_from_request(req)) - if np.size(req["number"]) == 1: - selected._add_dimension("number", np.atleast_1d(req["number"])[0]) + selected = selected.set_path(path_from_request(req)) + for dim in [ + ens_dim, + preprocess_dim, + "step", + *self.config.accumulations.keys(), + ]: + if dim in req and np.size(req[dim]) == 1: + selected._add_dimension(dim, np.atleast_1d(req[dim])[0]) actions.append(selected) ret = merge(*actions) else: ret = self.source(ensemble_dim=ensemble_dim) for preprocessing in self.config.preprocessing.actions: ret = ret.preprocessing( - dim=preprocessing_dim or self.preprocessing_dim, + dim=preprocess_dim, **preprocessing.model_dump(), ) for dim, accumulation in self.config.accumulations.items(): @@ -97,7 +113,7 @@ def action( ) if self.config.statistics is not None: ret = ret.ensemble_statistics( - dim=ensemble_dim or self.ensemble_dim, + dim=ens_dim, **self.config.statistics.model_dump(), ) diff --git a/pproc-core/tests/ppcore/products/test_products.py b/pproc-core/tests/ppcore/products/test_products.py index 9f33187b..5c68cbbe 100644 --- a/pproc-core/tests/ppcore/products/test_products.py +++ b/pproc-core/tests/ppcore/products/test_products.py @@ -12,7 +12,7 @@ from earthkit.workflows.plugins.pproc.fluent import from_source from earthkit.workflows.plugins.pproc.utils.request import Request -from ppcore.schema.forecast import ForecastDefinition +from ppcore.schema.forecast import definition_to_dataset, ForecastDefinition from ppcore.products import product_from_output, graph_from_outputs, action_from_outputs from ppcore.utils.requests import expand from conftest import SCHEMA @@ -21,6 +21,76 @@ ROOT_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__))) +INPUTS = { + "ensemble": [ + { + "stream": "oper", + "type": "fc", + "step": list(range(0, 24, 3)), + "param": ["228", "167"], + "levtype": "sfc", + }, + { + "stream": "enfo", + "type": "pf", + "step": list(range(0, 24, 3)), + "param": ["228", "167"], + "number": list(range(1, 5)), + "levtype": "sfc", + }, + { + "stream": "oper", + "type": "fc", + "step": list(range(0, 24, 3)), + "param": ["130"], + "levtype": "pl", + "levelist": [250, 500, 850], + }, + { + "stream": "enfo", + "type": "pf", + "step": list(range(0, 24, 3)), + "param": ["130"], + "levtype": "pl", + "levelist": [250, 500, 850], + "number": list(range(1, 5)), + }, + ], + "deterministic": [ + { + "stream": "oper", + "type": "fc", + "step": [0, 1, 2], + "param": [ + "47", + "165", + "166", + "167", + "168", + "169", + "175", + "176", + "177", + "228021", + ], + "levtype": "sfc", + "date": "20260721", + "time": "1200", + }, + { + "stream": "oper", + "type": "fc", + "step": list(range(0, 24, 3)), + "param": ["130"], + "levtype": "pl", + "levelist": [250, 500, 850], + "date": "20260721", + "time": "1200", + }, + ], +} + + @pytest.mark.parametrize( "requests", [ @@ -44,78 +114,44 @@ def test_action_construction(): @pytest.mark.parametrize( - "requests", + "input_name, requests", [ - os.path.join(ROOT_DIR, "templates", "ensms.yaml"), - os.path.join(ROOT_DIR, "templates", "quantiles.yaml"), + ["ensemble", os.path.join(ROOT_DIR, "templates", "ensms.yaml")], + ["ensemble", os.path.join(ROOT_DIR, "templates", "quantiles.yaml")], + ["deterministic", os.path.join(ROOT_DIR, "templates", "thermo.yaml")], ], - ids=["ensms", "quantiles"], + ids=["ensms", "quantiles", "thermo"], ) -def test_custom_source(requests): +def test_custom_source(input_name, requests): with open(requests, "r") as f: output_requests = yaml.safe_load(f) graph = Graph([]) defaults = {"class": "od", "date": "20230914", "time": "1200", "expver": "0001"} for req in expand(output_requests): - inputs = [ - { - **defaults, - "stream": "oper", - "type": "fc", - "step": list(range(0, 24, 3)), - "param": ["228", "167"], - "levtype": "sfc", - }, - { - **defaults, - "stream": "enfo", - "type": "pf", - "step": list(range(0, 24, 3)), - "param": ["228", "167"], - "number": list(range(1, 5)), - "levtype": "sfc", - }, - { - **defaults, - "stream": "oper", - "type": "fc", - "step": list(range(0, 24, 3)), - "param": ["130"], - "levtype": "pl", - "levelist": [250, 500, 850], - }, - { - **defaults, - "stream": "enfo", - "type": "pf", - "step": list(range(0, 24, 3)), - "param": ["130"], - "levtype": "pl", - "levelist": [250, 500, 850], - "number": list(range(1, 5)), - }, - ] + inputs = [{**defaults, **inp} for inp in INPUTS[input_name]] + forecast = ForecastDefinition( + datacubes=inputs, unperturbed={"stream": "oper", "type": "fc"} + ) product = product_from_output( req, SCHEMA, - forecast=ForecastDefinition( - datacubes=inputs, unperturbed={"stream": "oper", "type": "fc"} - ), + forecast=forecast, metadata={"edition": 2}, ) source_actions = [] + is_ensemble = definition_to_dataset(forecast).is_ensemble for levtype in ["sfc", "pl"]: for request in inputs: if request["levtype"] != levtype: continue req = Request(request) - if "number" not in req: + if is_ensemble and "number" not in req: req.make_dim("number", 0) new_action = from_source( ["fdb"], [req], - join_key="number", + join_key="number" if is_ensemble else "", ) new_action = new_action.set_path(f"/levtype={levtype}/{req['param']}") source_actions.append(new_action) From 420227a03edd4e263809f760363a98d0ec3f126b Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Thu, 30 Jul 2026 17:48:05 +0100 Subject: [PATCH 87/95] Expand output requests by filter keys --- pproc-core/src/ppcore/schema/input.py | 39 ++++++++++--------- .../tests/ppcore/schema/test_input_schema.py | 26 +++++++++++-- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index 6e1c055f..c9c3c96e 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -39,6 +39,7 @@ from ppcore.utils.requests import ( validate_request, update_request, + expand, ) from ppcore.utils.mars import extract_mars from ppcore.utils.qube import union @@ -390,7 +391,7 @@ def outputs( """ Assumes inputs are from the same forecast for a single date and time """ - output_template = validate_request(output_template or {}) + output_template = output_template or {} forecast = definition_to_dataset(forecast) if climatology is not None: climatology = definition_to_dataset(climatology) @@ -403,21 +404,23 @@ def outputs( raise ValueError( f"Output template must contain {required} to derive outputs from inputs" ) - # Derive output requests and corresponding input configs that match the template - for base_output, config in self.reconstruct( - output_template=output_template, - from_inputs=True, - method=method, - enable_cache=enable_cache, - ): - logger.debug("Reconstructed output %s", base_output) - config = InputConfig(**config) - # Perform intersection with the forecast and climatology qubes to determine - # the actual output requests that can be generated from the inputs - for mout in config.matched_outputs( - base_output, forecast, climatology, step_schema + for template in expand(output_template, dim=self.all_filters): + template = validate_request(template) + # Derive output requests and corresponding input configs that match the template + for base_output, config in self.reconstruct( + output_template=template, + from_inputs=True, + method=method, + enable_cache=enable_cache, ): - inputs = list(config.inputs(mout, forecast, climatology)) - mout = extract_mars(self._set_defaults(mout, inputs)) - logger.info("Output %s, requiring inputs %s", mout, inputs) - yield mout, inputs + logger.debug("Reconstructed output %s", base_output) + config = InputConfig(**config) + # Perform intersection with the forecast and climatology qubes to determine + # the actual output requests that can be generated from the inputs + for mout in config.matched_outputs( + base_output, forecast, climatology, step_schema + ): + inputs = list(config.inputs(mout, forecast, climatology)) + mout = extract_mars(self._set_defaults(mout, inputs)) + logger.info("Output %s, requiring inputs %s", mout, inputs) + yield mout, inputs diff --git a/pproc-core/tests/ppcore/schema/test_input_schema.py b/pproc-core/tests/ppcore/schema/test_input_schema.py index 10980f88..af3afee9 100644 --- a/pproc-core/tests/ppcore/schema/test_input_schema.py +++ b/pproc-core/tests/ppcore/schema/test_input_schema.py @@ -410,11 +410,31 @@ def test_inputs(request, output): @pytest.mark.parametrize( "template, num_outputs", [ - [{"stream": "enfo", "type": "em"}, 1], - [{"stream": "oper", "type": "fc"}, 12], + [{"stream": "enfo", "type": ["em", "es"]}, 2], + [ + { + "stream": "oper", + "type": "fc", + "param": [ + 261002, + 261001, + 260004, + 260005, + 260255, + 260242, + 261016, + 261018, + 261015, + 261014, + 261023, + 207, + ], + }, + 12, + ], [{"stream": "enfo", "type": "ep", "selection": "default"}, 52], [{"stream": "eefo", "type": "efi"}, 1], - [{"stream": "msmm", "type": "fcmean"}, 3], + [{"stream": "msmm", "type": ["fcmean", "fcmax"]}, 3], [{"stream": "enfo", "type": "ep", "selection": "default"}, 7], ], ids=["ensms", "thermofeel", "t850", "efi", "monthly", "prob"], From f1efdf2874a1f1538a9343fd7158869138f6c754 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Fri, 31 Jul 2026 13:53:59 +0100 Subject: [PATCH 88/95] Fix combining of actions from different output requests and expand tests --- pproc-core/src/ppcore/products/__init__.py | 17 ++- pproc-core/src/ppcore/products/ensemble.py | 20 +++- .../ppcore/products/templates/thermo_ens.yaml | 23 ++++ .../templates/{thermo.yaml => thermo_fc.yaml} | 4 +- .../tests/ppcore/products/templates/wind.yaml | 109 ++---------------- .../tests/ppcore/products/test_products.py | 75 ++++++++---- pproc-core/tests/schema.yaml | 38 +++--- 7 files changed, 137 insertions(+), 149 deletions(-) create mode 100644 pproc-core/tests/ppcore/products/templates/thermo_ens.yaml rename pproc-core/tests/ppcore/products/templates/{thermo.yaml => thermo_fc.yaml} (91%) diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index 39c1bc62..82178166 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -8,6 +8,7 @@ from earthkit.workflows.graph import Graph, deduplicate_nodes from earthkit.workflows.fluent import Action from earthkit.workflows.nodetree import combine_by_coords, datacubes +from qubed import Qube from ppcore.utils.requests import expand from ppcore.configs import from_outputs as config_from_outputs @@ -80,8 +81,20 @@ def action_from_outputs( clim_dataset = ClimatologyDefinition(datacubes=datacubes(climatology.nodes)) else: clim_dataset = climatology + + expanded_requests = list(expand(requests)) + + # Determine coords that might be joined over and promote to dimension + # TODO: enable generating outputs with a mix of instantaneous steps and step ranges + # Should be done with changing more generally all values for "step" in requests to be + # strings + qube = Qube.empty() + for request in expanded_requests: + qube = qube | qube.from_datacube(request) + promote = {dim for dim, values in qube.axes().items() if len(values) > 1} + nodes = [] - for request in expand(requests): + for request in expanded_requests: nodes.append( product_from_output( request, @@ -90,7 +103,7 @@ def action_from_outputs( climatology=clim_dataset, metadata=metadata, ) - .action(**action_kwargs) + .action(**action_kwargs, final_dims=promote) .nodes ) return Action(combine_by_coords(nodes)) diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index 78cee0ac..1462b2d6 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -77,6 +77,7 @@ def action( forecast: Optional[Action] = None, preprocessing_dim: Optional[str] = None, ensemble_dim: Optional[str] = None, + final_dims: Optional[set[str]] = None, ) -> Action: ens_dim = ensemble_dim or self.ensemble_dim preprocess_dim = preprocessing_dim or self.preprocessing_dim @@ -122,11 +123,28 @@ def action( out_metadata = output_config["metadata"].copy() out_metadata.update(self.output_overrides) ret = ret.write(output_config["targets"], metadata=out_metadata) + + final_dims = final_dims or [] + if preprocess_dim in final_dims: + # Stream is uniquely determined by parameter + final_dims.discard("stream") + if ens_dim in final_dims: + # Stream/type of member is determined by ensemble number + final_dims.discard("type") + final_dims.discard("stream") ret.set_scalar_coords( - {k: str(v) for k, v in self.config.output.request.items()}, + {k: v for k, v in self.config.output.request.items() if k in final_dims}, override=True, make_dim=True, ) + ret.set_scalar_coords( + { + k: v + for k, v in self.config.output.request.items() + if k not in final_dims + }, + override=True, + ) return ret def in_mars(self, sources: Optional[list[str]] = None) -> Iterator[dict]: diff --git a/pproc-core/tests/ppcore/products/templates/thermo_ens.yaml b/pproc-core/tests/ppcore/products/templates/thermo_ens.yaml new file mode 100644 index 00000000..c16399cc --- /dev/null +++ b/pproc-core/tests/ppcore/products/templates/thermo_ens.yaml @@ -0,0 +1,23 @@ +- class: od + stream: oper + type: fc + levtype: sfc + domain: g + param: [261002, 261001, 260004, 260005, 260255, 260242, 261016, 261018, 261015, 261014, 261023] + date: "20230914" + time: 12 + expver: "0001" + step: [3, 6] + sources: "fdb:" +- class: od + stream: enfo + type: pf + levtype: sfc + domain: g + param: [261002, 261001, 260004, 260005, 260255, 260242, 261016, 261018, 261015, 261014, 261023] + date: "20230914" + time: 12 + expver: "0001" + step: [3, 6] + sources: "fdb:" + number: [1, 2] diff --git a/pproc-core/tests/ppcore/products/templates/thermo.yaml b/pproc-core/tests/ppcore/products/templates/thermo_fc.yaml similarity index 91% rename from pproc-core/tests/ppcore/products/templates/thermo.yaml rename to pproc-core/tests/ppcore/products/templates/thermo_fc.yaml index e5867bd0..28e6872a 100644 --- a/pproc-core/tests/ppcore/products/templates/thermo.yaml +++ b/pproc-core/tests/ppcore/products/templates/thermo_fc.yaml @@ -4,7 +4,7 @@ levtype: sfc domain: g param: [261002, 261001, 260004, 260005, 260255, 260242, 261016, 261018, 261015, 261014, 261023] - date: "20260721" + date: "20230914" time: 12 expver: "0001" step: [1, 2] @@ -15,7 +15,7 @@ levtype: sfc domain: g param: [260242, 261023, 261018, 260255, 260004, 260005, 261016] - date: "20260721" + date: "20230914" time: 12 expver: "0001" step: 0 diff --git a/pproc-core/tests/ppcore/products/templates/wind.yaml b/pproc-core/tests/ppcore/products/templates/wind.yaml index 5245f7e5..1ef6c3f8 100644 --- a/pproc-core/tests/ppcore/products/templates/wind.yaml +++ b/pproc-core/tests/ppcore/products/templates/wind.yaml @@ -1,123 +1,34 @@ - class: od stream: enfo - type: em + type: [em, es] levtype: sfc domain: g param: "10" date: "20230914" time: 12 expver: "0001" - step: 0 + step: [0, 3, 6] + sources: "fdb:" - class: od - stream: enfo - type: em - levtype: sfc - domain: g - param: "10" - date: "20230914" - time: 12 - expver: "0001" - step: 3 -- class: od - stream: enfo - type: em - levtype: sfc - domain: g - param: "10" - date: "20230914" - time: 12 - expver: "0001" - step: 6 -- class: od - stream: enfo - type: es - levtype: sfc - domain: g - param: "10" - date: "20230914" - time: 12 - expver: "0001" - step: 0 -- class: od - stream: enfo - type: es - levtype: sfc - domain: g - param: "10" - date: "20230914" - time: 12 - expver: "0001" - step: 3 -- class: od - stream: enfo - type: es - levtype: sfc - domain: g - param: "207" - date: "20230914" - time: 12 - expver: "0001" - step: 6 -- class: od - stream: enfo - type: cf - levtype: sfc - domain: g - param: "10" - date: "20230914" - time: 12 - expver: "0001" - step: 0 -- class: od - stream: enfo - type: cf - levtype: sfc - domain: g - param: "10" - date: "20230914" - time: 12 - expver: "0001" - step: 3 -- class: od - stream: enfo - type: cf - levtype: sfc - domain: g - param: "10" - date: "20230914" - time: 12 - expver: "0001" - step: 6 -- class: od - stream: enfo - type: pf - number: [1, 2, 3, 4, 5] - levtype: sfc - domain: g - param: "10" - date: "20230914" - time: 12 - expver: "0001" - step: 0 -- class: od - stream: enfo - type: pf - number: [1, 2, 3, 4, 5] + stream: oper + type: fc levtype: sfc domain: g param: "10" date: "20230914" time: 12 expver: "0001" - step: 3 + step: [0, 3, 6] + sources: "fdb:" - class: od stream: enfo type: pf - number: [1, 2, 3, 4, 5] + number: [1, 2, 3, 4] levtype: sfc domain: g param: "10" date: "20230914" time: 12 expver: "0001" - step: 6 + step: [0, 3, 6] + sources: "fdb:" diff --git a/pproc-core/tests/ppcore/products/test_products.py b/pproc-core/tests/ppcore/products/test_products.py index 5c68cbbe..0f01f930 100644 --- a/pproc-core/tests/ppcore/products/test_products.py +++ b/pproc-core/tests/ppcore/products/test_products.py @@ -27,14 +27,42 @@ "stream": "oper", "type": "fc", "step": list(range(0, 24, 3)), - "param": ["228", "167"], + "param": [ + "228", + "47", + "165", + "166", + "167", + "168", + "169", + "175", + "176", + "177", + "228021", + "138", + "155", + ], "levtype": "sfc", }, { "stream": "enfo", "type": "pf", "step": list(range(0, 24, 3)), - "param": ["228", "167"], + "param": [ + "228", + "47", + "165", + "166", + "167", + "168", + "169", + "175", + "176", + "177", + "228021", + "138", + "155", + ], "number": list(range(1, 5)), "levtype": "sfc", }, @@ -74,8 +102,6 @@ "228021", ], "levtype": "sfc", - "date": "20260721", - "time": "1200", }, { "stream": "oper", @@ -84,46 +110,45 @@ "param": ["130"], "levtype": "pl", "levelist": [250, 500, 850], - "date": "20260721", - "time": "1200", }, ], } @pytest.mark.parametrize( - "requests", - [ - os.path.join(ROOT_DIR, "templates", "ensms.yaml"), - os.path.join(ROOT_DIR, "templates", "prob.yaml"), - os.path.join(ROOT_DIR, "templates", "quantiles.yaml"), - os.path.join(ROOT_DIR, "templates", "thermo.yaml"), - ], - ids=["ensms", "prob", "quantiles", "thermo"], + "filename", + ["ensms", "prob", "quantiles", "thermo_fc", "thermo_ens", "wind"], ) -def test_graph_construction(requests): - with open(requests, "r") as f: +def test_graph_construction(filename): + path = os.path.join(ROOT_DIR, "templates", f"{filename}.yaml") + with open(path, "r") as f: output_requests = yaml.safe_load(f) graph_from_outputs(output_requests, SCHEMA, forecast="enfo") -def test_action_construction(): - with open(os.path.join(ROOT_DIR, "templates", "ensms.yaml"), "r") as f: +@pytest.mark.parametrize("filename", ["ensms", "quantiles", "thermo_ens", "wind"]) +def test_action_construction(filename): + # TODO: Enable prob when we can handle mixed step types in output requests + path = os.path.join(ROOT_DIR, "templates", f"{filename}.yaml") + with open(path, "r") as f: output_requests = yaml.safe_load(f) action_from_outputs(output_requests, SCHEMA, forecast="enfo") @pytest.mark.parametrize( - "input_name, requests", + "input_name, filename", [ - ["ensemble", os.path.join(ROOT_DIR, "templates", "ensms.yaml")], - ["ensemble", os.path.join(ROOT_DIR, "templates", "quantiles.yaml")], - ["deterministic", os.path.join(ROOT_DIR, "templates", "thermo.yaml")], + ["ensemble", "ensms"], + ["ensemble", "quantiles"], + ["ensemble", "wind"], + ["deterministic", "thermo_fc"], + ["ensemble", "thermo_ens"], ], - ids=["ensms", "quantiles", "thermo"], + ids=["ensms", "quantiles", "wind", "thermo_fc", "thermo_ens"], ) -def test_custom_source(input_name, requests): - with open(requests, "r") as f: +def test_custom_source(input_name, filename): + path = os.path.join(ROOT_DIR, "templates", f"{filename}.yaml") + with open(path, "r") as f: output_requests = yaml.safe_load(f) graph = Graph([]) diff --git a/pproc-core/tests/schema.yaml b/pproc-core/tests/schema.yaml index 2552897e..d210f809 100644 --- a/pproc-core/tests/schema.yaml +++ b/pproc-core/tests/schema.yaml @@ -8,26 +8,18 @@ config: filter:param: "*": {} "10": - filter:type: - em/es/ep/pb: - preprocessing: - - operation: expand - internal_dim: ["param", ["u", "v"]] - backend_kwargs: {"method": "sel"} - - operation: norm - interp_keys: - intgrid: "none" - legendre-loader: "shmem" - matrix-loader: "file-io" - vod2uv: true - input: - expand_exclude: ["param"] - "*": - preprocessing: - - operation: reshape - shape: 2 - - operation: norm - vod2uv: true + preprocessing: + - operation: expand + internal_dim: ["param", ["u", "v"]] + backend_kwargs: {"method": "sel"} + - operation: norm + interp_keys: + intgrid: "none" + legendre-loader: "shmem" + matrix-loader: "file-io" + vod2uv: true + input: + expand_exclude: ["param"] "131/132": filter:type: taem/taes: {} @@ -137,6 +129,8 @@ config: number: {} "*": filter:param: + "*": + entrypoint: pproc-accumulate "200189/200142/200143/200144/228216/200228": entrypoint: pproc-accumulate accumulations: @@ -2806,6 +2800,10 @@ inputs: filter:stream: enfo/waef: filter:param: + "10": + fc_inputs: + select: + param: ["138", "155"] "121/122/123": fc_inputs: select: From 424e4afb7b38566f847b20ab2578111a818aa559 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Fri, 31 Jul 2026 14:44:05 +0100 Subject: [PATCH 89/95] Ensure all required values are present --- pproc-core/src/ppcore/schema/forecast.py | 6 +++ .../tests/ppcore/schema/test_input_schema.py | 37 ++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/pproc-core/src/ppcore/schema/forecast.py b/pproc-core/src/ppcore/schema/forecast.py index abff402a..b4f4489f 100644 --- a/pproc-core/src/ppcore/schema/forecast.py +++ b/pproc-core/src/ppcore/schema/forecast.py @@ -9,6 +9,7 @@ from pydantic import Field, model_validator, field_validator import bisect import logging +import numpy as np from earthkit.workflows.plugins.pproc.utils.pydantic_utils import PProcBaseModel from ppcore.utils.requests import validate_request @@ -142,6 +143,11 @@ def select( logger.debug(f"Selecting {key}:{vals} from {qube}") if key in qube.axes(): qube = qube.select({key: vals}) + if len(qube.axes().get(key, [])) != len(np.atleast_1d(vals)): + logger.debug( + f"Not all required inputs retrieved, got {qube.axes().get(key, [])}" + ) + return Qube.empty(), {} elif select_to_override: overrides[key] = vals else: diff --git a/pproc-core/tests/ppcore/schema/test_input_schema.py b/pproc-core/tests/ppcore/schema/test_input_schema.py index af3afee9..53dc14a3 100644 --- a/pproc-core/tests/ppcore/schema/test_input_schema.py +++ b/pproc-core/tests/ppcore/schema/test_input_schema.py @@ -521,6 +521,33 @@ def test_input_format(): {"stream": "oper", "type": "fc"}, 20, ], + [ + ForecastDefinition( + datacubes=[ + { + "class": "od", + "stream": "oper", + "levtype": "sfc", + "param": [ + "165", + "166", + "167", + "168", + "169", + "175", + "176", + "177", + ], + "step": [0, 1], + "type": "fc", + "time": "0000", + }, + ], + unperturbed={"stream": "oper", "type": "fc"}, + ), + {"stream": "oper", "type": "fc", "step": 1}, + 8, + ], [ ForecastDefinition( datacubes=[ @@ -588,9 +615,15 @@ def test_input_format(): 1, ], ], - ids=["redundant-steps", "redundant-params", "not-from-inputs", "levels"], + ids=[ + "redundant-steps", + "redundant-params", + "insufficient-params", + "not-from-inputs", + "levels", + ], ) -def test_redundant_inputs(inputs, template, num_outputs): +def test_non_exact_inputs(inputs, template, num_outputs): input_schema = InputSchema(schema("inputs")) step_schema = StepSchema(schema("windows")) generated = list( From cbd0849a0c43975f7e14d5be3b4b83e72462e17f Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Fri, 31 Jul 2026 17:23:56 +0100 Subject: [PATCH 90/95] Set output action path based on datacube --- pproc-core/src/ppcore/products/__init__.py | 19 +++++++++++++------ pproc-core/src/ppcore/products/ensemble.py | 8 ++++++-- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/pproc-core/src/ppcore/products/__init__.py b/pproc-core/src/ppcore/products/__init__.py index 82178166..fe269580 100644 --- a/pproc-core/src/ppcore/products/__init__.py +++ b/pproc-core/src/ppcore/products/__init__.py @@ -6,10 +6,11 @@ from typing import Optional, Union from earthkit.workflows.graph import Graph, deduplicate_nodes -from earthkit.workflows.fluent import Action -from earthkit.workflows.nodetree import combine_by_coords, datacubes +from earthkit.workflows.fluent import Action, merge +from earthkit.workflows.nodetree import datacubes from qubed import Qube +from earthkit.workflows.plugins.pproc.fluent import path_from_request from ppcore.utils.requests import expand from ppcore.configs import from_outputs as config_from_outputs from ppcore.configs.product import ProductConfig @@ -93,9 +94,15 @@ def action_from_outputs( qube = qube | qube.from_datacube(request) promote = {dim for dim, values in qube.axes().items() if len(values) > 1} - nodes = [] + actions = [] for request in expanded_requests: - nodes.append( + request_path = "" + for datacube in qube.datacubes(): + if all([request[x] in datacube.get(x, []) for x in request.keys()]): + request_path = path_from_request(datacube) + break + assert len(request_path) != 0 + actions.append( product_from_output( request, pproc_schema=pproc_schema, @@ -104,9 +111,9 @@ def action_from_outputs( metadata=metadata, ) .action(**action_kwargs, final_dims=promote) - .nodes + .set_path(request_path) ) - return Action(combine_by_coords(nodes)) + return merge(*actions) def graph_from_outputs( diff --git a/pproc-core/src/ppcore/products/ensemble.py b/pproc-core/src/ppcore/products/ensemble.py index 1462b2d6..b46b4e85 100644 --- a/pproc-core/src/ppcore/products/ensemble.py +++ b/pproc-core/src/ppcore/products/ensemble.py @@ -97,7 +97,11 @@ def action( *self.config.accumulations.keys(), ]: if dim in req and np.size(req[dim]) == 1: - selected._add_dimension(dim, np.atleast_1d(req[dim])[0]) + selected.set_scalar_coords( + {dim: np.atleast_1d(req[dim])[0]}, + override=True, + make_dim=True, + ) actions.append(selected) ret = merge(*actions) else: @@ -145,7 +149,7 @@ def action( }, override=True, ) - return ret + return ret.set_path(path_from_request(self.config.output.request)) def in_mars(self, sources: Optional[list[str]] = None) -> Iterator[dict]: if self.config.inputs is None: From dbaa0a0ac6958224155368b32e3538a64fb64101 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Fri, 31 Jul 2026 19:35:55 +0100 Subject: [PATCH 91/95] Allow key not to exist in path creation --- pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index f7f14531..0e0fd156 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -819,4 +819,4 @@ def from_source( def path_from_request(request: dict, keys: list[str] = ["levtype", "param"]) -> str: - return "/".join([str(request[x]) for x in keys]) + return "/".join([str(request[x]) for x in keys if x in request]) From 49f7b03b177210b474bcf78a8316837274900bfc Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 3 Aug 2026 08:48:29 +0100 Subject: [PATCH 92/95] Fix scale --- pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index 0e0fd156..b8e63d23 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -203,7 +203,8 @@ def multiply( ) -> Action: return super().multiply(other, backend_kwargs={"metadata": metadata}) - scale = multiply + def scale(self, value: float, metadata: dict | None = None) -> Action: + return super().multiply(value, backend_kwargs={"metadata": metadata}) def power( self, other: Union[Action, float], metadata: dict | None = None From cb03802d94eab6ce0ee36ec885b8f1cfc7b6b217 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 3 Aug 2026 10:25:51 +0100 Subject: [PATCH 93/95] Upgrade ekw to 0.15.5 --- pproc-core/pyproject.toml | 2 +- pproc-core/uv.lock | 8 ++++---- pproc/uv.lock | 17 ++++++++++++----- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/pproc-core/pyproject.toml b/pproc-core/pyproject.toml index dd2b8ebc..da3bdcaf 100644 --- a/pproc-core/pyproject.toml +++ b/pproc-core/pyproject.toml @@ -33,7 +33,7 @@ dependencies = [ "code-meters", "conflator>=0.1.8", "earthkit-time", - "earthkit-workflows>=0.15.4", + "earthkit-workflows>=0.15.5", "numpy", "pandas", "pydantic", diff --git a/pproc-core/uv.lock b/pproc-core/uv.lock index 08984d45..42db4185 100644 --- a/pproc-core/uv.lock +++ b/pproc-core/uv.lock @@ -426,7 +426,7 @@ wheels = [ [[package]] name = "earthkit-workflows" -version = "0.15.4" +version = "0.15.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "array-api-compat" }, @@ -442,9 +442,9 @@ dependencies = [ { name = "sortedcontainers" }, { name = "xarray" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ed/06/79fb057cfd15a979b4ecc7e61f4620551671b5095c218d29b5a4dc7109a4/earthkit_workflows-0.15.4.tar.gz", hash = "sha256:3c5c55872d718992476866c8c6a013426544df4f9c5055dc3bfe68bba5490df4", size = 10866443, upload-time = "2026-07-29T09:49:59.207Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/63/3b01673695df477ede39178a6db2b7f72fb30d94cf4d1dead71358a4faef/earthkit_workflows-0.15.5.tar.gz", hash = "sha256:06717d020794ad0856556fb1c862cd4fe397784719da8fe4f7e7aea503460d44", size = 10866450, upload-time = "2026-08-03T08:44:10.269Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/15/486d3f4a2ac02dd913fa1d79b59440575c987d8f4caf363d209471badb89/earthkit_workflows-0.15.4-py3-none-any.whl", hash = "sha256:1b31130e17bdb5160baf2d791812edecd84632f78e0c512aac9a8854d83f9a1a", size = 214914, upload-time = "2026-07-29T09:49:57.226Z" }, + { url = "https://files.pythonhosted.org/packages/63/4f/cb17554d664662ec1176cf61e4cc85e491c30214d91d8ca0aefea8636bc8/earthkit_workflows-0.15.5-py3-none-any.whl", hash = "sha256:d1df6abe0df117dee85b88f44599e557e7d03e4b97db3931dca74b1b817bd959", size = 215033, upload-time = "2026-08-03T08:44:08.484Z" }, ] [package.optional-dependencies] @@ -1287,7 +1287,7 @@ requires-dist = [ { name = "code-meters" }, { name = "conflator", specifier = ">=0.1.8" }, { name = "earthkit-time" }, - { name = "earthkit-workflows", specifier = ">=0.15.4" }, + { name = "earthkit-workflows", specifier = ">=0.15.5" }, { name = "earthkit-workflows", extras = ["vizualize"], marker = "extra == 'vizualize'", specifier = ">=0.15.4" }, { name = "numpy" }, { name = "pandas" }, diff --git a/pproc/uv.lock b/pproc/uv.lock index 544f0418..aa1f9c4d 100644 --- a/pproc/uv.lock +++ b/pproc/uv.lock @@ -498,7 +498,7 @@ wheels = [ [[package]] name = "earthkit-workflows" -version = "0.15.4" +version = "0.15.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "array-api-compat" }, @@ -515,9 +515,9 @@ dependencies = [ { name = "sortedcontainers" }, { name = "xarray" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ed/06/79fb057cfd15a979b4ecc7e61f4620551671b5095c218d29b5a4dc7109a4/earthkit_workflows-0.15.4.tar.gz", hash = "sha256:3c5c55872d718992476866c8c6a013426544df4f9c5055dc3bfe68bba5490df4", size = 10866443, upload-time = "2026-07-29T09:49:59.207Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/63/3b01673695df477ede39178a6db2b7f72fb30d94cf4d1dead71358a4faef/earthkit_workflows-0.15.5.tar.gz", hash = "sha256:06717d020794ad0856556fb1c862cd4fe397784719da8fe4f7e7aea503460d44", size = 10866450, upload-time = "2026-08-03T08:44:10.269Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/15/486d3f4a2ac02dd913fa1d79b59440575c987d8f4caf363d209471badb89/earthkit_workflows-0.15.4-py3-none-any.whl", hash = "sha256:1b31130e17bdb5160baf2d791812edecd84632f78e0c512aac9a8854d83f9a1a", size = 214914, upload-time = "2026-07-29T09:49:57.226Z" }, + { url = "https://files.pythonhosted.org/packages/63/4f/cb17554d664662ec1176cf61e4cc85e491c30214d91d8ca0aefea8636bc8/earthkit_workflows-0.15.5-py3-none-any.whl", hash = "sha256:d1df6abe0df117dee85b88f44599e557e7d03e4b97db3931dca74b1b817bd959", size = 215033, upload-time = "2026-08-03T08:44:08.484Z" }, ] [package.optional-dependencies] @@ -1751,7 +1751,7 @@ dependencies = [ { name = "code-meters" }, { name = "conflator" }, { name = "earthkit-time" }, - { name = "earthkit-workflows", extra = ["vizualize"] }, + { name = "earthkit-workflows" }, { name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, { name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "pandas" }, @@ -1759,6 +1759,11 @@ dependencies = [ { name = "qubed" }, ] +[package.optional-dependencies] +vizualize = [ + { name = "earthkit-workflows", extra = ["vizualize"] }, +] + [package.dev-dependencies] dev = [ { name = "prek" }, @@ -1771,12 +1776,14 @@ requires-dist = [ { name = "code-meters" }, { name = "conflator", specifier = ">=0.1.8" }, { name = "earthkit-time" }, - { name = "earthkit-workflows", extras = ["vizualize"], specifier = ">=0.15.4" }, + { name = "earthkit-workflows", specifier = ">=0.15.5" }, + { name = "earthkit-workflows", extras = ["vizualize"], marker = "extra == 'vizualize'", specifier = ">=0.15.4" }, { name = "numpy" }, { name = "pandas" }, { name = "pydantic" }, { name = "qubed", specifier = ">=0.3,<0.4.4" }, ] +provides-extras = ["vizualize"] [package.metadata.requires-dev] dev = [ From 786781742387bbd8a19613bc36fa245d10095959 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 3 Aug 2026 10:49:18 +0100 Subject: [PATCH 94/95] Set environment for thermofeel --- pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py index b8e63d23..1c33e8bb 100644 --- a/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py +++ b/pproc-core/src/earthkit/workflows/plugins/pproc/fluent.py @@ -523,7 +523,11 @@ def thermal_index( ret = method(dim=dim, metadata=metadata) else: ret = param_action._wrapped_reduction( - fluent.Payload(func=function, kwargs={"metadata": metadata or {}}), + fluent.Payload( + func=function, + kwargs={"metadata": metadata or {}}, + metadata={"environment": ENVIRONMENT["ppruntime"]}, + ), dim=dim, ) ret._add_dimension(dim, str(metadata.get("paramId"))) From d70733cdab4452e9b05e54c523f3e6b5f6c2e239 Mon Sep 17 00:00:00 2001 From: Jenny Wong Date: Mon, 3 Aug 2026 11:24:08 +0100 Subject: [PATCH 95/95] Sort input request keys --- pproc-core/src/ppcore/schema/input.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pproc-core/src/ppcore/schema/input.py b/pproc-core/src/ppcore/schema/input.py index c9c3c96e..bc789cfa 100644 --- a/pproc-core/src/ppcore/schema/input.py +++ b/pproc-core/src/ppcore/schema/input.py @@ -140,8 +140,8 @@ def requests( if cube["type"] in ["fcmean", "fcmax", "fcstdev", "fcmin"]: cube.setdefault("number", 0) cube.update(extra) - yield validate_request(cube) - # yield {key: val if len(val) > 1 else val[0] for key, val in cube.items()} + # Sort request keys for consistent ordering in output configs + yield validate_request({k: v for k, v in sorted(cube.items())}) def create_selection( self, base_request: dict, forecast: Dataset, include_derived: bool = True